如何传递数据集:TDataSet作为过程参数

时间:2019-07-24 12:11:56

标签: delphi tdataset

我正在建立一个新的过程,该过程将在执行查询后显示一条消息。我正在使用“ 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变量,以及我必须作为第一个参数传递给该过程的什么?

1 个答案:

答案 0 :(得分:1)

如果它附加到事件,则是触发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;