powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / странная работа update()
25 сообщений из 47, страница 1 из 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
25 сообщений из 47, страница 1 из 2
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / странная работа update()
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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