Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2010, 12:16   #1
chinara
Пользователь
 
Регистрация: 11.11.2010
Сообщений: 12
По умолчанию ConnectionString

Всем привет!

Есть у меня файл-серверная база (Access). Путь (ConnectionString) к этой базе составляется программно (т.е. пользователь сам через OpenDialog указывает местоположение базы). Для этого я написала следующий код на нажатие кнопки "Редактирование пути БД":
Код:
var
N1,N2,S1:string;
label m; 
begin
Assignfile(P1,'idintifik.ini');
Rewrite(P1); 
N1:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='; 
N2:=';Persist Security Info=False';
opendialog1.execute;
S1:=opendialog1.filename; 
if s1='' then 
begin 
MessageDlg('',mtError,[mbok],0); 
goto m;
end;
MainDM.ADOConnection1.ConnectionString:=N1+S1+N2;
Write(P1,s1); 
m:closefile(P1); 
end;

а на событие onShow формы,на которой отображены мои таблицы:
label m;
var constr:string;
N1,N2:string; 
begin 
N1:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='; 
N2:=';Persist Security Info=False'; 
Assignfile(P1,'idintifik.ini');
{$I-} 
reset(P1); 
{$I+} 
if IOResult<>0 then 
begin
Application.MessageBox('The file of DataBase Path cannot be found','Error!',MB_OK);
goto m;
end; 
read(P1,constr);
MainDM.ADOConnection1.ConnectionString:=n1+constr+n2;
MainDM.ADOConnection1.Connected := True;
Closefile(P1); 
m:end;
Работает...Но вот одна маленькая проблема:
после того,как я в программе выбираю базу,я должна ее закрыть,потом заново открыть, чтоб новый путь был считан с файла...
Как эту ошибку можно исправить??(((

Последний раз редактировалось Stilet; 13.11.2010 в 14:37.
chinara вне форума Ответить с цитированием
Старый 13.11.2010, 14:24   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
после того,как я в программе выбираю базу
для переподключения надо
1. закрыть все активные наборы (формы с данными)
2. отключить соединение
MainDM.ADOConnection1.Connected := FALSE;
3. сделать подключение с новыми параметрами
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 15.11.2010, 11:25   #3
chinara
Пользователь
 
Регистрация: 11.11.2010
Сообщений: 12
По умолчанию

Дело в том, что все формы мои закрыты. Вот выбрала я свою Базу, открываю форму с таблицами - он выдает мне ошибку, мол, база не найдена. Все закрываю, запускаю программу снова - и все прекрасно работает... Мне кажется, что проблема именно в сохранении пути в файл ...
chinara вне форума Ответить с цитированием
Старый 15.11.2010, 11:54   #4
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

А зачем такие сложности с label и goto?
Может так проще?
Код:
  if OpenDialog1.Execute then
  begin
    with MainDM.ADOConnection1 do
    begin
      Connected := False;
      ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' +
        OpenDialog1.filename + ';Persist Security Info=False';
      Connected := True;
    end;
  end;
Ну и при OnShow формы...
Код:
  var ini: TINIFile;
begin
   ini := TIniFile.Create(ExtractFilePath(Application.ExeName)+'idintifik.ini');
    MainDM.ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' +
   ini.ReadString('Option','ConString','') + ';Persist Security Info=False';
      Connected := True;
   ini.Free;
end;
Кстати, почему при OnShow, а не OnCreate?
_SERGEYX_ вне форума Ответить с цитированием
Старый 15.11.2010, 13:53   #5
chinara
Пользователь
 
Регистрация: 11.11.2010
Сообщений: 12
По умолчанию

_SERGEYX_
спасибо вам за помощь...только вот программа теперь выдает ошибку : Access Violation at address 004BE1B0 ((((
chinara вне форума Ответить с цитированием
Старый 15.11.2010, 14:21   #6
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

А в ini-файле есть нужная строка?
Проверим... Вот я создаю файл idintifik.ini с текстом
Код:
[Option]
ConString=e:\0_project\Project_10\CalcQuery\db_test.mdb
Пишу при создании формы (без DataModul-ей)
Код:
procedure TForm1.FormCreate(Sender: TObject);
var ini: TINIFile;
begin
  ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'idintifik.ini');
  ADOConnection1.Connected := False;
  ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' +
 ini.ReadString('Option', 'ConString', '') +
 ';Persist Security Info=False';
  ADOConnection1.Connected := True;
  ini.Free;
  ADOQuery1.Open;
end;
При нажатии на кнопку
Код:
procedure TForm1.RzBitBtn1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
    with ADOConnection1 do
    begin
      Connected := False;
      ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' +
        OpenDialog1.filename + ';Persist Security Info=False';
      Connected := True;
      ADOQuery1.Open;
    end;
  end;
end;
Все прекрасно работает...
_SERGEYX_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
База в локальной сети(connectionstring) Абдуллаев Рустам БД в Delphi 11 18.12.2010 14:37
ConnectionString для FoxPro Cabyrc БД в Delphi 6 09.10.2009 11:31
C# .NET Подлкючение к БД (Connections, ConnectionString) NOOB Общие вопросы .NET 0 27.08.2009 18:11
Работа с Ado. ConnectionString. sashaslam БД в Delphi 1 17.09.2008 10:59
ADOConnection.connectionString AnnNet Общие вопросы Delphi 2 16.09.2008 09:31