Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Как ADOTable через ADOConnection связать с Access


Автор: Hatigatsu 6.12.2006, 08:10
С Добрым утром счастливый народ. Спасите человека. 
Вопрос: что нужно написать в коде программы, чтобы ADOTable1 связывался через ADOConnection1 с MS Access'ой базой *.mdb при запуске программы. Ведь программа не всегда будет в одной и той же директории. Нужно чтоб и после перемещения папки с программой, она (программа) связывалась с базой, находящаяся в том же папке. ("чуть чуть не грамотно, но понятно")

Изучил вдоль и поперёк архив статей Delphi World 6.0 по вопросу ADOConnection. Кое-что от туда взял, применил, но так как там в подробностях мало, что расказывается, разумеется при запуске проги у меня вылазет ошибка.
Project Rus_Eng_Jap.exe raised exception class EOleException with message
'Дисковая или сетевая ошибка'. Process stopped. Use Step or Run to continue.


А вот, что я написал в своей программе (только не смейтесь):
Код

procedure TForm1.FormCreate(Sender: TObject);

begin

 ADOTable1.Active := False;
 ADOConnection1.Connected := False;
 ADOConnection1.LoginPrompt := False;
 ADOConnection1.Provider := 'Microsoft.Jet.OLEDB.4.0';
 ADOConnection1.ConnectionString:=
 'Provider=Microsoft.Jet.OLEDB.4.0;' +
 'User ID=Admin;' +
 'Password=Password;' +
 'Data Source=E:\Translation_Rus_Eng_Jap\Material\BazaD.mdb;' +
 'Mode=ReadWrite;' +
 'Extended Properties="" ;' +
 'Persist Security Info=False;' +
 'Jet OLEDB:System database=" " ;' +
 'Jet OLEDB:Registry Path="" ;' +
 'Jet OLEDB:Database Password="" ;' +
 'Jet OLEDB:Engine Type=5;' +
 'Jet OLEDB:Database Locking Mode=1;' +
 'Jet OLEDB:Global Partial Bulk Ops=2;' +
 'Jet OLEDB:Global Bulk Transactions=1;' +
 'Jet OLEDB:New Database Password="" ;' +
 'Jet OLEDB:Create System Database=False;' +
 'Jet OLEDB:Encrypt Database=False;' +
 'Jet OLEDB:Compact Without Replica Repair=True;' +
 'Jet OLEDB:SFP=False';
 ADOConnection1.Mode := cmShareDenyNone;
 ADOConnection1.Connected := True;
 ADOTable1.Connection:=ADOConnection1;
 ADOTable1.TableName := 'RusToFromEng';
 ADOTable1.Active := True;

end;

Автор: Elfebet 6.12.2006, 10:03
Цитата

Нужно чтоб и после перемещения папки с программой, она (программа) связывалась с базой, находящаяся в том же папке. 

Код

procedure TForm1.FormCreate(Sender: TObject);
begin
 ADOTable1.Active := False;
 ADOConnection1.Connected := False;
 ADOConnection1.LoginPrompt := False;
 ADOConnection1.Provider := 'Microsoft.Jet.OLEDB.4.0';
 ADOConnection1.ConnectionString:=
 'Provider=Microsoft.Jet.OLEDB.4.0;' +
 'User ID=Admin;' +
 'Password=Password;' +
'Data Source='+ExtractFilePath(ParamStr(0))+'BazaD.mdb;' +
 'Mode=ReadWrite;' +
 'Extended Properties="" ;' +
 'Persist Security Info=False;' +
 'Jet OLEDB:System database=" " ;' +
 'Jet OLEDB:Registry Path="" ;' +
 'Jet OLEDB:Database Password="" ;' +
 'Jet OLEDB:Engine Type=5;' +
 'Jet OLEDB:Database Locking Mode=1;' +
 'Jet OLEDB:Global Partial Bulk Ops=2;' +
 'Jet OLEDB:Global Bulk Transactions=1;' +
 'Jet OLEDB:New Database Password="" ;' +
 'Jet OLEDB:Create System Database=False;' +
 'Jet OLEDB:Encrypt Database=False;' +
 'Jet OLEDB:Compact Without Replica Repair=True;' +
 'Jet OLEDB:SFP=False';
 ADOConnection1.Mode := cmShareDenyNone;
 ADOConnection1.Connected := True;
 ADOTable1.Connection:=ADOConnection1;
 ADOTable1.TableName := 'RusToFromEng';
 ADOTable1.Active := True;
end;

оно?

Автор: Hatigatsu 6.12.2006, 10:30
Elfebet, я не указал, что в этом каталоге 
E:\Translation_Rus_Eng_Jap\Material\BazaD.mdb; находится моя База, но программа выдает ошибку. 
Я изменил как ты написал, всё по прежнему.Вот только что удалил пробелы в кавычках (" " исправил на "") и убрал пробелы межу кавычками "" и точкой с запятой ;
Прогресс - программа выдала новую ошибку
  
Project Rus_Eng_Jap.exe raised exception class EOleException with message
'Не удаётся запустить приложение. Системная база отсутствует или
открыта в монопольным доступом другим пользователям'


Я думаю, что пробелы в кавычках и после них, очень много значат. И ещё пришлось удалить строчку
Код

Jet OLEDB:Don't Copy Locale on Compact=False; т.к. там апостроф мешается.

Её нет в первом сообщении темы среди прочих.
Что делать?

Автор: Rodman 6.12.2006, 10:42
Hatigatsu, попробуй сдулать следующее
Код

procedure TForm1.FormCreate(Sender: TObject);
begin
 ADOTable1.Active := False;
 ADOConnection1.Connected := False;
 ADOConnection1.LoginPrompt := False;
 ADOConnection1.Provider := 'Microsoft.Jet.OLEDB.4.0';
 ADOConnection1.ConnectionString:=
 'Provider=Microsoft.Jet.OLEDB.4.0;' +
 'User ID=Admin;' +
 'Password=Password;' +
'Data Source='+ExtractFilePath(ParamStr(0))+'BazaD.mdb;' +
 'Mode=ReadWrite;' +
 'Extended Properties="" ;' +
 'Persist Security Info=False;' +
 'Jet OLEDB:System database=" " ;' +
 'Jet OLEDB:Registry Path="" ;' +
 'Jet OLEDB:Database Password="" ;' +
 'Jet OLEDB:Engine Type=5;' +
 'Jet OLEDB:Database Locking Mode=1;' +
 'Jet OLEDB:Global Partial Bulk Ops=2;' +
 'Jet OLEDB:Global Bulk Transactions=1;' +
 'Jet OLEDB:New Database Password="" ;' +
 'Jet OLEDB:Create System Database=False;' +
 'Jet OLEDB:Encrypt Database=False;' +
 'Jet OLEDB:Compact Without Replica Repair=True;' +
 'Jet OLEDB:SFP=False';
 ADOConnection1.Mode := cmShareDenyNone;
 ADOConnection1.Connected := True;
 ADOTable1.Connection:=ADOConnection1;
 ADOTable1.TableName := 'RusToFromEng';
 ADOTable1.Active := True;
ShowMessage(ADOConnection1.ConnectionString);/// и посмотри что выведит
end;


я надеюсь ты можешь сделать ADOConnection1.ConnectionString в ручную, тогда сделай и сравни то что программно написано и то что вручную сдулано...

Мне тож кажется с кавычками гимор...

Автор: pkv 6.12.2006, 11:52

Я прописую соединение след образом:

Код

  fMain.conMain.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + PathToDB + ';Persist Security Info=False';



Все работает

Автор: Hatigatsu 6.12.2006, 12:09
Rodman, pkv, СпасиБо за помощь. Сейчас попробую.

Добавлено @ 12:19 
pkv, Ты СУПЕР. Море, тебе, БЛАГОДАРНОСТИ. Пусть Ангелы будут петь тебе перед сном райские песни. Всё работает, УР-А-ААааааааааааа! Наконец-то я сдам курсовик. Всем, и конечно же особенно админам, и создателям  этого "королевства помощи", СпасиБо от всего сердца. 

PS: В ближайшие два месяца, наверное, не буду людей беспокоить новыми темами.

Автор: Veniamin 27.5.2008, 13:33
Цитата(pkv @ 6.12.2006,  11:52)
Я прописую соединение след образом:

Код

  fMain.conMain.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + PathToDB + ';Persist Security Info=False';



А можно подробнее куда конкретно нужно прописывать этот код? Или как можно с помощью OpenDialog-а указывать БД, и чтоб приложение соединялось с БД?

Автор: Rodman 27.5.2008, 15:20
Код

if(OpenDialog.Execute)then
begin
   fMain.conMain.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + OpenDialog.FileName + ';Persist Security Info=False';
  fMain.conMain.Open;
  ...
end;
а куда вставлять, уже сам решай..
перед началом работы с базой

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)