楼上的各位兄弟,别费力气了,ADOConnection对应的UDL文件实际就是一个INI文件,可以通过一个TINIFILE对象来直接读取啊其实你建立程序的时候就给ADOConnection指定他的ConnectionString属性,或者自己建立一个UDL文件(先建立一个文本文件,然后去DOS下改扩展名为UDL文件),然后双击打开DATA LINK PROPERTIES对话框,在里面编辑,最后你可以用NOTEPAD打开看看内容,就是一个INI文件,里面的那个连接字符串和CONNECTIONSTRING属性完全一致至于在程序中如何写,用下面的代码 procedure GetUserDataBaseConnection; var DBIni:TIniFile; begin DBIni:=TIniFile.Create; DBIni.LoadFromFile(...{the path of the udl file u just created here!}) ADOConnection1.ConnectionString:=DBIni.Text; //将取出的连接字符串赋给ADOConnection控件的相关属性 DBIni.Free; end;
楼上的各位的方法都很好,可如果对一个没用过文件的人来说,对其中的内容就不知道怎么写了,下面是我的方法:开始时你可以用ADOConnection控件边接到数据源,但不用激活它,然后在程序的OnCreate事件中写如下代码: var Ini: Tinifile; begin Ini :=Tinifile.Create(ExtractfilePath(Application.ExeName)+'yhwlScm.ini'); try ini.WriteString(StrRection,'Password',sc.getBlockStr(sc.GetBlockStr(ConnectionString,2,';'),2,'=')) ; ini.WriteString(StrRection,'User ID',sc.getBlockStr(sc.GetBlockStr(ConnectionString,4,';'),2,'=')) ; ini.WriteString(StrRection,'Initial Catalog',sc.getBlockStr(sc.GetBlockStr(ConnectionString,5,';'),2,'=')) ; ini.WriteString(StrRection,'Data Source',sc.getBlockStr(sc.GetBlockStr(ConnectionString,6,';'),2,'=')) ; finally Ini.Free; end; end; //代码中的Sc.getBlockStr是获取指定字符的前或后的一个字符串 这样当程序一运行系统就自动把要联系的相关信息写到yhwlScm.ini文件中了.当下次要读此文件时: var ini:Tinifile; Password,Userid,InitialCatalog,Server:string; begin result:=''; ini:=Tinifile.Create(ExtractfilePath(Application.ExeName)+'yhwlScm.ini'); try PassWord:=ini.readstring(StrSection,'Password',''); Userid:=ini.readstring(StrSection,'User ID',''); InitialCatalog:=ini.readstring(StrSection,'Initial Catalog',''); Server:=ini.readstring(StrSection,'Data Source',''); if (password='')and(userid='')and(InitialCatalog='')and(Server='') then result:='' else result:='Provider=SQLOLEDB.1;Password='+passWord+';Persist Security Info=True;User ID='+Userid+';Initial Catalog='+InitialCatalog+';Data Source='+Server; finally ini.free; end; end;
connectionstring:=看delphi自动生成的,根据下面的组合[DATABASE]
NAME=sa
PASSWORD=
SERVER= esu
DATABASE= crmtemp
[SQL Server]
ConnectString=Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=PSMDB;Data Source=TPfunction InitDBConnect :String;
var
Buff: array[0..255] of char;
WinDir: String;
FIni: TIniFile;
begin
GetWindowsDirectory(Buff, SizeOf(Buff));
WinDir := Buff; if FileExists(WinDir + '\database.ini') then
begin
FIni := TIniFile.Create(WinDir + '\database.ini');
try
Result := FIni.ReadString('SQL Server', 'ConnectString','');
finally
FIni.Free;
end;
end
else
raise ENotFindConfig.Create('找不到系统配置文件database.ini');
if Length(Result)= 0 then ENotFindConfig.Create('系统配置文件database.ini被破坏');
end;
procedure GetUserDataBaseConnection;
var
DBIni:TIniFile;
begin
DBIni:=TIniFile.Create;
DBIni.LoadFromFile(...{the path of the udl file u just created here!})
ADOConnection1.ConnectionString:=DBIni.Text; //将取出的连接字符串赋给ADOConnection控件的相关属性
DBIni.Free;
end;
var Ini: Tinifile;
begin
Ini :=Tinifile.Create(ExtractfilePath(Application.ExeName)+'yhwlScm.ini');
try
ini.WriteString(StrRection,'Password',sc.getBlockStr(sc.GetBlockStr(ConnectionString,2,';'),2,'=')) ;
ini.WriteString(StrRection,'User ID',sc.getBlockStr(sc.GetBlockStr(ConnectionString,4,';'),2,'=')) ;
ini.WriteString(StrRection,'Initial Catalog',sc.getBlockStr(sc.GetBlockStr(ConnectionString,5,';'),2,'=')) ;
ini.WriteString(StrRection,'Data Source',sc.getBlockStr(sc.GetBlockStr(ConnectionString,6,';'),2,'=')) ;
finally
Ini.Free;
end;
end;
//代码中的Sc.getBlockStr是获取指定字符的前或后的一个字符串
这样当程序一运行系统就自动把要联系的相关信息写到yhwlScm.ini文件中了.当下次要读此文件时:
var ini:Tinifile;
Password,Userid,InitialCatalog,Server:string;
begin
result:='';
ini:=Tinifile.Create(ExtractfilePath(Application.ExeName)+'yhwlScm.ini');
try
PassWord:=ini.readstring(StrSection,'Password','');
Userid:=ini.readstring(StrSection,'User ID','');
InitialCatalog:=ini.readstring(StrSection,'Initial Catalog','');
Server:=ini.readstring(StrSection,'Data Source','');
if (password='')and(userid='')and(InitialCatalog='')and(Server='') then result:=''
else
result:='Provider=SQLOLEDB.1;Password='+passWord+';Persist Security Info=True;User ID='+Userid+';Initial Catalog='+InitialCatalog+';Data Source='+Server;
finally
ini.free;
end;
end;
try
ADOConnection.connected:=true;
except
showmessage('数据库连接失败,请检查后重试!');
end
ConnectString=Provider=SQLOLEDB.1;Password=;Persist Security Info=false;User ID=sa;Initial Catalog=库名;Data Source=服务器名Function InitDBConnect : String;
var
DataBaseIniFile:TIniFile;
filename:string;
begin
filename:=ExtractFilePath(paramstr(0))+'INI\DataBase.ini';
if FileExists(filename) then
begin
DataBaseIniFile := TIniFile.Create(filename);
try
Result := DataBaseIniFile.ReadString('DataBase', 'ConnectString','');
finally
DataBaseIniFile.Free;
end;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
ADOConnection1.ConnectionString:=InitDBConnect;