我在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'字段上得到错误
有关可能导致不兼容的原因的任何想法?
谢谢!
答案 0 :(得分:0)
好的,我注意到一些奇怪的东西,这让我走上了解决这个问题的道路。
碰巧的是,在任一表中,我试图访问隐藏的字段都是'tinyint(1)'类型。如果我试图隐藏int / varchar等类型的字段,则不会抛出任何错误。
我将'tinyint(1)'字段替换为'int(1)'并且工作正常。
不知道为什么会这样,但我很高兴我抓住了它,如果还有其他人遇到这个问题,我希望这也能为他们回答他们的问题。