|
странная работа update()
|
|||
---|---|---|---|
#18+
PB 9 MS SQL есть таблица с autoincrement в таблице также есть поля not null и уникальные ключи вставляю новую запись insertrow(0) все поля dw пустые вызываю update(). функция не возвращает ошибку. Но и ничего не сохраняет в БД. вбиваю одно значение, заведомо повторяющееся, возникает ошибка дублирования уникального ключа. Потом очищаю это поле, опять сохраняю. И опять нет ошибки но и базу ничего не ушло. Не понимаю почему?! После чего DW начинает думать, что строка уже сохранения в БД и при любой попытке сохранить заполненную запись говорить что запись была измнена между retrieve и update Подскажите, пожалуйста, как заставить работать DW так как надо, т.е что бы на пустой строке update() ругался спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2012, 14:43 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
царевичПодскажите, пожалуйста, как заставить работать DW так как надо, т.е что бы на пустой строке update() ругалсяПроставить NOT NULL полям дефолты? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2012, 15:35 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
царевич, Может быть SQLCA.SQLNROWS поможет? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2012, 15:35 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
Проверьте свойства обновления dw. И еще, один раз сталкивался, когда так отрабатывал foreign key, никакой ошибки в dw, а записи нет ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2012, 08:34 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
Вы видимо не закрываете транзакцию. А добавилось или нет смотрите наверняка в отдельной сессии. Сделайте после UPDATE - COMMIT. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2012, 09:13 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
Или под трейсом посмотрите что идет в базу. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2012, 09:22 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
Опишите, какие установлены Update properties. "... что запись была измнена между retrieve и update." - вот это настораживает ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2012, 10:22 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
1. Свойства к БД проверял, там все ок. Да и разные варианты пробовал. 2. В коннекте к БД autocommit. Так что версия с незакрытыми сессиями отпадает, темболее что пустая строка вообще не может вставится в БД, т.к. есть поля not null 3. А как под трейсом посмотреть что в БД идет?Раньше никогда не делал. 4. Странно, но DW корректно начинает нормально работать если после вставки пустой строки в любое поле этой строки чего нибудь поместить типа dw.object....='Комментарий'. Потом удаляем, то что поместили и вот уже нас пустая строка, нажимаем сохранить и о чудо ошибку выдает, что поле not null. Хотелось бы разобраться почему так происходит, может еще есть версии? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2012, 10:27 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
С новой строкой (С НЕ ИЗМЕНЕННЫМ СОДЕРЖИМЫМ) понятно - она имеет статус New!, поэтому вставка не происходит, сам ДВ ее не делает. Как только вы что то изменяете в полях, то строка получает статус NewModified! и при вызове Update для нее генерится INSERT. Сам запрос можно посмотреть в событии SQLPreview. Ну а теперь самое интересное - если Вы удаляете в поле то, что навводили (визуально выглядит как новая строка), статус строки НЕ меняется. Он остается NewModified!. Поэтому ДВ продолжает генерить INSERTы для этой строки. Почитайте доку в плане GetItemStatus(), SetItemStatus(). И опять-же: почитайте внимательно про окно UpdateProperties - комбинация значений в этом окне очень важна для определения порядка - как ДВ будет работать с базой. А настройка соединения здесь большой роли не играет. Разве что Autocommit = false, тогда Вы не увидите вставленную/измененную запись из другой сессии. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2012, 11:08 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
царевич3. А как под трейсом посмотреть что в БД идет?Раньше никогда не делал. MS SQL Management Studio>Menu>Tools>SQL Server Profiler ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2012, 11:58 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
после того как я очищаю то, что понавводил и выполняю dw.update, сохранение в БД не происходит, но видимо меняется статус строки и для всех следующих введенных данных он пытается выполнить УЖЕ UPDATE а не INSERT, но в БД строки еще нет и автоинкремент в DW не появился еще, он пытается апдейтить с условием ИД=null. Почему так, не понимаю!вроде уже все проверил ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2012, 13:28 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
авторпосле того как я очищаю то, что понавводил и выполняю dw.update, сохранение в БД не происходит ...Не происходит молча или с выдачей ошибки БД? авторон пытается выполнить УЖЕ UPDATE а не INSERT, ...А вы точно уверены что именно UPDATE? авторно в БД строки еще нет и автоинкремент в DW не появился еще, он пытается апдейтить с условием ИД=null.Колонка ID (с автоинкрементом) указана в поле identity column? Колонка ID отмечена в списке Updatable cloumns? Какое значение возвращает dw.update()? Приложите (если можно) скриншот окна Update properties для этого ДВ, тогда я, возможно, смогу Вам помочь. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2012, 13:53 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
PaulJBНе происходит молча или с выдачей ошибки БД? молча PaulJBА вы точно уверены что именно UPDATE? уверен PaulJBКолонка ID (с автоинкрементом) указана в поле identity column? да PaulJBКолонка ID отмечена в списке Updatable cloumns? сейчас нет, но пробовал и указывать, разницы не заметил. Какое значение возвращает dw.update()? Возвращает 1, но в событие sqlpreview не попадает PaulJBПриложите (если можно) скриншот окна Update properties для этого ДВ, тогда я, возможно, смогу Вам помочь. к сожалению скриншот не смогу выложить спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2012, 14:33 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
Колонка с autoincrement не должна быть указана в списке изменяемых колонок, иначе она будет включена в список колонок для UPDATE или INSERT. авторВозвращает 1, но в событие sqlpreview не попадаетВот это то и странно. Если выполняется попытка внесения изменения в БД, то обязательно должно происходить это событие. Перед вызовом и после вызова dw.Update() проверьте статус строки. Какие значения он имеет (до и после)? dw.update() вызываете с параметрами или без ... ? Какие значения в боксах "Where clause for update/delete" и "Key modification" ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2012, 15:10 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
PaulJB, 1. Подскажите пожалуйста, как проверить статус строки. А то я только знаю как проверить статус поля в строке(getitemstatus), а как всю строку не знаю 2. dw.update() вызывается без параметров 3. значения в боксах первое и последнее соотвественно ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2012, 15:28 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
автор1. Подскажите пожалуйста, как проверить статус строки. А то я только знаю как проверить статус поля в строке(getitemstatus), а как всю строку не знаю DWItemStatus dwcontrol.GetItemStatus ( <номер строки>, 0, primary! ) "If column is 0, GetItemStatus returns the status of row. " - фраза из хелпа ;) Остальное в норме, для данного случая ... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2012, 15:43 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
PaulJB, статус строки до сохранения и после, когда что нить набиваем в строку = notmodified потом очищаем строку и опять до сохранения и после = notmodified потом вводим что нить еще и тогда до сохранения статус = notmodified а после сохранения = datamodified и это сохранение в sqlpreview возникает уже командой UPDATE а не Insert ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2012, 15:57 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
царевичPaulJB, статус строки до сохранения и после, когда что нить набиваем в строку = notmodified потом очищаем строку и опять до сохранения и после = notmodified потом вводим что нить еще и тогда до сохранения статус = notmodified а после сохранения = datamodified и это сохранение в sqlpreview возникает уже командой UPDATE а не Insert Статус строки меняется не после вызова dw.accepttext(). У update() есть параметры, и первый из них accept - по умолчанию. Поэтому чтобы все работало надо после "что нить набиваем" и "потом очищаем" надо вызывать accepttext() ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2012, 16:05 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
PSmith, перед dw.update написано dw.accepttext ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2012, 16:12 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
царевичPSmith, перед dw.update написано dw.accepttext Тогда непонятно, почему "до сохранения статус = notmodified"... А точно GetItemStatus(row,0,Primary!)? Может row не тот или не Primary! ? И еще проверьте dw.modifiedcount() ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2012, 16:31 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
царевичPSmith, перед dw.update написано dw.accepttext И кстати что возвращает accepttext? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2012, 16:42 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
PSmith, разделил update и accepttext действительно статус datamodified появляется после accepttext() accepttext() всегда равно 1 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2012, 17:15 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
PSmith, проверил getitemstatus, действительно там ошибочка была. статус строки меняется именно при сохранении(dw.update) пустой строки c newmodified на notmodified а следующий dw.update уже выполняет UPDATE а не INSERT ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2012, 17:23 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
царевич, Все равно непонятно. Почему datamodified, а не NewModified. Была какая-то заморочка с этим сообщением "Данные изменились между...", но сейчас уже не вспомню. Скорее всего это связано с автоинкрементом. Я бы попробовал сразу после insert'a делать update и ретрив, чтобы автоинкремент обновить. А потом уже манипуляции с данными. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2012, 17:28 |
|
|
start [/forum/topic.php?fid=15&msg=37755530&tid=1335555]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 137ms |
0 / 0 |