Форум: "Базы";
Текущий архив: 2002.02.21;
Скачать: [xml.tar.bz2];
ВнизГлюк отображения при модификации данных на клиенте Найти похожие ветки
← →
ZDN (2002-01-28 15:24) [0]Доброго времени суток, профи!!!
Есть простейшая база, в ней пока всего одна таблица с уникальным
/обеспечивается триггером на сервере/ первичным ключом. Индексы не сделал
ввиду гарантированно малого числа записей в этой таблице /30-50, не более/
CREATE TABLE WORKER (NUMBER INTEGER NOT NULL,
................................
PRIMARY KEY (NUMBER));
CREATE GENERATOR NUMBER_GEN;
CREATE TRIGGER NUMBER_TRIGGER FOR WORKER
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
NEW.NUMBER=GEN_ID(NUMBER_GEN,1);
END
Клиент реализован следующим образом: на форме расположены DBEdit"ы и
DBNavigator, в качестве источника данных используется IBDataSetSource,
связанный с набором данных IBDataSet1. Для IBDataSet1 включил локальное
кэширование /CachedUpdates=True/.
Содержимое запроса DeleteSQL для IBDataSet1 следующее:
DELETE FROM WORKER
WHERE NUMBER=:Old_NUMBER
Содержимое запроса SelectSQL
SELECT * FROM WORKER
Содержимое запроса InsertSQL:
INSERT INTO WORKER (FioWorker, DocType, Code, Seria)
VALUES (:FioWorker, :DocType, :Code, :Seria)
При этом получение уникального значения с сервера обеспечивается
элементарно посредством следующей процедуры:
procedure TDM.IBDataSet1AfterInsert(DataSet: TDataSet);
begin
if IBDataSetSource.State=dsInsert then
begin
NewIDQuery.Open;
DataSet.FieldByName("NUMBER").AsInteger:=NewIDQuery.Fields[0].asInteger;
NewIDQuery.Close;
end;
end;
Содержимое запроса ModifySQL:
UPDATE WORKER
SET FioWorker=:FioWorker, DocType=:DocType, Code=:Code, Seria=:Seria
WHERE NUMBER=:Old_NUMBER
К набору данных IBDataSet1 подключена транзакция ReadTransaction.
После коннекта с БД набор данных я получаю так:
if not DM.IBDataSet1.Prepared then
begin
DM.IBDataSet1.Close;
DM.IBDataSet1.Prepare;
DM.IBDataSet1.Open;
end;
Внесение изменений на сервер происходит так:
Try
DM.UnalDB.ApplyUpdates([DM.IBDataSet1]);
Except
MessageDlg("Изменения не сохранены", mtError, [mbOK], 0);
DM.IBDataSet1.CancelUpdates;
End;
Проблема в следующем:
при работе с локальными данными /навигация, добавление, удаление,
редактирование/ все работает отлично.
Обновление данных с сервера по кнопке - тоже без проблем.
С добавлением и удалением записей тоже все отлично.
Однако после передачи модифицированных данных на сервер на клиенте
наблюдается следующий СТРАШНЫЙ ГЛЮК /или я чего-то пока не знаю/: измененные
записи /только они, с добавленными все в порядке/ отображаются в DBEdit"ах
пустыми. После принудительного получения данных с сервера все отображается
нормально.
Почему так происходит, я понять не могу. В чем дело? В локальном кэше, в
DBEdit"ах или еще в чем-то?
Если сильно не затруднит, помогите.
Заранее благодарен.
← →
ZDN (2002-01-28 15:26) [1]Просьба продублировать ответ на мыло. Спасибо.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.02.21;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.004 c