gpt4 book ai didi

delphi - 在运行时向查询添加计算字段

转载 作者:行者123 更新时间:2023-12-03 14:39:44 26 4
gpt4 key购买 nike

我正在使用 Delphi 中的查询获取数据,并且希望在查询运行之前向查询添加计算字段。计算字段使用代码和查询中的值,因此我不能只在 SQL 中计算它。

我知道我可以附加一个 OnCalcFields 事件来实际进行计算,但问题是添加计算字段后,查询中没有其他字段...

我做了一些挖掘,发现所有字段定义都已创建,但仅创建了实际字段

if DefaultFields then
CreateFields

指定默认字段

procedure TDataSet.DoInternalOpen;
begin
FDefaultFields := FieldCount = 0;
...
end;

这表明如果您添加字段,您只会获得您添加的字段。

我想要查询中的所有字段以及我添加的字段。

这可能吗?还是我必须添加我正在使用的所有字段?

最佳答案

没有什么可以阻止您首先在代码中创建所有字段,
然后添加您的计算字段。

您可以使用“黑客类型”来使用 protected CreateFields:

type
THackQuery = class(TADOQuery)
end;
[...]
MyQuery.FieldDefs.Update;
THackQuery(MyQuery).CreateFields;

或者从 CreateFields 借用一些代码:

  MyQuery.FieldDefs.Update;
// create all defaults fields
for I := 0 to MyQuery.FieldDefList.Count - 1 do
with MyQuery.FieldDefList[I] do
if (DataType <> ftUnknown) and not (DataType in ObjectFieldTypes) and
not ((faHiddenCol in Attributes) and not MyQuery.FIeldDefs.HiddenFields) then
CreateField(Self, nil, MyQuery.FieldDefList.Strings[I]);

然后创建计算字段:

  MyQueryMyField := TStringField.Create(MyQuery);
with MyQueryMyField do
begin
Name := 'MyQueryMyField';
FieldKind := fkCalculated;
FieldName := 'MyField';
Size := 10;
DataSet := MyQuery;
end;

关于delphi - 在运行时向查询添加计算字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2523697/

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