【发布时间】:2015-07-29 04:47:48
【问题描述】:
我想将我自己的过程设置为动态查询中字段的 OnGetText 事件
我的程序是这样的:
procedure TMainFrm.MyFieldGetText(Sender: TField; var Text: String;
DisplayText: Boolean);
begin
...
end;
- “...Captions”是字符串数组常量
我在 ADOQuery 的 OnAfterOpen 事件中设置了事件处理程序:
procedure TImportFrm.ADOQueryAfterOpen(DataSet: TDataSet);
var
I : Integer;
begin
for I := 0 to ADOQuery.FieldCount - 1 do
ADOQuery.Fields[I].OnGetText := MainFrm.MyFieldGetText;
end;
但是打开 ADOQuery 后,没有 Text 可以显示,看起来 Text 值是空的!
我的程序做什么似乎并不重要,因为当我设置一个空程序(没有代码)时,也没有显示任何文本
出了什么问题?
谢谢...
【问题讨论】:
-
用调试器检查你的处理程序(在第一行设置断点)
-
谢谢,但正如我所说:“我的程序做什么似乎并不重要,因为当我设置一个空程序(没有代码)时,也没有显示任何文本”
-
是否要检查 Sender.FieldName 而不是 Sender.Name?
-
您的概念基本上是正确的。但是您的代码不安全。在
AfterOpen事件处理程序中引用DataSet和Self,而不是组件字段和全局表单变量。最好写for I := 0 to DataSet.FieldCount - 1 do DataSet.Fields[I].OnGetText := MyFieldGetText;。 -
你的结论是错误的。如果您为 OnGetText 分配一个过程,则您应对该值负责。因此,如果您分配一个空过程,则不会显示任何内容。所以问题可能出在程序上。