2010-10-06 58 views
0

我在Delphi 7中使用TADOQuery
在構造函數中,我調用ADOQuery.openADOQuery在構造函數後關閉

爲什麼ADOQuery在表單外調用另一個函數時會關閉?

constructor TClass1.Create(AOwner: TComponent; 
    MyParam: TProgramParam); 
begin 
    inherited; 
    ADOQuery.Open; 
    ADOQuery.Locate('fieldName',Param,[]); 
end; 
+1

您必須提供一些信息。就像什麼時候調用什麼函數一樣,在什麼形式之外? 'Class1'在哪裏得到'ADOQuery',因爲它沒有創建它?等等。 – 2010-10-06 17:45:00

回答

4

我的建議尋找誰是關閉數據集:

創建用於AdoQuery的BeforeClose事件的新事件處理程序,把任何被編譯並執行只是把一個斷點。例如:

procedure TfrmCreDocCredito.cdsSucursalesBeforeClose(DataSet: TDataSet); 
begin 
    ShowMessage('Closing!!'); 
end; 

運行程序,執行到創建類的實例需要用戶進行任何操作和斷點程序停止的時候,你要檢查調用堆棧的機會。它會揭示誰,如果你想一點,你會發現爲什麼數據集正在關閉。如果你的斷點沒有觸發,我打賭數據集從未真正打開過。

此致敬禮。

+0

這是一個天才的想法,我抱着自問,怎麼沒有想到我自己:)謝謝。 – none 2010-10-07 14:11:15

0
constructor TClass1.Create(AOwner: TComponent; 
    MyParam: TProgramParam); 
begin 
    inherited; 
    ADOQuery.Open; 
    ADOQuery.Locate('fieldName',Param); 
end; 

// 

constructor TClass1.Create(AOwner: TComponent; 
    MyParam: TProgramParam); 
begin 
    inherited; 
    ADOQuery.Open; 
    ADOQuery.Locate('fieldName',Param,[]); 
end; 
+3

我在*答案*中看不到這一點。如果您試圖在'Locate'中提示缺少第三個參數,請改爲發佈* comment *。 – kobik 2013-05-22 10:59:19