当从Delphi 7调用外部dll时,TClientDataSet中缺少字段错误

时间:2012-09-17 13:56:55

标签: delphi delphi-7 delphi-xe2 dbexpress tclientdataset

我在Delphi XE2中创建了一个DLL,它使用DB Express和TClientDataSet来显示数据库网格中的连接结果。有一个简单的函数可以启动/显示导出的表单,以便在其他应用程序中使用。执行查询,并在FormActivate上填充网格。

当我调用函数从单独的Delphi XE2应用程序显示表单时,一切运行正常 - 没有我能找到的问题。

但是,当我从一个单独的Delphi 7应用程序调用相同的函数时,我收到一个错误,即TClientDataSet无法从连接中找到字段。

例如,数据返回如下:

[dbxds == TSQLDataSet
 cds == TClientDataSet]

dbxds.commandtext='select s.sfield1, s.sfield2, t.tfield1, t.tfield2 from s left join t on s.sfield1 = t.tfield1';

cds.Open;

cds.fieldByName(sfield2).visible:=false;//to hide from a dbgrid
cds.fieldByName(tfield2).visible:=false;//to hide from a dbgrid

从XE2调用时,没有问题。 从Delphi 7调用时,最后一行(用于从db网格中隐藏该字段)会产生错误:

cds: Field 'tfield2' not found 

虽然第一行很好 - 如果我切换查询的顺序以便首先检索't'字段('从左连接s'),那么我在's'字段上得到错误

有关可能导致不兼容的原因的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:0)

好的,我注意到一些奇怪的东西,这让我走上了解决这个问题的道路。

碰巧的是,在任一表中,我试图访问隐藏的字段都是'tinyint(1)'类型。如果我试图隐藏int / varchar等类型的字段,则不会抛出任何错误。

我将'tinyint(1)'字段替换为'int(1)'并且工作正常。

不知道为什么会这样,但我很高兴我抓住了它,如果还有其他人遇到这个问题,我希望这也能为他们回答他们的问题。