Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не работает код (БД, репликация). Приложение не закрывается [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]

Бред сивой кобылы потому что


Наверх

Титульная страница Поиск, карта сайта Написать письмо