|
странная работа 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 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
PSmith, Делать сам insert не могу,т.к. есть поля, которые должны быть сначала правильно заполнены и только потом сохранены, а иначе БД не пропустит такую вставку ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2012, 17:42 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
царевич, Тогда придется вручную перед update городить огород наподобие: Код: powershell 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2012, 17:57 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
Должно быть так (в порядке действий с одной и той-же записью): 1. Вставили запись - New! (если тут вызвать Update() - ничего не произойдет) 2. Отредактировали запись (изменили содержимое полей), затем AcceptText() - NewModified! 3. Update() - вызывает INSERT ... и сбрасывает статус в NotModified!, автоматически заполняется поле, указанное в "identity column" 4. Снова отредактировали запись, затем AcceptText() - DataModified! 5. Update() - вызывает UPDATE ... и сбрасывает статус в NotModified! Примечание: Для указанного случая Update() вызывается БЕЗ параметров. Если вызывать с параметрами, то порядок операций может измениться. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2012, 12:40 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
Поправлю немного, при New! уже будет генерится insert. Что-то с параметрами update datawindow, а без картинки замучишься гадать Может ключ не тот, может Delete then Insert стоит, да еще куча всего ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2012, 14:15 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
2 spas2001 А Вы точно уверены, что при статусе строки = New! генерится INSERT? :) царевич выше описывал свое окно "Update Properties", там все как-бы Ок., но я согласен - лучше раз увидеть, чем сто раз услышать. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2012, 19:09 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
Если все нормально - да, иначе пустые значения никогда бы в жизни не вставились:) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2012, 20:18 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
Попробуйте просто инсерт из Database painter-а сделать и проверить результат, может дело, как говориться, не в бобине? Хотя скорее всего у вас дело именно в параметрах обновления dw. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2012, 20:24 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
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 этап успешно сохраняется(без ошибок имею виду,но в БД ничего нет) только именно после ошибки дублирования ключа, ломает она в чтоли что-то?! Может есть у кого соображения на этот счет? спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2012, 14:35 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
файл скриншота не прикладывается но вот что в нем: where clause: key columns key modification: use update updateble columns: все кроме ID identiti column: ID unique key column: ID ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2012, 14:39 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
Я уже не помню где, но видел, что Micro-софтовский Autoincrement как-то по особому надо описывать в коннекте или где-то еще ... Просто так (как будто-бы) DW его не читает. Но, могу и ошибаться. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2012, 16:17 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
Включите в update колонку id раз выбран вариант key in place Коннект к БД настроен как? Через OLEDB? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2012, 16:58 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
Прикольно читается. Потратить неделю на хрень вместо того, чтобы за полдня переписать эту халтуру на Embedded SQL и решить проблему раз и навсегда. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2012, 18:26 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
Вот это тоже мешается s1 varchar(4) not null UNIQUE NONCLUSTERED Вы убираете значение из s1? Но честно говоря, вы просто что-то не то делаете ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2012, 19:22 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
Dim2000, что вы предлагаете переписать на Embedded SQL?Вставку в БД?в 50 окнах. spas2001, 1. в update колонку id добавил, ничего не изменилось 2. коннект к БД через mss microsoft sql server 3. чем мешает колонка s1?Да я удаляю введенное в нее значение. что не то я делаю? объясните, пожалуйста, подробнее? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2012, 10:14 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
Драйвер MS SQL может неверно отрабатывать, попробуйте через OLEDB Колонка мешает тем, что not null, а вы удаляете значение, попробуйте пока без лишних ограничений ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2012, 10:23 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
spas2001, Без лишних ограничений я пробовал, все работает хорошо. Но я ведь не могу отказаться от использования not null полей и уникальных индексов ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2012, 10:57 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
24.04.2012 11:14, царевич написал: > Dim2000, что вы предлагаете переписать на Embedded SQL?Вставку в БД? Да. > в 50 окнах. Для начала - там, где глючит. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2012, 11:32 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
царевич, А не пробовали в окошке "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. ? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2012, 12:00 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
Тогда при инсерте не забывайте их заполнять:) А серьезно, у меня на 9-ке кажется встречалась подобная проблема для MS SQL 2005, на OLEDB она пропала ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2012, 12:08 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
Dim2000Прикольно читается. Потратить неделю на хрень вместо того, чтобы за полдня переписать эту халтуру на Embedded SQL и решить проблему раз и навсегда. это ^^^^^^^^ уж точно прикольнее читается. НИКОГДА не следуйте таким жутким советам... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2012, 19:05 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
В папке .../Shared/PowerBuilder есть файлик pbodb90.ini. Там куча параметроыв для работы с различными базами. На сколько я знаю, то DW кое что оттуда подчитывает. Может это поможет ... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2012, 19:15 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
24.04.2012 20:05, Филипп написал: > это ^^^^^^^^ уж точно прикольнее читается. НИКОГДА не следуйте таким > жутким советам... И что тут жуткого? Если уж топикстартер не может сделать через DW, пусть пробует более простой вариант (а если и его не потянет - гнать в шею, ибо безнадёжен). Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2012, 19:31 |
|
странная работа update()
|
|||
---|---|---|---|
#18+
Dim200024.04.2012 20:05, Филипп написал: > это ^^^^^^^^ уж точно прикольнее читается. НИКОГДА не следуйте таким > жутким советам... И что тут жуткого? Если уж топикстартер не может сделать через DW, пусть пробует более простой вариант (а если и его не потянет - гнать в шею, ибо безнадёжен). Я в шею гоню тех, кто Embedded SQL в РВ использует :-)))) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2012, 20:34 |
|
|
start [/forum/topic.php?all=1&fid=15&tid=1335555]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
60ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 10ms |
total: | 174ms |
0 / 0 |