我在Delphi XE2中创建了一个DLL,该DLL使用DB Express和TClientDataSet在DB Grid中显示联接的结果。 有一个简单的功能可以启动/显示导出的表单以供其他应用程序使用。 在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”字段(从“ t left join s”),那么我会在“ s”字段上看到错误。

有什么想法会导致不兼容?

谢谢!

#1楼 票数:0

好吧,我注意到了一些奇怪的事情,这使我踏上了寻求答案的道路。

碰巧的是,在任何一个表中,我试图访问以隐藏的字段的类型均为'tinyint(1)'。 如果我尝试隐藏int / varchar等类型的字段,则不会引发任何错误。

我将“ tinyint(1)”字段换为“ int(1)”,它可以正常工作。

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

  ask by ConBran translate from so

未解决问题?本站智能推荐:

1回复

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

我在Delphi XE2中创建了一个DLL,该DLL使用DB Express和TClientDataSet在DB Grid中显示联接的结果。 有一个简单的功能可以启动/显示导出的表单以供其他应用程序使用。 在FormActivate上执行查询,并填充网格。 当我调用该函数以显示来自单独
1回复

TClientDataSet将Binary字段读取到TStream

我已经尽我所能尝试了所有方法,但是似乎无法解决此问题。 我正在Delphi XE3中使用DBExress编写REST DataSnap Server。 我将数据存储在MSQL中的Binary(384)字段中,据我所知,Binary与BLOB / Image字段相同,因为它都是Binary
1回复

TClientDataSet:TStream到VarBinary

我正在编写REST Data Snap服务器,并且必须将TStream保存到VarBinary(384)字段。 我尝试在字段上创建CreateBlobStream,但尝试此操作时出现异常错误。 如何使用DBExpress保存到VarBinary字段?
3回复

用作内存数据集的TClientDataSet - 是否可以在不将数据保存到数据库的情况下在内存中应用更新?

默认情况下,TClientDataSet会跟踪DataSet中所做的所有更改(插入,更新,删除)。 有没有办法告诉数据集接受当前的更改(在使用插入/发布的一系列插入之后,让我们说)而不实际调用数据库来保存任何东西? 我想到的一个想法是使用TDataSetProvider并实现Before
3回复

通过ClientDataSet失败的Delphi 2010 MySQL更新

我正在使用Delphi 2010并使用dbexpress连接到MySQL数据库。 连接有效100%,我正在检索数据。 当我尝试通过dbGrid更新数据时,就会出现问题。 我正在遍历表中的所有条目,并对它们进行检查。 调用ApplyUpdates方法时,我收到“其他用户未找到或更改记录”。
1回复

过滤整数字段

我有客户端表,我想在运行时在用户选择的字段上过滤表,如果字段/项目是字符串类型,无论用户在EdtSearch.Text中使用什么类型,则在运行时组合框组件中包括的所有表字段都可以,但是如果用户选择的ID为firebird整数auto_inc字段,获取异常: 码: 什么是使过滤器在
2回复

TClientDataSet中的“数据包不匹配”错误

我有一个.cds文件,提示它是TClientDataSet文件。 当我尝试在Delphi 7中用TClientDataSet打开它时,如果将Active设置为true ,则会发生错误“数据包不匹配”。 请帮我 :(
4回复

使用 Delphi7 TClientDataSet:是否可以将其 XML 内容以缩进格式保存?

我正在使用 Delphi7 TClientDataSet为我的一些数据读取和写入 XML 文件。 但是,当我想在程序外浏览它(在 Windows 资源管理器中双击 XML)时,我收到“在文本内容中发现无效字符”。 错误处理资源' - 即使数据在 Delphi 中读写正常。 有没有办法强制TCli
1回复

如果按不同的索引排序,则Delphi 7 TClientDataSet聚合不起作用[关闭]

我有一个ClientDataset有三个聚合字段。 总计计算每个客户的总订购金额,因此他们使用客户ID的索引。 我使用此ClientDataset作为报告(FastReports),它显示所有客户及其订单,按客户分组并按订单日期排序。 因此,我在ClientDataSet上有两个索
2回复

更新后刷新TClientDataset中的值

我得到了一个TClientDataset,其中包含来自多个表的数据。 当我对此数据集应用更新时,它可能会不同步。 我举一个例子: 在要更新的表中,我得到了一个名为“ Client_id”的ID。 clientdataset还包含一个值“ Client_name”,该值是从“ Cl