各位大侠:
小弟想要实现的功能:根据我自定义的AliasName, ServerName, DataBaseName, UserName, PassWord,在BDE自动创建一个别名系统,然后在delphi查询我的别名数据库代码如下:
procedure TForm1.btn1Click(Sender: TObject);
var
BDE_Alias,Ser_name,dat_name,Use_name,Pas_word:string;
DataParams:TStringList;//字符串列表
begin
Ser_name:=edt1.Text; //服务器名
dat_name:=edt2.Text; //数据库名 路径
Use_name:=edt3.Text; //数据库用户登录名
Pas_word:=edt4.Text; //数据库用户登录密码
BDE_Alias:=edt5.Text; // Aliasname
DataParams:=TStringList.Create;
try
DataParams.Clear;
DataParams.Add('SERVER NAME='+ser_name);//服务器名或者IP
DataParams.Add('DATABASENAME='+dat_name);
DataParams.Add('USER NAME='+Use_name);
DataParams.Add('PASSWORD='+Pas_word);
if session.IsAlias(bde_alias) then
begin
session.ModifyAlias(bde_alias,dataparams);
end
else
begin
Session.AddAlias(bde_alias,'MSSQL',dataparams);
end;
Session.SaveConfigFile;
except;
DataParams.Free;
exit;
end;
DataParams.Free;
db1.Connected:=False;
db1.Params.Values['USERNAME']:=Use_name;
db1.Params.Values['PASSWORD']:=Pas_word;
db1.LoginPrompt:=False;
db1.Connected:=True; //连不上 qry1.DatabaseName:=db1.databasename;
qry1.Close;
qry1.SQL.Clear;
qry1.SQL.Add('select * from books');
qry1.Open;
qry1.Active:=True;
end;
上面代码就是连接不上BDE,在db1.connect:=true就报错,意思是连不上,,请求各位高手指点一下小弟,怎么用代码去实现这个功能;
小弟想要实现的功能:根据我自定义的AliasName, ServerName, DataBaseName, UserName, PassWord,在BDE自动创建一个别名系统,然后在delphi查询我的别名数据库代码如下:
procedure TForm1.btn1Click(Sender: TObject);
var
BDE_Alias,Ser_name,dat_name,Use_name,Pas_word:string;
DataParams:TStringList;//字符串列表
begin
Ser_name:=edt1.Text; //服务器名
dat_name:=edt2.Text; //数据库名 路径
Use_name:=edt3.Text; //数据库用户登录名
Pas_word:=edt4.Text; //数据库用户登录密码
BDE_Alias:=edt5.Text; // Aliasname
DataParams:=TStringList.Create;
try
DataParams.Clear;
DataParams.Add('SERVER NAME='+ser_name);//服务器名或者IP
DataParams.Add('DATABASENAME='+dat_name);
DataParams.Add('USER NAME='+Use_name);
DataParams.Add('PASSWORD='+Pas_word);
if session.IsAlias(bde_alias) then
begin
session.ModifyAlias(bde_alias,dataparams);
end
else
begin
Session.AddAlias(bde_alias,'MSSQL',dataparams);
end;
Session.SaveConfigFile;
except;
DataParams.Free;
exit;
end;
DataParams.Free;
db1.Connected:=False;
db1.Params.Values['USERNAME']:=Use_name;
db1.Params.Values['PASSWORD']:=Pas_word;
db1.LoginPrompt:=False;
db1.Connected:=True; //连不上 qry1.DatabaseName:=db1.databasename;
qry1.Close;
qry1.SQL.Clear;
qry1.SQL.Add('select * from books');
qry1.Open;
qry1.Active:=True;
end;
上面代码就是连接不上BDE,在db1.connect:=true就报错,意思是连不上,,请求各位高手指点一下小弟,怎么用代码去实现这个功能;
db1.Connected:=False;
db1.Params.Values['USERNAME']:=Use_name;
db1.Params.Values['PASSWORD']:=Pas_word;
db1.LoginPrompt:=False;
db1.Connected:=True; //连不上
=================================
db1.Close;
db1.Params.Values['USERNAME']:=QuotedStr(Use_name);
db1.Params.Values['PASSWORD']:=QuotedStr(Pas_word);
db1.LoginPrompt:=False;
db1.Open; //连不上
大侠,,还是连不上,,
database 控件是不是要设置什么属性的?
下面是我以前采用的代码供你参考:
dbalia 是别名procedure Tfrmmain.ckbde;
var
isbdeexist: boolean;
ap: TStringlist; {字符串列表变量}
begin
isBDEExist := (dbiInit(nil) = 0);
// showmessage(Session.GetAliasParams['MyAlias'].values['PATH']);
ap := TStringlist.Create;
if isbdeexist then
begin
try
Session.GetAliasNames(ap); {取得别名列表}
if (ap.IndexOf(dbalia) = -1) then
begin
Session.AddStandardAlias(dbalia, dbpath, 'Paradox');
// Session.SaveConfigFile;
end
else
begin
Session.DeleteAlias(dbalia);
Session.AddStandardAlias(dbalia, dbpath, 'Paradox');
end;
Session.NetFileDir := dbpath; except
ap.Free;
end;
end
else
begin
if dm1.IsAdmin then
begin
if
application.messagebox('BDE初始失败!可能其它程序破坏了BDE,要更正吗?',
'出错', MB_YESNOCANCEL + MB_ICONWARNING) = IDYES then
begin
doreg := true;
dm1.regbde;
ckbde;
end;
end
else
begin
messagebox(application.Handle,
'BDE初始失败!可能其它程序破坏了BDE,需要以系统管理员身份先运行此程序',
'提示', mb_ok + mb_iconerror); end;
end;
ap.Free;
end;
procedure Tdm1.regbde;
var
reg: Tregistry;
regpath: string;
begin
regpath := extractfilepath(application.ExeName) + 'bde';
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
if (Reg.OpenKey('\Software\Borland\Database Engine', false) = False) or doreg
then
begin
{ if not IsAdmin then
begin
messagebox(application.Handle,'需要以系统管理员身份先运行此程序','提示',mb_ok+mb_iconerror);
reg.CloseKey;
reg.Free;
exit;
end; }
reg.CreateKey('\Software\Borland\Database Engine');
Reg.OpenKey('\Software\Borland\Database Engine', true);
reg.WriteString('DLLPATH', regpath);
reg.CloseKey;
isreg := true;
end;
Reg.RootKey := HKEY_LOCAL_MACHINE;
if (reg.OpenKey('\Software\Borland\BLW32', false) = False) or doreg then
begin
{ if not IsAdmin then
begin
messagebox(application.Handle,'需要以系统管理员身份先运行此程序','提示',mb_ok+mb_iconerror);
reg.CloseKey;
reg.Free;
exit;
end; }
reg.CreateKey('\Software\Borland\BLW32');
reg.OpenKey('\Software\Borland\BLW32', true);
reg.WriteString('BLAPIPATH', regpath);
isreg := true;
end;
finally
reg.CloseKey;
reg.Free;
end;end;procedure Tdm1.removereg;
var
reg: Tregistry;
regpath: string;
begin
regpath := extractfilepath(application.ExeName) + 'bde';
if not isreg then
exit; Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE; if Reg.OpenKey('\Software\Borland\Database Engine', false) = true then
begin
reg.DeleteKey('\Software\Borland\Database Engine');
end;
Reg.RootKey := HKEY_LOCAL_MACHINE;
if reg.OpenKey('\Software\Borland\BLW32', false) = true then
begin
reg.DeleteKey('\Software\Borland\BLW32');
end;
finally
reg.CloseKey;
reg.Free;
end;end;