![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TIBDataSet.Refresh [D7, IB6.x]
Vasilisk © (2006-04-20 00:18:00)Delphi 7. Interbase 6.1
Есть TIBDataSet. В котором свойства выглядит так
SelectSQL
SELECT
ID,
field1,
field2,
field3
FROM
VW_VIEW
ModifySQL
SELECT
ID,
field1,
field2,
field3
FROM
VW_VIEW
WHERE
ID = :old_id
InsertSQL
EXECUTE PROCEDURE sp_e_ins(
:field1
)
Идея следующая:
ID и field3 заполняются в тригере (один по генератору, а второй как Now), а field2 джойнится во вьюхе из другой таблицы по полю field1.
Есть DBGrid (ReadOnly), связанный с этим датасетом, а кроме этого есть такой кусок кода
DataSet.Insert;
DataSet.FieldByName('field1').AsInteger := Val;
DataSet.Post;
Так вот, после этого в Grid'е добавляется одна запись где заполнено только поле field1.
Вызов Refresh после Post не имеет результата. Перенос генератора с сервера на клиент не желательна, но тоже не приносит никакой пользы. Единственное, что помогает - Close/Open, но это неправильно, т.к. в датасете может быть порядка 10 тысяч записей.
Что делать, чтобы заставить Refresh работать?
PS Все происходит в одной транзакции. Вызов между Post и Refresh CommitRetaining тоже не спасает.
Johnmen (2006-04-20 09:16:00) [1]Так это происходит потому, что рефрешу неоткуда взять значение ключа для обновления одной записи. Кстати, а где сам РефрешСКЛ???
Поэтому грамотный выход - получить значение генератора джля ID, а потом вставить его в инсерте.