Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PowerBuilder Новый топик    Ответить
 не отрабатывает Insert  [new]
dendi
Member

Откуда:
Сообщений: 12
Здравствуйте! Помогите. У меня проблема - не отрабатывает Insert в теблицу. Т.е. ошибок нет, но в таблице ничего не происходит.


gd_date_vidach = Today()
dw_report.object.out_no_date[1] = gd_date_vidach


INSERT into F5_new (d)
values (:gd_date_vidach);
commit;

Update F5_new;
18 ноя 10, 17:35    [9803453]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает Insert  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3154
dendi,

Вышеприведенный скрипт просто не обрабатывает ошибки, это не означает, что их нет.
18 ноя 10, 17:44    [9803509]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает Insert  [new]
spas2001
Member

Откуда: Тамбов--->Москва-->Тамбов-->Москва-->Тамбов
Сообщений: 2010
dendi
Update F5_new;

Это что за ересь?
19 ноя 10, 09:30    [9805935]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает Insert  [new]
maniac85
Member

Откуда:
Сообщений: 14562
я канешно не то чтобы специалист, но скажу
dendi
gd_date_vidach = Today()
слово date уже содержится в сокращенном виде в аббревиатуре gd)
dw_report.object.out_no_date[1] = gd_date_vidach
лучше наверное использовать setitem, хотя к инсерту эта строка вообще не имеет отношения
INSERT into F5_new (d)
values (:gd_date_vidach);
commit;
писать sql запросы прямо в тексте программы обычно не нужно, работу с базой берет на себя datawindow
Update F5_new;
ну это явно отчаянные попытки спасти положение)

Вообще конечно хотелось бы знать что этот скрипт должен делать, потому как выглядит довольно сомнительно
19 ноя 10, 10:30    [9806255]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает Insert  [new]
shut-up-and-skate
Member

Откуда: ВАО
Сообщений: 4259
используй execute immediate
19 ноя 10, 10:36    [9806313]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает Insert  [new]
PaulJB
Member

Откуда: Киев
Сообщений: 737
А где анализ SQLCA.SQLCode (ну, хотя бы ...)
19 ноя 10, 10:49    [9806413]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает Insert  [new]
shut-up-and-skate
Member

Откуда: ВАО
Сообщений: 4259
код
dendi
INSERT into F5_new (d)
values (:gd_date_vidach);
должен работать если ты добавиш using sqlca; или что там у тебя
19 ноя 10, 11:12    [9806557]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает Insert  [new]
Dim2000
Member

Откуда: Москва
Сообщений: 5318

19.11.2010 11:12, shut-up-and-skate пишет:

> должен работать если ты добавиш using sqlca; или что там у тебя

Может, хватит безграмотных советов?

Posted via ActualForum NNTP Server 1.4

19 ноя 10, 12:08    [9807057]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает Insert  [new]
spas2001
Member

Откуда: Тамбов--->Москва-->Тамбов-->Москва-->Тамбов
Сообщений: 2010
Ну давайте все-таки разберем ошибки

datetime gd_date_vidach
 gd_date_vidach = datetime(Today()) //необходимо явно привести к datetime
dw_report.object.out_no_date[1] = gd_date_vidach
//Теперь 2 пути - обновление через dw если оно обновляемое или вставка в таблицу напрямую
//Обновление через dw
dw_report.update()
if sqlca.sqlcode <> 0 then
      MessageBox('Внимание', 'Ошибка сохранения данных '+ sqlca.sqlerrtext)
      rollback;
else
      commit;
end if
//Или вставка через прямой инсерт
INSERT into F5_new (d) // а поле точно "d" называется?
values (:gd_date_vidach);
if sqlca.sqlcode <> 0 then
      MessageBox('Внимание', 'Ошибка сохранения данных '+ sqlca.sqlerrtext)
      rollback;
else
dw_report.ResetUpdate()
      commit;
end if

Не скажу что это верх совершенства, но примерно так. Используйте любой метод
20 ноя 10, 09:11    [9812397]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает Insert  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3154
spas2001,

Если Вы думаете, что данный код получит текущие дату и время, то Вы ошибаетесь.
20 ноя 10, 10:19    [9812472]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает Insert  [new]
armblg
Member

Откуда: Красноярск
Сообщений: 47
spas2001,

Имхо, после dw_report.update() проверять SQLCA.SQLCode бесполезно - там всегда 0, даже при ошибке, перехватывать которую нужно в событиях DW, но не суть.
Возможно автор (кстати, чего-то его не слышно) привел различные попытки записи в таблицу, которые не работают. Может ограничения на уровне БД?
Обработку ошибок нужно вставить обязательно, на крайняк включить trace и посмотреть логи.
20 ноя 10, 16:42    [9813233]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает Insert  [new]
Ursego
Member [скрыт]

Откуда:
Сообщений: 436
Пауэрбилдеровская переменная gd_date_vidach, насколько я понял, имеет тип date, а не datetime (иначе она бы именовалась gdt_date_vidach), а поле в таблице базы данных наверняка имеет тип date, который в базах данных хранит и время тоже и собсна говоря соответствует типу datetime в PB (т.е. поле одного типа, а значение вставляется другого). Я не утверждаю, что проблема именно в этом (и замечания по обработке ошибок поддерживаю), но можно попробовать передать INSERT-у переменную типа datetime чтоб выяснить здесь ли собака порылась:

datetime ldt_date_vidach

ldt_date_vidach = DateTime(Today()) // если нужно и время, то DateTime(Today(), Now())

INSERT into F5_new (d) 
values (:ldt_date_vidach);
commit;
21 ноя 10, 04:09    [9814613]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает Insert  [new]
spas2001
Member

Откуда: Тамбов--->Москва-->Тамбов-->Москва-->Тамбов
Сообщений: 2010
armblg
spas2001,

Имхо, после dw_report.update() проверять SQLCA.SQLCode бесполезно - там всегда 0

Д-а-а??? Вы уверены?
При блобах может и бесполезно, а так - вполне жизнеспособный вариант

То Ursego
А я собственно зачем пример привел. Но скорее всего и поле в БД datetime если нормальный человек проектировал

Марк, время будет нулевое и я это прекрасно знаю:)
21 ноя 10, 19:54    [9815666]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает Insert  [new]
spas2001
Member

Откуда: Тамбов--->Москва-->Тамбов-->Москва-->Тамбов
Сообщений: 2010
Для самообразования:)
RTFM
Error handling in scripts

The scripts shown in the SQL examples above do not include error handling, but it is good practice to test the success and failure codes (the SQLCode attribute) in the transaction object after every statement. The codes are:

Value Meaning
0 Success.
100 Fetched row not found.
-1 Error; the statement failed. Use SQLErrText or SQLDBCode to obtain the detail.
21 ноя 10, 20:04    [9815688]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает Insert  [new]
Anatoly Moskovsky
Member

Откуда: Odessa
Сообщений: 6610
spas2001,

Функции DW retrieve(), update() не меняют состояние trans.SQLCode.
Ошибку можно увидеть только проверив, что вернула фунция (-1 в случае ошибки) или в событии dberror
22 ноя 10, 00:56    [9816328]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает Insert  [new]
spas2001
Member

Откуда: Тамбов--->Москва-->Тамбов-->Москва-->Тамбов
Сообщений: 2010
То Anatoly Moskovsky

Я это и имел ввиду:)
22 ноя 10, 10:15    [9816953]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает Insert  [new]
spas2001
Member

Откуда: Тамбов--->Москва-->Тамбов-->Москва-->Тамбов
Сообщений: 2010
Хотя может быть и не совсем так, если доступ к базе происходит в синхронном режиме, мы можем проверить состояние транзакции непосредственно после update. Если в асинхронном, то тогда необходимо ловить dberror
22 ноя 10, 10:19    [9816976]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает Insert  [new]
dendi
Member

Откуда:
Сообщений: 12
Спасибо большое всем за дельные советы! Вариантов было очень много предложено. Вышла из ситуации намного проще. Все отработало после того как INSERT и values поставила в одну строчку.

gd_date_vidach = Today()
dw_report.object.out_no_date[1] = gd_date_vidach


INSERT into F5_new (d) values (:gd_date_vidach);
commit;
29 ноя 10, 12:55    [9855658]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает Insert  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3154
dendi,

Что-то в это как-то слабо верится, если честно. А что за СУБД в которую делается вставка?
29 ноя 10, 13:36    [9856065]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает Insert  [new]
Ursego
Member [скрыт]

Откуда:
Сообщений: 436
Как сказал робот Вертер, "это становится интересным"! Даже попахивает оккультизмом!

Думаю, INSERT и тогда прекрасно отрабатывался, или-же была какая-то другая проблема (например, в свЯзи с сервером), которая потом исчезла.
30 ноя 10, 04:23    [9860420]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает Insert  [new]
Anatoly Moskovsky
Member

Откуда: Odessa
Сообщений: 6610
Ursego
Как сказал робот Вертер, "это становится интересным"! Даже попахивает оккультизмом!

Думаю, INSERT и тогда прекрасно отрабатывался, или-же была какая-то другая проблема (например, в свЯзи с сервером), которая потом исчезла.

Все может быть, в PB парсер embedded sql веселый :)

Например, когда-то давным-давно у меня запрос в PowerScript коде :
select xxx into :v 
  from table -- comments
 where {filter};
на сервер передавался в виде одной строки (убраны переводы строк)
select xxx from table -- comments where {filter}
и естественно where оказывался закомментированным.
Вот я намучался пока нашел это
30 ноя 10, 05:25    [9860437]     Ответить | Цитировать Сообщить модератору
 Re: не отрабатывает Insert  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3154
Anatoly Moskovsky,

Вот и я о том же, зная такую склонность PB к склеиванию запроса я имею серьезные основания предполагать, что и в начальном случае запрос передавался на сервер в одну строку.
30 ноя 10, 10:40    [9861269]     Ответить | Цитировать Сообщить модератору
Все форумы / PowerBuilder Ответить