powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / странная работа update()
47 сообщений из 47, показаны все 2 страниц
странная работа update()
    #37755530
царевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PB 9
MS SQL
есть таблица с autoincrement
в таблице также есть поля not null и уникальные ключи
вставляю новую запись insertrow(0)
все поля dw пустые
вызываю update(). функция не возвращает ошибку. Но и ничего не сохраняет в БД.
вбиваю одно значение, заведомо повторяющееся, возникает ошибка дублирования уникального ключа.
Потом очищаю это поле, опять сохраняю. И опять нет ошибки но и базу ничего не ушло. Не понимаю почему?!
После чего DW начинает думать, что строка уже сохранения в БД и при любой попытке сохранить заполненную запись говорить что запись была измнена между retrieve и update
Подскажите, пожалуйста, как заставить работать DW так как надо, т.е что бы на пустой строке update() ругался
спасибо
...
Рейтинг: 0 / 0
странная работа update()
    #37755640
Фотография Ikar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
царевичПодскажите, пожалуйста, как заставить работать DW так как надо, т.е что бы на пустой строке update() ругалсяПроставить NOT NULL полям дефолты?
...
Рейтинг: 0 / 0
странная работа update()
    #37755641
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
царевич,
Может быть SQLCA.SQLNROWS поможет?
...
Рейтинг: 0 / 0
странная работа update()
    #37756486
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверьте свойства обновления dw. И еще, один раз сталкивался, когда так отрабатывал foreign key, никакой ошибки в dw, а записи нет
...
Рейтинг: 0 / 0
странная работа update()
    #37756534
Andrew Nagorny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы видимо не закрываете транзакцию. А добавилось или нет смотрите наверняка в отдельной сессии.
Сделайте после UPDATE - COMMIT.
...
Рейтинг: 0 / 0
странная работа update()
    #37756547
Andrew Nagorny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или под трейсом посмотрите что идет в базу.
...
Рейтинг: 0 / 0
странная работа update()
    #37756639
PaulJB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опишите, какие установлены Update properties.
"... что запись была измнена между retrieve и update." - вот это настораживает
...
Рейтинг: 0 / 0
странная работа update()
    #37756650
царевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Свойства к БД проверял, там все ок. Да и разные варианты пробовал.
2. В коннекте к БД autocommit. Так что версия с незакрытыми сессиями отпадает, темболее что пустая строка вообще не может вставится в БД, т.к. есть поля not null
3. А как под трейсом посмотреть что в БД идет?Раньше никогда не делал.
4. Странно, но DW корректно начинает нормально работать если после вставки пустой строки в любое поле этой строки чего нибудь поместить типа dw.object....='Комментарий'. Потом удаляем, то что поместили и вот уже нас пустая строка, нажимаем сохранить и о чудо ошибку выдает, что поле not null.
Хотелось бы разобраться почему так происходит, может еще есть версии?
...
Рейтинг: 0 / 0
странная работа update()
    #37756741
PaulJB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С новой строкой (С НЕ ИЗМЕНЕННЫМ СОДЕРЖИМЫМ) понятно - она имеет статус New!, поэтому вставка не происходит, сам ДВ ее не делает. Как только вы что то изменяете в полях, то строка получает статус NewModified! и при вызове Update для нее генерится INSERT. Сам запрос можно посмотреть в событии SQLPreview. Ну а теперь самое интересное - если Вы удаляете в поле то, что навводили (визуально выглядит как новая строка), статус строки НЕ меняется. Он остается NewModified!. Поэтому ДВ продолжает генерить INSERTы для этой строки. Почитайте доку в плане GetItemStatus(), SetItemStatus(). И опять-же: почитайте внимательно про окно UpdateProperties - комбинация значений в этом окне очень важна для определения порядка - как ДВ будет работать с базой.
А настройка соединения здесь большой роли не играет. Разве что Autocommit = false, тогда Вы не увидите вставленную/измененную запись из другой сессии.
...
Рейтинг: 0 / 0
странная работа update()
    #37756875
Andrew Nagorny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
царевич3. А как под трейсом посмотреть что в БД идет?Раньше никогда не делал.


MS SQL Management Studio>Menu>Tools>SQL Server Profiler
...
Рейтинг: 0 / 0
странная работа update()
    #37757061
царевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
после того как я очищаю то, что понавводил и выполняю dw.update, сохранение в БД не происходит, но видимо меняется статус строки и для всех следующих введенных данных он пытается выполнить УЖЕ UPDATE а не INSERT, но в БД строки еще нет и автоинкремент в DW не появился еще, он пытается апдейтить с условием ИД=null. Почему так, не понимаю!вроде уже все проверил
...
Рейтинг: 0 / 0
странная работа update()
    #37757109
PaulJB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторпосле того как я очищаю то, что понавводил и выполняю dw.update, сохранение в БД не происходит ...Не происходит молча или с выдачей ошибки БД?
авторон пытается выполнить УЖЕ UPDATE а не INSERT, ...А вы точно уверены что именно UPDATE?
авторно в БД строки еще нет и автоинкремент в DW не появился еще, он пытается апдейтить с условием ИД=null.Колонка ID (с автоинкрементом) указана в поле identity column?
Колонка ID отмечена в списке Updatable cloumns?
Какое значение возвращает dw.update()?
Приложите (если можно) скриншот окна Update properties для этого ДВ, тогда я, возможно, смогу Вам помочь.
...
Рейтинг: 0 / 0
странная работа update()
    #37757175
царевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulJBНе происходит молча или с выдачей ошибки БД?
молча
PaulJBА вы точно уверены что именно UPDATE?
уверен
PaulJBКолонка ID (с автоинкрементом) указана в поле identity column?
да
PaulJBКолонка ID отмечена в списке Updatable cloumns?
сейчас нет, но пробовал и указывать, разницы не заметил.
Какое значение возвращает dw.update()?
Возвращает 1, но в событие sqlpreview не попадает
PaulJBПриложите (если можно) скриншот окна Update properties для этого ДВ, тогда я, возможно, смогу Вам помочь.
к сожалению скриншот не смогу выложить

спасибо
...
Рейтинг: 0 / 0
странная работа update()
    #37757291
PaulJB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Колонка с autoincrement не должна быть указана в списке изменяемых колонок, иначе она будет включена в список колонок для UPDATE или INSERT.
авторВозвращает 1, но в событие sqlpreview не попадаетВот это то и странно. Если выполняется попытка внесения изменения в БД, то обязательно должно происходить это событие.
Перед вызовом и после вызова dw.Update() проверьте статус строки. Какие значения он имеет (до и после)?
dw.update() вызываете с параметрами или без ... ?
Какие значения в боксах "Where clause for update/delete" и "Key modification"
...
Рейтинг: 0 / 0
странная работа update()
    #37757320
царевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulJB,

1. Подскажите пожалуйста, как проверить статус строки. А то я только знаю как проверить статус поля в строке(getitemstatus), а как всю строку не знаю
2. dw.update() вызывается без параметров
3. значения в боксах первое и последнее соотвественно
...
Рейтинг: 0 / 0
странная работа update()
    #37757357
PaulJB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор1. Подскажите пожалуйста, как проверить статус строки. А то я только знаю как проверить статус поля в строке(getitemstatus), а как всю строку не знаю DWItemStatus dwcontrol.GetItemStatus ( <номер строки>, 0, primary! ) "If column is 0, GetItemStatus returns the status of row. " - фраза из хелпа ;)
Остальное в норме, для данного случая ...
...
Рейтинг: 0 / 0
странная работа update()
    #37757404
царевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulJB,
статус строки до сохранения и после, когда что нить набиваем в строку = notmodified
потом очищаем строку и опять до сохранения и после = notmodified
потом вводим что нить еще и тогда до сохранения статус = notmodified
а после сохранения = datamodified
и это сохранение в sqlpreview возникает уже командой UPDATE а не Insert
...
Рейтинг: 0 / 0
странная работа update()
    #37757428
Фотография PSmith
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
царевичPaulJB,
статус строки до сохранения и после, когда что нить набиваем в строку = notmodified
потом очищаем строку и опять до сохранения и после = notmodified
потом вводим что нить еще и тогда до сохранения статус = notmodified
а после сохранения = datamodified
и это сохранение в sqlpreview возникает уже командой UPDATE а не Insert
Статус строки меняется не после вызова dw.accepttext().
У update() есть параметры, и первый из них accept - по умолчанию.
Поэтому чтобы все работало надо после "что нить набиваем" и "потом очищаем" надо вызывать accepttext()
...
Рейтинг: 0 / 0
странная работа update()
    #37757442
царевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PSmith,
перед dw.update написано dw.accepttext
...
Рейтинг: 0 / 0
странная работа update()
    #37757493
Фотография PSmith
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
царевичPSmith,
перед dw.update написано dw.accepttext
Тогда непонятно, почему "до сохранения статус = notmodified"...
А точно GetItemStatus(row,0,Primary!)? Может row не тот или не Primary! ?
И еще проверьте dw.modifiedcount()
...
Рейтинг: 0 / 0
странная работа update()
    #37757519
Фотография PSmith
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
царевичPSmith,
перед dw.update написано dw.accepttext
И кстати что возвращает accepttext?
...
Рейтинг: 0 / 0
странная работа update()
    #37757615
царевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PSmith,

разделил update и accepttext
действительно статус datamodified появляется после accepttext()
accepttext() всегда равно 1
...
Рейтинг: 0 / 0
странная работа update()
    #37757634
царевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PSmith,

проверил getitemstatus, действительно там ошибочка была.
статус строки меняется именно при сохранении(dw.update) пустой строки c newmodified на notmodified
а следующий dw.update уже выполняет UPDATE а не INSERT
...
Рейтинг: 0 / 0
странная работа update()
    #37757647
Фотография PSmith
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
царевич,

Все равно непонятно. Почему datamodified, а не NewModified.
Была какая-то заморочка с этим сообщением "Данные изменились между...", но сейчас уже не вспомню.
Скорее всего это связано с автоинкрементом.
Я бы попробовал сразу после insert'a делать update и ретрив, чтобы автоинкремент обновить.
А потом уже манипуляции с данными.
...
Рейтинг: 0 / 0
странная работа update()
    #37757691
царевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PSmith,

Делать сам insert не могу,т.к. есть поля, которые должны быть сначала правильно заполнены и только потом сохранены, а иначе БД не пропустит такую вставку
...
Рейтинг: 0 / 0
странная работа update()
    #37757746
Фотография PSmith
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
царевич,

Тогда придется вручную перед update городить огород наподобие:
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
...
if idw_master[11].getitemstatus(ll_row,0,Primary!) <> New! then
	idw_master[11].resetupdate()
	idw_master[11].setitemstatus(ll_row,'contract_number',Primary!,DataModified!)
end if
if this.getitemstatus(currentrow,0,Primary!) <> New! then
	this.resetupdate()
	this.setitemstatus(currentrow,'subject_code',Primary!,DataModified!)
end if
...
...
Рейтинг: 0 / 0
странная работа update()
    #37758870
PaulJB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Должно быть так (в порядке действий с одной и той-же записью):
1. Вставили запись - New! (если тут вызвать Update() - ничего не произойдет)
2. Отредактировали запись (изменили содержимое полей), затем AcceptText() - NewModified!
3. Update() - вызывает INSERT ... и сбрасывает статус в NotModified!, автоматически заполняется поле, указанное в "identity column"
4. Снова отредактировали запись, затем AcceptText() - DataModified!
5. Update() - вызывает UPDATE ... и сбрасывает статус в NotModified!

Примечание:
Для указанного случая Update() вызывается БЕЗ параметров.
Если вызывать с параметрами, то порядок операций может измениться.
...
Рейтинг: 0 / 0
странная работа update()
    #37759081
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправлю немного, при New! уже будет генерится insert. Что-то с параметрами update datawindow, а без картинки замучишься гадать
Может ключ не тот, может Delete then Insert стоит, да еще куча всего
...
Рейтинг: 0 / 0
странная работа update()
    #37759806
PaulJB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 spas2001
А Вы точно уверены, что при статусе строки = New! генерится INSERT? :)
царевич выше описывал свое окно "Update Properties", там все как-бы Ок., но я согласен - лучше раз увидеть, чем сто раз услышать.
...
Рейтинг: 0 / 0
странная работа update()
    #37759893
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если все нормально - да, иначе пустые значения никогда бы в жизни не вставились:)
...
Рейтинг: 0 / 0
странная работа update()
    #37759899
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте просто инсерт из Database painter-а сделать и проверить результат, может дело, как говориться, не в бобине? Хотя скорее всего у вас дело именно в параметрах обновления dw.
...
Рейтинг: 0 / 0
странная работа update()
    #37766292
царевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Создал новую таблицу для тестов
create table dbo.test20120423 (
id int identity,
s1 varchar(4) not null UNIQUE NONCLUSTERED,
s2 varchar(255) null,
status char(1) not null default 'A',
CONSTRAINT PK_test PRIMARY KEY (id)
)

2.
Добавил в нее 1 запись, вот селект из табл
id s1 s2 status
----------- ---- ----------------------- ------
1 test A
------------------------------------------------

3. Создаю dw грид в PB паинтере по этой таблице
4. Выставляю update_properties(выкладываю скриншот), ставлю на s1 свойство empty is null
5. Добавляю новую строку. Ввожу в поле s1 = test. Пытаюсь сохранить, получаю ошибку
Violation of UNIQUE KEY constraint 'UQ__test20120423__'. Cannot insert duplicate key in object 'dbo.test20120423'.
No changes made to database.
INSERT INTO dbo.test20120423 ( s1 ) VALUES ( 'test' )
6. Очищаю s1, перевожу курсор в s2, пытаюсь сохранить, ошибки не выдает, но и ID не появляется.
7. Ввожу s2=test, пытаюсь сохранить, получаю ошибку
Row changed between retrieve and update.
No changes made to database.
UPDATE dbo.test20120423 SET s2 = 'test' WHERE id IS NULL

Почему на 6 этапе не возникает ошибки? и почему PB на 7 этапе начинает делать update а не insert?
Выяснил опытным путем, что 6 этап успешно сохраняется(без ошибок имею виду,но в БД ничего нет) только именно после ошибки дублирования ключа, ломает она в чтоли что-то?! Может есть у кого соображения на этот счет?
спасибо
...
Рейтинг: 0 / 0
странная работа update()
    #37766301
царевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
файл скриншота не прикладывается
но вот что в нем:

where clause: key columns

key modification: use update

updateble columns: все кроме ID

identiti column: ID

unique key column: ID
...
Рейтинг: 0 / 0
странная работа update()
    #37766529
PaulJB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я уже не помню где, но видел, что Micro-софтовский Autoincrement как-то по особому надо описывать в коннекте или где-то еще ...
Просто так (как будто-бы) DW его не читает. Но, могу и ошибаться.
...
Рейтинг: 0 / 0
странная работа update()
    #37766651
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Включите в update колонку id раз выбран вариант key in place
Коннект к БД настроен как? Через OLEDB?
...
Рейтинг: 0 / 0
странная работа update()
    #37766861
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прикольно читается. Потратить неделю на хрень вместо того, чтобы за полдня переписать эту халтуру на Embedded SQL и решить проблему раз и навсегда.
...
Рейтинг: 0 / 0
странная работа update()
    #37766952
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это тоже мешается
s1 varchar(4) not null UNIQUE NONCLUSTERED
Вы убираете значение из s1? Но честно говоря, вы просто что-то не то делаете
...
Рейтинг: 0 / 0
странная работа update()
    #37767572
царевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dim2000, что вы предлагаете переписать на Embedded SQL?Вставку в БД?в 50 окнах.

spas2001,
1. в update колонку id добавил, ничего не изменилось
2. коннект к БД через mss microsoft sql server
3. чем мешает колонка s1?Да я удаляю введенное в нее значение. что не то я делаю? объясните, пожалуйста, подробнее?
...
Рейтинг: 0 / 0
странная работа update()
    #37767599
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Драйвер MS SQL может неверно отрабатывать, попробуйте через OLEDB
Колонка мешает тем, что not null, а вы удаляете значение, попробуйте пока без лишних ограничений
...
Рейтинг: 0 / 0
странная работа update()
    #37767694
царевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
spas2001,
Без лишних ограничений я пробовал, все работает хорошо. Но я ведь не могу отказаться от использования not null полей и уникальных индексов
...
Рейтинг: 0 / 0
странная работа update()
    #37767780
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
24.04.2012 11:14, царевич написал:

> Dim2000, что вы предлагаете переписать на Embedded SQL?Вставку в БД?

Да.

> в 50 окнах.

Для начала - там, где глючит.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
странная работа update()
    #37767847
Фотография PSmith
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
царевич,

А не пробовали в окошке "Specify update properties" указывать:
Identity Column
Specify an identity column. An identity column is one whose value in a new row is automatically assigned by the DBMS. If an identity column is specified, PowerBuilder displays its value for a new row after an insert in the DataWindow object.

?
...
Рейтинг: 0 / 0
странная работа update()
    #37767868
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда при инсерте не забывайте их заполнять:)
А серьезно, у меня на 9-ке кажется встречалась подобная проблема для MS SQL 2005, на OLEDB она пропала
...
Рейтинг: 0 / 0
странная работа update()
    #37769156
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000Прикольно читается. Потратить неделю на хрень вместо того, чтобы за полдня переписать эту халтуру на Embedded SQL и решить проблему раз и навсегда.

это ^^^^^^^^ уж точно прикольнее читается. НИКОГДА не следуйте таким жутким советам...
...
Рейтинг: 0 / 0
странная работа update()
    #37769187
PaulJB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В папке .../Shared/PowerBuilder есть файлик pbodb90.ini. Там куча параметроыв для работы с различными базами. На сколько я знаю, то DW кое что оттуда подчитывает. Может это поможет ...
...
Рейтинг: 0 / 0
странная работа update()
    #37769225
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
24.04.2012 20:05, Филипп написал:

> это ^^^^^^^^ уж точно прикольнее читается. НИКОГДА не следуйте таким
> жутким советам...

И что тут жуткого? Если уж топикстартер не может сделать через DW, пусть
пробует более простой вариант (а если и его не потянет - гнать в шею,
ибо безнадёжен).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
странная работа update()
    #37769326
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim200024.04.2012 20:05, Филипп написал:

> это ^^^^^^^^ уж точно прикольнее читается. НИКОГДА не следуйте таким
> жутким советам...

И что тут жуткого? Если уж топикстартер не может сделать через DW, пусть
пробует более простой вариант (а если и его не потянет - гнать в шею,
ибо безнадёжен).

Я в шею гоню тех, кто Embedded SQL в РВ использует :-))))
...
Рейтинг: 0 / 0
47 сообщений из 47, показаны все 2 страниц
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / странная работа update()
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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