【发布时间】:2015-07-10 04:42:45
【问题描述】:
这听起来可能很愚蠢,我可能会遗漏一些重要的东西,但它就是这样。
我正在将旧软件从 BDE 迁移到 Firedac,我注意到一些奇怪的行为(XE6 VCL - Firedac)。
想象一下:
我们有一个具有简单 sql (SQL1) 的查询,该查询是在设计时定义的,并检索了所有字段(3 个字段 - cod、des 和 img)。在运行时,我执行此查询,并检查 cod 字段大小,效果很好。然后我更改 sql(SQL2) 并继续检查新的 cod 字段大小,这也有效。但是,如果我再次将 sql 更改为 SQL1 并检查 cod 字段的大小,它假定第二个查询字段大小的大小相同。
我在一个小项目中测试过,也出现了这种情况,如下。
(我放置了 2 个按钮和一个标签来检查尺寸)
procedure TForm1.SQL1Click(Sender: TObject);
begin
FDQuery1.Close;
FDQuery1.SQL.Clear;
FDQuery1.SQL.Text:='select grefcod as cod, grefdesc as des, grefimg as img from wtv';
FDQuery1.Open;
sLabelFX1.Caption:=IntToStr(FDQuery1.FindField('COD').Size);
end;
procedure TForm1.SQL2Click(Sender: TObject);
begin
FDQuery1.Close;
FDQuery1.SQL.Clear;
FDQuery1.SQL.Text:='select ATRBcod as cod, ATRBdes as des from wtv2 ';
FDQuery1.Open;
sLabelFX1.Caption:=IntToStr(FDQuery1.FindField('COD').Size);
end;
首先我调用 SQL1Click,cod 大小为 20;
第二次调用 SQL2Click,cod 大小为 5;
最后,我再次调用 SQL1Click 并且 cod 大小为 5 -> 错误。
编辑:SQL1 cod 的实际大小是 20 varchar,SQL2 的实际大小是 5 varchar。
这很奇怪,如果我不能更好地解释它,我很抱歉。 无论如何,如果我在设计时删除检索到的字段,问题就不存在了,我只需要更改获取字段的方式,但由于这是一个巨大的软件,这不是我想做的事情。
【问题讨论】:
标签: delphi delphi-xe6 firedac bde