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

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

Формирование ConnectionString при старте программы [D7, Access]


prisoner849 ©   (2006-06-01 16:37:00) 

Доброго времени суток!
Вопрос: подскажите, что нужно сделать, чтобы при старте программы формировалась ConnectionString и путь к базе брался из либо реестра, либо какого-нить *.cfg или *.ini.
Как работать с реестром и с файлами данного формата - знаю.
Получается, что при формировании строки и попытке подключиться к БД - выходит сообщение об ошибке... чччерт! уже вторую неделю с этим вожусь.
Помогите, плиз, хоть советом, хоть делом...
Заранее спасибо.


sniknik   (2006-06-06 00:40:00) [1]

описаны в справке по конкретному OLE DB провайдеру, разние и для разного.
для jet описание в разделе "OLE DB Provider for Microsoft Jet" справки мсофиса ADO210.CHM.

причем не все они только для открытия конекта, есть например еще указываюшие тип/свойства новой базы создаваемой CompactDatabase... (т.е. эти и подобные в строке для подключенияну, как минимум лишние)


Галинка   (2006-06-05 23:43:00) [2]

А зачем нужны расширенные свойства?


sniknik   (2006-06-04 09:44:00) [3]

> при запуске выводи "Autentification failed" :(
это типа неверный логин/пароль... но у тебя это скорее всего от намешаной кучи абсолютно ненужных параметров в строке, ты знаеш что каждый означает/почему  используется и зачем именно ты его устанавливаеш?

достачно будет
mdlMain.mainConn.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;'+
                                                    'Data Source=+ConnStr+';'+
                                                    'Persist Security Info=False';

если идентификация не пройдет и по этой строке, то тогда у тебя база или юзер под паролем.


eJack   (2006-06-04 06:45:00) [4]

www.connectionstrings.com
Там все найдешь !


prisoner849   (2006-06-04 02:03:00) [5]

Делаю так:

procedure TmdlMain.DataModuleCreate(Sender: TObject);
var
 IniChoice: TiniFile;
 ConnStr: widestring;
begin
 IniChoice:=TIniFile.Create(ChangeFileExt(Application.ExeName,'.ini'));
   try
       ConnStr:=IniChoice.ReadString('ConnOptions','ConnSrting','');
     finally
       iniChoice.Free;
   end;
 mdlMain.mainConn.Connected := False;
 mdlMain.mainConn.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;'+
                                      'Password="";User ID=Admin;'+
                                      'Data Source='+ConnStr+';'+
                                      'Mode=Share Deny None;Extended Properties="";'+
                                      '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:Don''t Copy Locale on Compact=False;'+
                                      'Jet OLEDB:Compact Without Replica Repair=False;'+
                                      'Jet OLEDB:SFP=False';
 mdlMain.mainConn.Connected := True;
end;


при запуске выводи "Autentification failed" :(


AlexWlad   (2006-06-02 18:58:00) [6]


> ЮЮ ©   (02.06.06 03:32) [7]


Ну дык примерже.


isasa   (2006-06-02 10:40:00) [7]

Из ini, конечно хорошо, но неплохо бы "уметь" динамически переподкльчаться к набору из самой программы.
А то, править ini, не очень элегантно.

Смотрим тут.

{$Delphi}\Source\Property Editors\AdoConEd.pas
function EditConnectionString(Component: TComponent): Boolean;
или тут
{$Delphi}\Source\Vcl\ADODB.pas
function PromptDataSource(ParentHandle: THandle; InitialString: WideString): WideString;


ЮЮ   (2006-06-02 03:32:00) [8]

Галинка ©   (01.06.06 23:32) [6]
У меня вот так:
     

Не... Выше - круче :)                    
  'Password=111;'                            
  'User ID=sa;'+


Галинка   (2006-06-01 23:32:00) [9]

У меня вот так:

procedure TZemlDM.Reconnect(MDBFileName:string);
begin
with ADOConnection1 do
 begin
  Close;
  LoginPrompt:=False;
  ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;'+
                            'Data Source='+MDBFileName+
                            ';Mode=ReadWrite;'+
                            'Persist Security Info=False';
  KeepConnection:=true;
  Open;
 end;
end;


Anatoly Podgoretsky   (2006-06-01 23:03:00) [10]

Rule ©   (01.06.06 17:24) [2]
Конкретно - черт


AlexWlad   (2006-06-01 19:43:00) [11]

Пример для MS SQL, но думаю, разберешься.
AC_WF - TADOConnection.


procedure TDM_ProjVisa.DataModuleCreate(Sender: TObject);
Var
  ComputerName: array [0..100] of Char;
  Size: Cardinal;
  CName, Server, Base : String;
  fi: TIniFile;
begin
    fi := TIniFile.Create(ExtractFilePath(Application.EXEName)+'Arch.ini');
    Server := fi.ReadString('ProjVisa', 'Server', 'ERROR');
    Base   := fi.ReadString('ProjVisa', 'WF_base', 'ERROR');
    Size := SizeOf(ComputerName);
    GetComputerName(ComputerName, Size);
    CName := StrPas(ComputerName);
    AC_WF.Connected := False;
    AC_WF.ConnectionString := 'Provider=SQLOLEDB.1;'+
                              'APP=WF_ProjVisa;'+
                              'Password=111;'+
                              'Persist Security Info=True;'+
                              'User ID=sa;'+
                              'Initial Catalog='+Base+';'+
                              'Data Source='+Server+';'+
                              'Use Procedure for Prepare=1;'+
                              'Auto Translate=True;'+
                              'Packet Size=4096;'+
                              'Workstation ID='+CName+';'+
                              'Use Encryption for Data=False;'+
                              'Tag with column collation when possible=False';
    AC_WF.Connected := True;
end;


prisoner849   (2006-06-01 17:53:00) [12]

2 Johnmen
Неплохой орех может получиться...:)


Rule   (2006-06-01 17:24:00) [13]

а что конкретно выходит ??? :-)))


Johnmen   (2006-06-01 16:48:00) [14]


> выходит сообщение об ошибке... чччерт!


Первый раз вижу такое сообщение!


Наверх

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