簡體   English   中英

如何傳遞數據集:TDataSet作為過程參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM