以下是我经常用到的和数据库建立连接时用的动态别名的方法,是完全可行的!
这是一个完整的示例,可以从中节选你所需部分
//注
ata_Win是一个数据窗口,放了一个database和Session
procedure TData_Win.Data_WinCreate(Sender: TObject);
var
NewAlias:TStringList;
InitFile:TIniFile;
ls_InitStr:String;
begin
//构建一个全局会话,建立数据库参数
try {except} {截获数据库错误:不能连接和打开数据库}
NewAlias:=TStringList.Create;
//引入ODBC数据源,这一部分是放在配置文件里的
InitFile:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'test.ini');
gs_dbname:=InitFile.ReadString('ODBCDSN','DB_Name','test');
ls_InitStr:=InitFile.ReadString('ODBCDSN','DSN','testalias');
gs_LoginId:=InitFile.ReadString('ODBCDSN','LoginId','123');
InitFile.Free;
try {finally}
if not Session.IsAlias('test') then
begin
NewAlias.Add('USER NAME='+gs_LoginId);
NewAlias.Add('DATABASE NAME='+gs_dbname);
NewAlias.Add('ODBC DSN='+ls_InitStr);
Session1.AddAlias('test','SQL Server',NewAlias);
end;
Finally
NewAlias.Free;
end;
with Session1 do
begin
Open;
end;
with Database do
begin
//确定数据库,输入别名
AliasName:='test';
SessionName:='Session_1';
DatabaseName:= gs_dbname;
LoginPrompt:=False;
Params.Values['USERID']:=gs_LoginId; //读配置文件所得用户名
Params.Values['PASSWORD']:=gs_Pwd; //读配置文件所得密码
//连接并打开数据库
Database.Open;
end;
except
application.MessageBox('不能连接和打开数据库,请检查网络连接和配置文件是否正确!','数据库错误提示!',mb_ok);
application.Terminate;
end;
end;
procedure TData_Win.Data_WinDestroy(Sender: TObject);
begin
Database.Close;
Session1.DeleteAlias('test');
end;
procedure TData_Win.DatabaseLogin(Database: TDatabase;
LoginParams: TStrings);
begin
LoginParams.Add('USER NAME='+gs_LoginId);
LoginParams.Add('Password='+gs_Pwd);
end;