Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.02.21;
Скачать: CL | DM;

Вниз

Глюк отображения при модификации данных на клиенте   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.01 c
1-66603
sammy
2002-02-06 11:40
2002.02.21
Удаление файлов


3-66458
IronHawk
2002-01-25 17:12
2002.02.21
БД в *.tхt виде


3-66439
Beginer
2002-01-28 07:51
2002.02.21
SQL2000 и ADO


1-66615
daosv
2002-02-06 13:56
2002.02.21
ПОМОГИТЕ ПОЖАЛУЙСТА!!!!!Как узнать создано ли дочернее окно заданного класса?


1-66576
Yakudza
2002-02-05 12:49
2002.02.21
Timestamp parameters with zero scale