首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何传递DataSet: TDataSet作为过程参数

如何传递DataSet: TDataSet作为过程参数
EN

Stack Overflow用户
提问于 2019-07-24 12:11:56
回答 1查看 347关注 0票数 1

我正在设置一个新过程,它将在执行查询后显示一条消息。我使用的是"AfterOpen“事件,其中必须传递"DataSet: TDataSet”参数。

代码语言:javascript
复制
procedure Tf_SeznamDluzniku.ShowInfoMessage(DataSet: TDataSet; info : string);
begin
  l_InfoMessage.Caption := info;
  img_success.Visible := True;
end;
代码语言:javascript
复制
query.AfterOpen := ShowInfoMessage(,'InfoMessage here')

请有人解释一下,DataSet变量是什么,作为第一个参数,我必须传递给过程什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-24 12:33:23

如果它附加到事件,则触发AfterOpen事件的是dataset。dataset本身将调用该过程,并在该参数中传递自己。

但是您添加了Info参数,这使得过程作为事件处理程序无效。你想要这些信息从哪里来?从数据集中?

因为它是一个事件处理程序,所以自己称它为事件处理程序是错误的。您可以这样做,只需传递nil (或特定的数据集),因为它无论如何都不被使用。但是您可能会陷入奇怪的情况,因为看起来这个方法只在打开之后才会被调用,但是后来发现它也会在其他情况下被调用。因此,最好创建一个单独的过程来执行您想做的事情,并从AfterOpen事件处理程序中调用它。您可以从数据集传递信息,但也可以从其他地方调用该过程,例如,在数据集打开之前提供一些初始标题:

代码语言:javascript
复制
// 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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57182644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档