Грид. Проблема со штатным UPDATE после 2-ой формы

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
СисдбаМастеркеевич
Сообщения: 13
Зарегистрирован: 05 окт 2007, 20:06

Грид. Проблема со штатным UPDATE после 2-ой формы

Сообщение СисдбаМастеркеевич » 31 окт 2007, 00:57

Доброй ночи,
бьюсь над проблемой (заранее прошу прощения если вопрос глуп, я новичок, хелпы читал, многого еще не понял :-)
Итак, FB2.0+FIBplus, 2 формы, на одной Грид со штатными навиг. кнопками, + хочу сделать возможность редактирования через вторую форму.
Все ОК, если апдейтю через свою форму. Но...
Почему-то после того как я хоть раз что-то в Гриде изменил штатными навиг. кнопками и запускаю свою форму редактироания , после отработки кода ниже, возникает ошибка "Access Violation..."

Естественно подозреваю свой код.
На этой второй моей форме:
(sql3- TpFIBQuery)

Код: Выделить всё

Form1.sql3.Close;
 Form1.sql3.SQL.Clear;
 Form1.sql3.SQL.Text:='UPDATE CUSTOMTAB SET NAME=:NAME, PHONE=:PHONE, DETAILS=:DETAILS WHERE IDC=:IDC';
 Form1.sql3.ParamByName('NAME').asString := Edit1.Text;
 Form1.sql3.ParamByName('PHONE').asString := Edit2.Text;
 Form1.sql3.ParamByName('DETAILS').asString := Edit3.Text;
...
 try
 Form1.sql3.ExecQuery;
// Form1.Transaction3.Commit; //У sql3 Options [qoAutoCommit]
except
Form1.Transaction3.RollBack;
end;

Прошу помочь!

СанЕк
Сообщения: 25
Зарегистрирован: 25 окт 2005, 11:45

Сообщение СанЕк » 31 окт 2007, 09:52

Скорее всего проблема как раз в штатных кнопках и в параметрах транзакции. Транзакция стартует, но не завершаеться или еще что то. смотри внимательнее параметры компонентов FibDataSet и FibTransaktion.

СисдбаМастеркеевич
Сообщения: 13
Зарегистрирован: 05 окт 2007, 20:06

Сообщение СисдбаМастеркеевич » 31 окт 2007, 10:14

СанЕк писал(а):Скорее всего проблема как раз в штатных кнопках и в параметрах транзакции. Транзакция стартует, но не завершаеться или еще что то. смотри внимательнее параметры компонентов FibDataSet и FibTransaktion.
Да, спасибо, так и есть.

СисдбаМастеркеевич
Сообщения: 13
Зарегистрирован: 05 окт 2007, 20:06

Сообщение СисдбаМастеркеевич » 31 окт 2007, 19:22

Получилось, но все равно коряво как-то.

В нескольких словах:

PK назначается на сервере, запись вставляется в таблицу, но PK на клиенте == NULL и последующий UPDATE не проходит.

Коряво выкрутился так,
делаю на клиенте невидимую колонку с ключами. После Insert'а в этой же процедуре делаю селект (кошмар), получаю ключ(и). Дальше если пользователь через 2-ую форму делает UPDATE строки, он получает нужный ключ (через сфокусированную строку) значение этой невидимой колонки с ключом.

Подскажите please неизвращенский способ редактирования нештатными кнопками ?!! Или где про это можно прочитать?
Или после инсерта можно ли сделать как-то рефреш для получения PK на клиенте, например средствами FIBplus?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 31 окт 2007, 20:33

PK назначается на сервере, запись вставляется в таблицу, но PK на клиенте == NULL и последующий UPDATE не проходит.
тебе уже давали ссылку на статью generator.htm
После Insert'а в этой же процедуре делаю селект (кошмар), получаю ключ(и).
какие именно? Если ты не знаешь значение созданного ПК, то каким образом ты его "получаешь"?

СисдбаМастеркеевич
Сообщения: 13
Зарегистрирован: 05 окт 2007, 20:06

Сообщение СисдбаМастеркеевич » 31 окт 2007, 20:37

да, ссылку читаю, спасибо,
+ нашел еще INSERT...RETURNING

СисдбаМастеркеевич
Сообщения: 13
Зарегистрирован: 05 окт 2007, 20:06

Сообщение СисдбаМастеркеевич » 31 окт 2007, 22:17

СисдбаМастеркеевич писал(а):да, ссылку читаю, спасибо,
+ нашел еще INSERT...RETURNING
А кто-то делал INSERT...RETURNING фибами?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 01 ноя 2007, 12:26

вот любитель искать геморрой себе на голову...

p.s. да, в FIBPlus это должно поддерживаться, в самых свежих версиях
если не поддерживается - спроси у них в саппорте.
с другой стороны - не понимаю, чего так долго биться головой о стену. получай значение генератора для мастера в клиентской части, как написано в статье, и все дела. Тем более ты вроде сам же сказал, что знаешь даже про спец-свойство у FIBDataSet.

Ответить