Гость
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / не отрабатывает Insert / 22 сообщений из 22, страница 1 из 1
18.11.2010, 17:35
    #36964474
dendi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не отрабатывает Insert
Здравствуйте! Помогите. У меня проблема - не отрабатывает 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;
...
Рейтинг: 0 / 0
18.11.2010, 17:44
    #36964491
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не отрабатывает Insert
dendi,

Вышеприведенный скрипт просто не обрабатывает ошибки, это не означает, что их нет.
...
Рейтинг: 0 / 0
19.11.2010, 09:30
    #36965307
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не отрабатывает Insert
dendiUpdate F5_new;
Это что за ересь?
...
Рейтинг: 0 / 0
19.11.2010, 10:30
    #36965395
maniac85
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не отрабатывает Insert
я канешно не то чтобы специалист, но скажу
dendigd_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;ну это явно отчаянные попытки спасти положение)

Вообще конечно хотелось бы знать что этот скрипт должен делать, потому как выглядит довольно сомнительно
...
Рейтинг: 0 / 0
19.11.2010, 10:36
    #36965414
shut-up-and-skate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не отрабатывает Insert
используй execute immediate
...
Рейтинг: 0 / 0
19.11.2010, 10:49
    #36965456
PaulJB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не отрабатывает Insert
А где анализ SQLCA.SQLCode (ну, хотя бы ...)
...
Рейтинг: 0 / 0
19.11.2010, 11:12
    #36965510
shut-up-and-skate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не отрабатывает Insert
кодdendiINSERT into F5_new (d)
values (:gd_date_vidach);
должен работать если ты добавиш using sqlca; или что там у тебя
...
Рейтинг: 0 / 0
19.11.2010, 12:08
    #36965660
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не отрабатывает Insert
19.11.2010 11:12, shut-up-and-skate пишет:

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

Может, хватит безграмотных советов?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
20.11.2010, 09:11
    #36967103
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не отрабатывает Insert
Ну давайте все-таки разберем ошибки

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
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

Не скажу что это верх совершенства, но примерно так. Используйте любой метод
...
Рейтинг: 0 / 0
20.11.2010, 10:19
    #36967134
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не отрабатывает Insert
spas2001,

Если Вы думаете, что данный код получит текущие дату и время, то Вы ошибаетесь.
...
Рейтинг: 0 / 0
20.11.2010, 16:42
    #36967429
armblg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не отрабатывает Insert
spas2001,

Имхо, после dw_report.update() проверять SQLCA.SQLCode бесполезно - там всегда 0, даже при ошибке, перехватывать которую нужно в событиях DW, но не суть.
Возможно автор (кстати, чего-то его не слышно) привел различные попытки записи в таблицу, которые не работают. Может ограничения на уровне БД?
Обработку ошибок нужно вставить обязательно, на крайняк включить trace и посмотреть логи.
...
Рейтинг: 0 / 0
21.11.2010, 04:09
    #36967905
Ursego
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не отрабатывает Insert
Пауэрбилдеровская переменная gd_date_vidach, насколько я понял, имеет тип date, а не datetime (иначе она бы именовалась gdt_date_vidach), а поле в таблице базы данных наверняка имеет тип date, который в базах данных хранит и время тоже и собсна говоря соответствует типу datetime в PB (т.е. поле одного типа, а значение вставляется другого). Я не утверждаю, что проблема именно в этом (и замечания по обработке ошибок поддерживаю), но можно попробовать передать INSERT-у переменную типа datetime чтоб выяснить здесь ли собака порылась:

Код: plaintext
1.
2.
3.
4.
5.
6.
datetime ldt_date_vidach

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

INSERT into F5_new (d) 
values (:ldt_date_vidach);
commit;
...
Рейтинг: 0 / 0
21.11.2010, 19:54
    #36968459
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не отрабатывает Insert
armblgspas2001,

Имхо, после dw_report.update() проверять SQLCA.SQLCode бесполезно - там всегда 0
Д-а-а??? Вы уверены?
При блобах может и бесполезно, а так - вполне жизнеспособный вариант

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

Марк, время будет нулевое и я это прекрасно знаю:)
...
Рейтинг: 0 / 0
21.11.2010, 20:04
    #36968474
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не отрабатывает Insert
Для самообразования:)
RTFMError 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.
...
Рейтинг: 0 / 0
22.11.2010, 00:56
    #36968780
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не отрабатывает Insert
spas2001,

Функции DW retrieve(), update() не меняют состояние trans.SQLCode.
Ошибку можно увидеть только проверив, что вернула фунция (-1 в случае ошибки) или в событии dberror
...
Рейтинг: 0 / 0
22.11.2010, 10:15
    #36969036
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не отрабатывает Insert
То Anatoly Moskovsky

Я это и имел ввиду:)
...
Рейтинг: 0 / 0
22.11.2010, 10:19
    #36969040
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не отрабатывает Insert
Хотя может быть и не совсем так, если доступ к базе происходит в синхронном режиме, мы можем проверить состояние транзакции непосредственно после update. Если в асинхронном, то тогда необходимо ловить dberror
...
Рейтинг: 0 / 0
29.11.2010, 12:55
    #36983033
dendi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не отрабатывает Insert
Спасибо большое всем за дельные советы! Вариантов было очень много предложено. Вышла из ситуации намного проще. Все отработало после того как 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;
...
Рейтинг: 0 / 0
29.11.2010, 13:36
    #36983170
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не отрабатывает Insert
dendi,

Что-то в это как-то слабо верится, если честно. А что за СУБД в которую делается вставка?
...
Рейтинг: 0 / 0
30.11.2010, 04:23
    #36984990
Ursego
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не отрабатывает Insert
Как сказал робот Вертер, "это становится интересным"! Даже попахивает оккультизмом!

Думаю, INSERT и тогда прекрасно отрабатывался, или-же была какая-то другая проблема (например, в свЯзи с сервером), которая потом исчезла.
...
Рейтинг: 0 / 0
30.11.2010, 05:25
    #36985005
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не отрабатывает Insert
UrsegoКак сказал робот Вертер, "это становится интересным"! Даже попахивает оккультизмом!

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

Например, когда-то давным-давно у меня запрос в PowerScript коде :
Код: plaintext
1.
2.
3.
select xxx into :v 
  from table -- comments
 where {filter};
на сервер передавался в виде одной строки (убраны переводы строк)
Код: plaintext
1.
select xxx from table -- comments where {filter}
и естественно where оказывался закомментированным.
Вот я намучался пока нашел это
...
Рейтинг: 0 / 0
30.11.2010, 10:40
    #36985359
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не отрабатывает Insert
Anatoly Moskovsky,

Вот и я о том же, зная такую склонность PB к склеиванию запроса я имею серьезные основания предполагать, что и в начальном случае запрос передавался на сервер в одну строку.
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / не отрабатывает Insert / 22 сообщений из 22, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]