各位大俠:
小弟想要實作的功能:根據我自定義的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就報錯,意思是連不上,,請求各位高手指點一下小弟,怎么用代碼去實作這個功能;
uj5u.com熱心網友回復:
沒有看到你EXCEPTION截圖,試下這個: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; //連不上
uj5u.com熱心網友回復:
大俠,,還是連不上,,
uj5u.com熱心網友回復:
大俠,,還是連不上,,

database 控制元件是不是要設定什么屬性的?
uj5u.com熱心網友回復:
為什么非要用bde,在xe7最新版已經拋棄bde了,所以建議你別研究bde了,直接用ADO組件套。uj5u.com熱心網友回復:
我覺得也是,用BDE的話 寫好程式 每個客戶端都要配置BDE才能運行程式。還不如直接ADO呢。uj5u.com熱心網友回復:
截個Exception 圖上來吧uj5u.com熱心網友回復:
別糾結了, 直接上ADO吧~uj5u.com熱心網友回復:
BDE早就被淘汰了,N年以前用過,建議用ADO。下面是我以前采用的代碼供你參考:
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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/82168.html
標籤:數據庫相關
上一篇:獲取當前jdbc連接的資料庫名稱
