D6的ADOExpress Bug?說了你不信,最好還有人測試一下 (100分)

  • 主题发起人 主题发起人 lynu
  • 开始时间 开始时间
L

lynu

Unregistered / Unconfirmed
GUEST, unregistred user!
我要在程序中做一個數據庫備份/恢復(服務器端)的功能,但結果未能成功,因為他老是提示
數據庫在使用中.
有人肯定要說只要關閉所有連接就行了,但我早就這樣做了,而我最后做了二個測試程序測試,
我認為ADOExpress的問題.

ADOConnection1連接到數據庫master,ADOQuery1連接到ADOConnection1,執行恢復數據庫
test的工作
ADOConnection2連接到數據庫test

procedure TNFrm.BitBtn2Click(Sender: TObject);
begin
ADOConnection2.Connected:=true;
ADOConnection2.Connected:=false;
//ADOConnection2.Free;也無作用.
end;

procedure TNFrm.BitBtn1Click(Sender: TObject);
var
ok:boolean;
begin
ok:=true;
ADOConnection1.Connected:=true;
try
ADOQuery1.ExecSQL
except
on E:exception do
begin
ok:=false;
ShowMessage('恢復數據庫失敗'+e.Message);
end
end;
if ok then ShowMessage('恢復成功');
end;

測試:在未執行
ADOConnection2.Connected:=true;
ADOConnection2.Connected:=false;
前,恢復數據庫可以成功,而一旦執行了這二句,那么再執行恢復就會提示數據庫在使用
但程序退出后重進可以恢復成功.
也就是說一旦打開過一個連接,即使關閉這個ADOConnection,事實上在程序退出前,
此程序與此數據庫還是一直連接著的.即使你將他連接到另外的一個數據庫或者將這個
ADOConnection Free掉,他與前一個數據庫也是一直連接著的!
我將二個ADOConnection的keepConnection設置為false/true,結果都一樣!
我用同一個ADOConnection,通過轉換當前數據,測試的結果與前面相同.

d6 UpdatePack2+SQLServer200,MDAC2.6,
D6除了UpdatePack1/2,有沒有其他補丁?
是delphi的問題還是ado的連接緩沖池的影響?

 
你的例子我也没试,不过你可以直接使用ado原生对象试试看,
如果没有这个问题,那就是adoexpress的问题,反之不是的.
 
呵,D5也一樣,應該是ADO本身的問題,我過去做去SQLServer與Interbase與測試
發現第一次連接時間二者差不多而第二次ado+SQLServer的連接時間為0,而interbase
的第二次連接與第一次差不多,說明ADO緩沖池事實上還保存著前次連接

我現在把恢復功能做在主程序中,但真正開始恢復時,就關閉了主程序,調用另外的
單獨的恢復程序來恢復數據庫,完畢后再調用主程序.
 
接受答案了.
 
后退
顶部