我需要在调试我的Delphi应用程序时获取许多数据库字段的外键值,以便在调试存储过程行为时使用它们.字段是如此之多,所以我想知道是否有更快的方法来获取这些值,如将所有这些值填充到监视窗口而不是为我需要观察的每个字段编写表达式.
换句话说,我需要查看几个表的所有字段值.我不需要所有这些,但我可以从这样的列表中轻松选择我需要的东西.
目前我正在编写这样的手表表达式:
<data module>.<Table Component>.fieldbyname('Field_Name').asinteger
Run Code Online (Sandbox Code Playgroud)
并不是的.如果没有一些代码设置,就无法循环设置监视或任何方式在多个数据库字段上设置监视.
在Delphi 2010及更高版本中,您可以编写自己的调试器可视化工具(请参阅上一节External-Viewer Visualizers)为您提供自定义视图,但这将是一项非常广泛的任务.($(BDS)\Source\Visualizers文件夹中提供了一个示例;外部查看器是StringListViewer.)
您可以创建持久字段以简化将它们添加到监视窗口(双击表组件并选择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;
Run Code Online (Sandbox Code Playgroud)
然后将手表设置为开启AField.AsInteger,这样可以加快设置手表的速度.
(对于非调试目的,声明局部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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
215 次 |
| 最近记录: |