powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / почему так происходит?
17 сообщений из 17, страница 1 из 1
почему так происходит?
    #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
почему так происходит?
    #32795620
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в update properties Indentoty Column указан как ID?
...
Рейтинг: 0 / 0
почему так происходит?
    #32795653
Вопросник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да! Указан! И в секции Updateble Columns -ID тоже указан!
...
Рейтинг: 0 / 0
почему так происходит?
    #32795934
Guest_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторВ чем дело??
Что-то Вы не договариваете.
После того как вы выполнили dw_1.insertrow(1), какие-либо поля в этом самом dw_1 - заполняются, в промежутке до выполнения dw_1.update()?
Если нет, то Вы получили именно то, что и описали.

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

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

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

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

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

Тогда Вам вопрос: что означает параметр rowinserted в данном событии?
...
Рейтинг: 0 / 0
почему так происходит?
    #32796408
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ikardw_1.update() генерит Insert, но не делает Retrieve !
Следовательно, ID у Вас в DataWindow как были пустые, так и остались.
Чтобы получить их Вам нужно сдлать dw_1.Retrieve()
Бред
Вопросник4) Сразу после апдейта -dw_1.getitemnumber(1,'ID')
А какие SQL команды исполняет PB смотреть пробовали?
...
Рейтинг: 0 / 0
почему так происходит?
    #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
почему так происходит?
    #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
почему так происходит?
    #32796555
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSМожно ли в событии UpdateEnd уже получить код инкремента честно скажу не знаю.
Можно, я проверял :)
...
Рейтинг: 0 / 0
почему так происходит?
    #32796908
Вопросник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Локшин Марк ! Можно ламеру рассказать как можно смотреть
SQL команды исполняемые PB?

И вариант предложенный ASCRUS - при отключении Аutocommit - сработал!
Спасибо!
...
Рейтинг: 0 / 0
почему так происходит?
    #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
почему так происходит?
    #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
почему так происходит?
    #32797446
Фотография Ikar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мдя...

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

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

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


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