[英]How to pass DataSet: TDataSet as procedure parameter
我正在設置一個新的過程,該過程將在執行查詢后顯示一條消息。 我正在使用“ AfterOpen”事件,我必須傳遞“ DataSet:TDataSet”參數。
procedure Tf_SeznamDluzniku.ShowInfoMessage(DataSet: TDataSet; info : string);
begin
l_InfoMessage.Caption := info;
img_success.Visible := True;
end;
query.AfterOpen := ShowInfoMessage(,'InfoMessage here')
有人可以向我解釋一下什么是DataSet變量,什么是我必須作為第一個參數傳遞給過程的?
如果它附加到事件,則是觸發AfterOpen事件的數據集。 數據集本身將調用該過程,並在該參數中傳遞自身。
但是您添加了Info參數,這使該過程作為事件處理程序無效。 您想從哪里獲得這些信息? 從數據集中?
由於它是事件處理程序,因此您自己調用它是一種不好的做法。 您可以做到這一點,只需傳遞nil
(或特定的數據集),因為無論如何都不會使用它。 但是您可能會遇到一些奇怪的情況,因為看起來該方法僅在打開后才被調用,但是事實證明,在其他場合也被調用。 因此,最好制作一個單獨的過程來執行所需的操作,然后從AfterOpen事件處理程序中調用該過程。 您可以傳遞數據集中的信息,但也可以從其他地方調用該過程,例如提供一些初始標題,直到打開數據集:
// The procedure doesn't need the dataset, only the info to set.
procedure Tf_SeznamDluzniku.ShowInfoMessage(Info : string);
begin
l_InfoMessage.Caption := info;
end;
// The actual event handler for YourDataset.OnAfterOpen (you have to attach them)
// This can set the info, and/or maybe set the success indicator right away..
procedure Tf_SeznamDluzniku.YourDataSetAfterOpen(DataSet: TDataSet);
begin
ShowInfoMessage(DataSet.FieldByName('info').AsString);
img_success.Visible := True;
end;
// For demonstration, another event handler for showing the form, to put in some initial caption.
procedure Tf_SeznamDluzniku.FormShow(const Sender: TObject);
begin
ShowInfoMessage('Loading...');
end;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.