Всем привет!
Начну с того что не один форм/статью я прочитал по этой проблеме, решения есть, но они без толковые. В чем суть. Имеются две копии программы (на двух разных компьютерах), обе работают с БД, которая просто лежит в общей папке. И при изменении какой либо таблицы, программа посылает сообщение по локальной сети, что собственно некая таблица изменилась необходимо обновить. И все вроде бы ничего, но сообщение посылается мгновенно, а обновляется не совсем. Если после приема сообщения не выждать 3-4 секунды данные не обновиться вообще. Использованные компоненты
ADOconnect, ADOTable, DataSourse, DBgridEh. База данных
Access.
Обновлять пытался так:
Код:
form1.ADOTable.Active:=false;
form1.ADOTable.Active:=true;
form1.DataSource1.DataSet.Refresh;
form1.DataSource1.Enabled:=false;
form1.DataSource1.Enabled:=true;
form1.ADOTable.Refresh;
form1.DBGridEh1.Refresh;
Этим кодом который нашел в интернете:
Код:
procedure ReOpenDataSet(DataSet: TDataSet; StayActiveRecord: boolean = true);
begin
with DataSet do
begin
if StayActiveRecord then
Tag := Fields[0].AsInteger;
DisableControls;
Close;
Open;
if StayActiveRecord then
Locate(Fields[0].FieldName,Tag,[]);
EnableControls;
end;
end;
Но результата к сожаление нет
. Обновляет, но так же 3-4 секунды - это долго. Мне посоветовали использовать компонент
ADOQeury мол с ним таких проблем нету, да я сам где читал, что кому то это помогло. Хорошо что не весь проект переписал, а только к одной таблице его поставил, потому что результат оказался точно таким же. Пробовал я запускать обе программы на одном ПК, да бы исключить проблему с сетью. Исключил.
Что собственно хотелось бы узнать, как грамотно/правильно обновить данные. Хотя бы с задержкой 1-1,5 сек. Или может дело еще в чем? Надеюсь на вашу помощь. Спасибо.
И еще кое что, если может у кого есть хорошие статьи или книги по этой проблеме, ткните. Просто хотелось бы знать, почему вообще так происходит и разобрать по поподробнее.