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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2011, 21:51   #1
v.v.veter
Пользователь
 
Регистрация: 16.05.2011
Сообщений: 16
Вопрос Delphi работа с БД

Суть проблемы такова. Есть база данных access, подключение идет через ADOConnection1, изначально connectionstring
Код:
 Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Veter\Desktop\проект\diplombaza.mdb;Persist Security Info=False
, но пользователь может поменять его
Код:
procedure TConfigForm.Button2Click(Sender: TObject);
begin
DataModule1.ADOConnection1.ConnectionString :='Provider=Microsoft.Jet.OLEDB.4.0; Persist Security Info=False; Data Source='+Edit1.Text;
DataModule1.ADOConnection1.Connected :=true;
close;
end;
нужно, что-бы если пользователь поменял ConnectionString , то оно кудато сохронялось, и при следующем включении проги подключалось через него.
Хотелось бы сделать это через .ini , но не знаю как это сдалать.
Тоесть изначально в .ini должно быть прописано прописано типо этого
Код:
( Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Veter\Desktop\проект\diplombaza.mdb;Persist Security Info=False )
С .ini никогда не сталкивался, так что мало представляю как это делать.
Заранее благодарен.
v.v.veter вне форума Ответить с цитированием
Старый 06.06.2011, 23:26   #2
v.v.veter
Пользователь
 
Регистрация: 16.05.2011
Сообщений: 16
По умолчанию

нашел тут на форуме примерно ответ, сделал так,
Код:
procedure TForm1.FormCreate(Sender: TObject);
var ini: TINIFile;
begin
  ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'C:\Users\Veter\Desktop\проект\conf\config.ini');
  DataModule1.ADOConnection1.Connected := False;
  DataModule1.ADOConnection1.ConnectionString :='Provider=Microsoft.Jet.OLEDB.4.0; Persist Security Info=False; Data Source='+
 ini.ReadString('Option', 'ConString', '');
  DataModule1.ADOConnection1.Connected := True;
  ini.Free;
  DataModule1.ADOQuery1.Open;
end;
но теперь вылетает с ошибкой.
Код:
Access violation at address 00562BB1 in module 'proj.exe'.
 Read of address 00000060'. Process proj.exe
подскажите где ошибка?
v.v.veter вне форума Ответить с цитированием
Старый 06.06.2011, 23:58   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вместо
Цитата:
Код:
  ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'C:\Users\Veter\Desktop\проект\conf\config.ini');
пробуйте
Код:
  ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'config.ini');
ну и config.ini должен быть рядом с EXEшником Вашей программы...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.06.2011, 01:35   #4
v.v.veter
Пользователь
 
Регистрация: 16.05.2011
Сообщений: 16
По умолчанию

вроде заработало, спасиб. Но есть вопрос. Как сделать чтобы если пользователь менял место подключении базы, то это вносилось в ini
Код:
procedure TConfigForm.Button2Click(Sender: TObject);
begin
Form1.ADOConnection1.ConnectionString :='Provider=Microsoft.Jet.OLEDB.4.0; Persist Security Info=False; Data Source='+Edit1.Text;
Form1.ADOConnection1.Connected :=true;
// и тут бы еще вносилось изменение в ини
close;
end;
в ини такой текст
Код:
[Option]
ConString=C:\Users\Veter\Desktop\проект\diplombaza.mdb
тоесть все что попадает в Edit1.Text писалось бы в ини

Последний раз редактировалось v.v.veter; 07.06.2011 в 01:39.
v.v.veter вне форума Ответить с цитированием
Старый 07.06.2011, 11:34   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

да очень просто, на закрытие формы (событие OnClose) повесить примерно такой код:
Код:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  AppIniFile: TIniFile;
begin
  try
    AppIniFile := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'config.ini');
    AppIniFile.WriteString('Option', 'ConString', Edit1.Text);
  finally
    FreeAndNil(AppIniFile);
  end;
end;
p.s. в принципе, можно писать в INI и при нажатии на Button2Click

p.p.s. на событии создания формы весьма неплохо читать этот параметр из INI в Edit1.Text
сразу будет видно, какое соединение открылось при запуске приложения...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.06.2011, 11:40   #6
Jaguar83
Профессионал
Пользователь
 
Аватар для Jaguar83
 
Регистрация: 25.05.2011
Сообщений: 91
По умолчанию

Упс.. пока писал сообщение уже ответили...

procedure TForm1.FormDestroy(Sender: TObject);
var ini: TIniFile;
begin
ini := TIniFile.Create(ExtractFilePath(App lication.ExeName) + 'config.ini');
ini.WriteString('Option','ConString ',Form1.ADOConnection1.ConnectionSt ring); //или Edit1.Text
ini.Free;
end;
end.
Помог? Будь человеком - жми на весы слева!
Jaguar83 вне форума Ответить с цитированием
Старый 08.06.2011, 23:15   #7
v.v.veter
Пользователь
 
Регистрация: 16.05.2011
Сообщений: 16
По умолчанию

Спасиб всем! Нета не было, уже сам примерно такое написал.
v.v.veter вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа в Delphi Zyblik Помощь студентам 4 26.04.2011 20:14
Работа в Delphi sosisovich Помощь студентам 8 21.04.2011 19:33
Лабораторная работа на Delphi №5 (Delphi) iron_cross Помощь студентам 3 30.12.2010 09:50