Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / почему так происходит? / 17 сообщений из 17, страница 1 из 1
23.11.2004, 11:49
    #32795543
Вопросник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так происходит?
У меня 9-а версия билдера.
Autocomit=true

Делаю следующую операцию:

1) dw_1.insertrow(1)

2) потом на событие кномпки вешаю dw_1.update()

3) на событии dw_1.updateend() пишу следующий код:
long get_id

get_id=this.GetitemNumber(rowsinserted,'id')

возвращает null, почему????
пробовал также this.Object.id[rowsinserted] -тоже самое!!!!!!
В чем дело??
...
Рейтинг: 0 / 0
23.11.2004, 12:21
    #32795620
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так происходит?
А в update properties Indentoty Column указан как ID?
...
Рейтинг: 0 / 0
23.11.2004, 12:29
    #32795653
Вопросник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так происходит?
Да! Указан! И в секции Updateble Columns -ID тоже указан!
...
Рейтинг: 0 / 0
23.11.2004, 13:51
    #32795934
Guest_2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так происходит?
авторВ чем дело??
Что-то Вы не договариваете.
После того как вы выполнили dw_1.insertrow(1), какие-либо поля в этом самом dw_1 - заполняются, в промежутке до выполнения dw_1.update()?
Если нет, то Вы получили именно то, что и описали.

DataWindow будет генерить Insert для строк чей статус = newModified!

Для строк имеющих статус new! Insert не выполняется.
...
Рейтинг: 0 / 0
23.11.2004, 14:29
    #32796073
Вопросник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так происходит?
Да! Извените, не договорил! В БД (АСА-8) этот самый id - автоинкремент.
И в dw_1 -я его естественно не заполняю, а после вызова dw_1.update() -пытаюсь сразу его получить dw_1.getitemnumber(1,'id')
...
Рейтинг: 0 / 0
23.11.2004, 14:41
    #32796108
Guest_2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так происходит?
Уже лучше. Это я про то, что указали СУБД.
Но повторюсь ещё раз.
Заносятсяся ли в dw_1 данные в промежутке между:
Код: plaintext
1.
2.
dw_1.insertRow( 1 )
...
dw_1.update()
В случае, есле данные туда никоим образом (интерактивно или с программно) не заносятся, то при выполнении команды обновления, Insert генериться не будет. А раз он не будет генериться, то соответственно вы свой id не получите.
...
Рейтинг: 0 / 0
23.11.2004, 14:55
    #32796155
Вопросник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так происходит?
Нет, данные заносятся -- интерактивно!! Тоесть во время выполнения программы. Тоесть, следующая последовательность:
1) dw_1.InsertRow(1)
2) Интерактивно заносим данные, все кроме ID
3) Запускаем dw_1.Update()---он проходит успешно, данные в БД заносятся.
4) Сразу после апдейта -dw_1.getitemnumber(1,'ID')

?????
...
Рейтинг: 0 / 0
23.11.2004, 15:01
    #32796175
Ikar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так происходит?
dw_1.update() генерит Insert, но не делает Retrieve !
Следовательно, ID у Вас в DataWindow как были пустые, так и остались.
Чтобы получить их Вам нужно сдлать dw_1.Retrieve()
(ИМХО)
---
С уважением, IKAR

ikarhomecenter@narod.ru
IkarHomeCenter
...
Рейтинг: 0 / 0
23.11.2004, 15:31
    #32796269
Guest_2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так происходит?
Мда.
Однако.
Прям как в том анекдоте про индейца - "Зоркого глаза", который на 3-й день заметил, что задней стены в саре нет.

Так говорите в событии updateend пишите
Код: plaintext
get_id=this.GetitemNumber(rowsinserted,'id')

Тогда Вам вопрос: что означает параметр rowinserted в данном событии?
...
Рейтинг: 0 / 0
23.11.2004, 16:11
    #32796408
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так происходит?
Ikardw_1.update() генерит Insert, но не делает Retrieve !
Следовательно, ID у Вас в DataWindow как были пустые, так и остались.
Чтобы получить их Вам нужно сдлать dw_1.Retrieve()
Бред
Вопросник4) Сразу после апдейта -dw_1.getitemnumber(1,'ID')
А какие SQL команды исполняет PB смотреть пробовали?
...
Рейтинг: 0 / 0
23.11.2004, 16:20
    #32796446
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так происходит?
Гм. AutoCommit отключаем и привыкаем после RETRIEVE и UPDATE делать COMMIT/ROLLBACK, анализируя SQLCode. Можно ли в событии UpdateEnd уже получить код инкремента честно скажу не знаю. После выполнения Update() точно можно и думаю даже нужно, после того, как все пройдет и будет сделан COMMIT. Кстати какой протокол доступа к данным используется и последний ли билд ASA 8 ?

P.S. На крайний попробуйте в ISQL написать:
Код: plaintext
1.
2.
3.
INSERT INTO "ТаСамаяТаблица" (Field1, Field2, ...)
VALUES( Value1, Value2, ...)

SELECT @@IDENTITY
если все в порядке то вернется id вставленной записи.
...
Рейтинг: 0 / 0
23.11.2004, 16:22
    #32796459
PL99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так происходит?
Ikardw_1.update() генерит Insert, но не делает Retrieve !
Следовательно, ID у Вас в DataWindow как были пустые, так и остались.
Чтобы получить их Вам нужно сдлать dw_1.Retrieve()
(ИМХО)
---
С уважением, IKAR

ikarhomecenter@narod.ru
IkarHomeCenter
Т.к. на вопрос Марка Локшина автор топика ответил утвердительно , то retrieve не нужен... Локшин МаркА в update properties Indentoty Column указан как ID? ВопросникДа! Указан! И в секции Updateble Columns -ID тоже указан!
...
Рейтинг: 0 / 0
23.11.2004, 16:49
    #32796555
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так происходит?
ASCRUSМожно ли в событии UpdateEnd уже получить код инкремента честно скажу не знаю.
Можно, я проверял :)
...
Рейтинг: 0 / 0
23.11.2004, 19:16
    #32796908
Вопросник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так происходит?
2 Локшин Марк ! Можно ламеру рассказать как можно смотреть
SQL команды исполняемые PB?

И вариант предложенный ASCRUS - при отключении Аutocommit - сработал!
Спасибо!
...
Рейтинг: 0 / 0
23.11.2004, 19:26
    #32796922
PL99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так происходит?
Вопросник2 Локшин Марк ! Можно ламеру рассказать как можно смотреть
SQL команды исполняемые PB?

И вариант предложенный ASCRUS - при отключении Аutocommit - сработал!
Спасибо!Я не Марк, но намекнуть могу

PowerBuilder Help SQLPreview event (DataWindows)
Description

Occurs immediately before a SQL statement is submitted to the DBMS. Functions that trigger DBMS activity are Retrieve, Update, and ReselectRow.
PowerBuilder event information
Event ID: pbm_dwnsql

Argument Description
request SQLPreviewFunction by value. The function that initiated the database activityFor a list of valid values, see SQLPreviewFunction
sqltype SQLPreviewType by value. The type of SQL statement being sent to the DBMSFor a list of valid values, see SQLPreviewType
sqlsyntax String by value. The full text of the SQL statement
buffer DWBuffer by value. The buffer containing the row involved in the database activity For a list of valid values, see DWBuffer
row Long by value. The number of the row involved in the database activity, that is, the row being updated, selected, inserted, or deleted
...
Рейтинг: 0 / 0
24.11.2004, 06:20
    #32797094
Guest_2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так происходит?
get_id=this.GetitemNumber(rowsinserted,'id')
Этот код выполняемый в событии updateend - есть глупость, поскольку параметр rowinserted - показывает количество операций INSERT выполненных в результате исполнения ф-ции update().

Очень хорошо, что совет ASCRUS'a Вам помог, но причина всетаки не в sqlca.autocommit = true. В процессе выполненеия транзакции (до commit или rollback) dw после update() всё равно получит значение для поля с автоприращением (Autoincrement). Другое дело, что в после выполненеия commit - запись будет сохранена в БД, а после rollback - нет.

Как-то у меня проскакивала такая ситуация (После выполнения update(), в dw не получало значения для identity колонки). В качестве СУБД была ASA 7.
Клиент работал под Windows 98 SE Rus. Доступ к БД был через ODBC. Под W2K такого замечено не было. К счастью или сожалению, разобраться не удалось, так как после установки последних EBF на ASA 7 и PB 9 проблема исчезла.

Первое, что бы я сделал, случись у меня такое вновь:
Код: plaintext
1.
2.
3.
4.
 1 . проверил бы, версию MDAC, установленную на ПК.
   ODBC менеджер,является её частью.
 2 . Проверил бы что ODBC драйвер именно от той версии и EBF, что и сервер 
   ASA.
...
Рейтинг: 0 / 0
24.11.2004, 11:09
    #32797446
Ikar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так происходит?
Мдя...

Сильно извиняюсь, за то, что гупость сморозил...

// Эх, вот она, - невнимательность... :-(
---
С уважением, IKAR

ikarhomecenter@narod.ru
IkarHomeCenter
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / почему так происходит? / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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