![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не работает код (БД, репликация). Приложение не закрывается [D6, XP]
0_archi_0 © (2006-10-12 14:26:00)Отчего не происходит выход из пиложения, не говоря уже о том, что данные Grid'е обновляются при нескольких вызовах подряд. Спасибо.
begin
ReplObject:= CoReplica.Create;
Provider:= 'Provider=Microsoft.Jet.OLEDB.4.0;';
Src:= Provider+'Data Source = '+'AIDS.mdb';
Dst:= 'AIDS1.mdb';
ReplObject.Set_ActiveConnection(Src);
try
ReplObject.Synchronize(Dst, jrSyncTypeImport, jrSyncModeDirect);
except
on E: Exception do
ShowMessage(e.message);
end;
if DataModule1.PacientiADOTable.Modified then
DataModule1.PacientiADOTable.Post;
DataModule1.PacientiADOTable.Close;
DataModule1.PacientiADOTable.Open;
DataModule1.PacientiADOTable.Refresh;
Self.Close;
MainForm.Close;
Application.Terminate;
end;
0_archi_0 (2006-10-12 16:24:00) [1]В коде изменены строковые пременны соответственно с потребностью.
А Вы, уважаемый MsGuns, по ходу, такой код даже и в книжке не видали.
И не одного вразумительного ответа на мои вопросы.
Прискорбно.
Хотя для таких специалистов как Вы, MsGuns, как мне кажется вопросы простые.
Если можете ответить - ответьте по существу, нет так и напишите "не знаю".
Спасибо.
MsGuns (2006-10-12 16:18:00) [2]>Код репликации скопирован из книги А.Сорокина "Delphi - разработка баз данных"
"Ну тогда Вам к врачу" ;)
0_archi_0 (2006-10-12 16:12:00) [3]Есть такая библиотека расширения ADO - Microsoft Jet and Replication Objects (JRO). Это оттуда.
Код репликации скопирован из книги А.Сорокина "Delphi - разработка баз данных" и он работает - базы реплицируются. Вопрос вообще-то в другом - какого форма не закрывается после выполнения данного кода, и какого не меняеся содержимое DBGridg. Либо лыжи не едут либо я ... .
MsGuns (2006-10-12 15:59:00) [4]Мессир соизволит все же приотрыть завесу над таинственным CoReplica ?
Иначе дальнейший разговор будет напоминать визит больного геморроем к стоматологу.
0_archi_0 (2006-10-12 15:50:00) [5]Репликация и извлечение данных на клиент (TADOTable) выполняются в рамках одного соединения (TADOConnection).
Обработчиков OnCloseQuery/OnClose нигде нет. Форма одна - главная.
Что не так в 17 строке?
MsGuns (2006-10-12 15:39:00) [6]>Метод ReQuery так же как и все которое за // не обновляет тут же данные в DBGrid'е.
Репликация и извлечение данных на клиент (TADOTable) выполняются в рамках одного соединения (TADOConnection) ?
>И все-таки почему при выполении кода не закрывается приложение. Хоть одно Close хоть в комплекте.
Ошибка в 17-й строке.
Обработчики OnCloseQuery/OnClose в любой из прикрываемых форм имеются ?
0_archi_0 (2006-10-12 15:39:00) [7]не понимаю, каким боком грид пришпилен к репликации...
это как от газосварщика потребовать бетон мешать
>
В гриде отоброжается таблица, котороя меняется в результате репликации.
Desdechado (2006-10-12 15:34:00) [8]не понимаю, каким боком грид пришпилен к репликации...
это как от газосварщика потребовать бетон мешать
0_archi_0 (2006-10-12 15:33:00) [9]Есть таблица в составе базы Access, она называется Pacienti, связь такая - ADOConnection1-PacientiADOTable-PacientiDataSource-PacientiDBGrid. ADOConnection1 связан с базой данных. При репликации (в данном случае односторонней синхронизации) естественно меняется содержимое (происходит дополнение, изменение ранее занесенных записей в главной реплике, если они менялись во вторичной реплике) PacientiADOTable-PacientiDataSource-PacientiDBGrid. В итоге хотелось бы видеть новые и измененные данные в PacientiDBGrid. Однако их сразу почему-то не видно в Gride. Поэтому и все вышеперечисленно (смотри за // ...).
Метод ReQuery так же как и все которое за // не обновляет тут же данные в DBGrid'е.
И все-таки почему при выполении кода не закрывается приложение. Хоть одно Close хоть в комплекте.
MsGuns (2006-10-12 15:13:00) [10]>
try
ReplObject.Synchronize(Dst, jrSyncTypeImport, jrSyncModeDirect);
except
on E: Exception do
ShowMessage(e.message);
end;
if DataModule1.PacientiADOTable.Modified then
DataModule1.PacientiADOTable.Post;
Каким боком выполненая, очевидно, на серверетаинственным ReplObject репликация касается клиентского объектаPacientiADOTable ? А если все же касается, то почему сначала изменения на сервере (репликация), а потом на клиенте (Post) ? И еще: выбор из всего богатства ADO компоненты ADO Tableобусловлен жестким условием ОБСЕ ?
ЗЫ. На всякий пожарный, поясните, что Вы понимаете под словом "репликация".
>
DataModule1.PacientiADOTable.Close;
DataModule1.PacientiADOTable.Open;
Про метод ReQuery не слышали ?
>
DataModule1.PacientiADOTable.Refresh;
"В огороде бузина, в Киеве дядька"
> Self.Close;
MainForm.Close;
Application.Terminate;
Первый оператор закрывает форму-владельца всего этого чуда. Ладно. А зачем еще и Главную. Уже криминал.
Но вершина - посдледний оператор. Это что, типа контрольный выстрел в голову ?
> end;
Единственная правильная строка кода. Действительно КОНЕЦ. Причем ПОЛНЫЙ.
0_archi_0 (2006-10-12 15:00:00) [11]Наверное надо уточнить, чтобы не было таких ответов.
Данный кусок кода из главного меню программы. Этот кусок выполняет односторонюю репликацию базы Access, хотелось бы чтобы после этого закрывалось окно программы и приложение завершалось. Сам код репликации и репликация выполняется без ошибок. Но программа не закрывается, хотя в отладчике при пошаговом выполнении программа завершается.
А завершить надо для того, чтобы при повторном ее запуске в DBGride увидеть обновленные данные, другого выхода для обновления данных в DBGride я не нашел. Перепробовал следующее:
// DataModule1.ADOConnection1.Connected := False;
// DataModule1.ADOConnection1.Connected := True;
// datamodule1.PacientiADOTable.Active := false;
// datamodule1.PacientiADOTable.Active := true;
// DataModule1.PacientiADOTable.Refresh;
// DataModule1.PacientiDataSource.Enabled := false;
//DataModule1.PacientiDataSource.Enabled := true;
// PacientiDBGrid.DataSource:= nil;
// PacientiDBGrid.DataSource:= DataModule1.PacientiDataSource;
//DataModule1.VtorZabolADOTable.Refresh;
//DataModule1.SoputZabolADOTable.Refresh;
//DataModule1.PacientiDataSource.
if DataModule1.PacientiADOTable.Modified then
DataModule1.PacientiADOTable.Post;
DataModule1.PacientiADOTable.Close;
DataModule1.PacientiADOTable.Open;
DataModule1.PacientiADOTable.Refresh;
// MainForm.Visible := false;
// MainForm.Visible := true;
MsGuns (2006-10-12 14:49:00) [12]Бред сивой кобылы потому что