gpt4 book ai didi

delphi - 填充监 window 口中的所有字段值

转载 作者:行者123 更新时间:2023-12-03 18:14:11 25 4
gpt4 key购买 nike

在调试我的 Delphi 应用程序期间,我需要获取许多数据库字段外键值,以便在调试存储过程行为时使用它们。字段太多了,所以我想知道是否有更快的方法来获取这些值,比如将它们全部填充到监 window 口中,而不是为我需要监视的每个字段都编写一个表达式。

换句话说,我需要查看多个表的所有字段值。我不需要所有这些,但我可以轻松地从这样的列表中选择我需要的。

目前我正在写这样的 watches 表达式:

<data module>.<Table Component>.fieldbyname('Field_Name').asinteger

最佳答案

不是真的。如果没有一些代码设置,则无法通过循环来设置监视,也无法以任何方式同时在多个数据库字段上设置监视。

在 Delphi 2010 及更高版本中,您可以编写自己的 debugger visualizer (请参阅有关 External-Viewer Visualizers 的部分)为您提供自定义 View ,但这将是一项相当广泛的任务。 ($(BDS)\Source\Visualizers 文件夹中提供了一个示例;外部查看器是 StringListViewer。)

您可以创建持久字段以简化将它们添加到监 window 口的过程(双击表格组件并选择Add Field...Add All Fields),然后您可以将它们引用为 datamodule.tablefield.AsInteger

或者,您可以将字段分配给单独的局部变量,然后只观察它们):

var
AField: TField;
AnotherField: TField;
begin
AField := dm.TableA.FieldByName('FieldA');
AnotherField := dm.TableA.FieldByName('FieldB');
...
end;

然后将 watch 设置为 AField.AsInteger,这样可以稍微加快 watch 的设置速度。

(出于非调试目的,声明本地 TField 变量并在循环之前设置它们可以通过使用 FieldByName 删除字段的常量查找来大大加快代码速度>.)

另一种可能性是声明并使用您在循环中分配的局部变量,然后您可以观察该局部变量:

var
FieldAValue: Integer;
FieldA: TField;
begin
FieldA := dm.TableA.FieldByName('FieldA');
while not dm.TableA.Eof do
begin
FieldAValue := FieldA.AsInteger;
// Use FieldAValue here instead of the Field.AsInteger, so the
// compiler doesn't eliminate it. You can add a watch by right-clicking
// FieldAValue and choosing Debug->Add watch at cursor or Ctrl+F5.
TableA.Next;
end;
end;

关于delphi - 填充监 window 口中的所有字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17479497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com