小编Gar*_*ary的帖子

ClientDataset.RefreshRecord在Delphi XE中不再适用于连接表 - 任何解决方法?

尝试刷新连接到SQL语句中具有联接表的数据集的ClientDataset上的记录时,TClientDataset.RefreshRecord不再生成SQL的表连接部分.

因此,调用此方法会导致SQL错误"无效列名称"为不在主表中的每个字段.

这在Delphi 2010及更早版本中不是问题.

连接到TClientDataset的DBX4或BDE组件都会发生错误,因此很可能是TClientDataset代码更改出现问题.

要复制此问题:

在Delphi XE中创建一个只有一个表单的新应用程序,并在其上删除所需的数据库组件(TSQLMonitor,TSQLConnection,TSQLQuery,TDatasetProvider,TClientDataset,TDatasource和TDBGrid)并将它们相互绑定.

使用表连接创建一个简单的SQL语句,并将其放在TSQLDataset.SQL属性中.

SQL语句只包含两个字段 - 主表的键字段和连接表中的字段 - 例如伪代码:

Select 
  MainTable.IntegerKeyField
  , JoinedTable.JoinField
FROM MainTable
LEFT OUTER JOIN JoinedTable ON MainTable.LookupFieldID = JoinedTable.JoinKeyField
Run Code Online (Sandbox Code Playgroud)

将这两个字段添加为TSQLQuery和TClientDataset中的持久字段,其中包含pfInKey的关键字段的Provider Flag(如果不知道哪个字段是密钥,则RefreshRecord将不起作用,因此必须使用持久字段).

在表单上添加两个按钮 - 一个只打开Clientdataset,第二个按钮调用clientdataset.refreshrecord;

运行应用程序,按下按钮打开网格中的数据集和数据显示.

按"刷新记录"按钮,您将收到连接字段的SQL错误"无效列名称".

关闭应用程序,打开SQLMonitor日志并在Delphi生成的刷新记录SQL语句中,您将看到它没有包含表连接语句.

====

我真的很感激有关如何解决这个问题的任何想法.

sql delphi tclientdataset delphi-xe

15
推荐指数
1
解决办法
2151
查看次数

标签 统计

delphi ×1

delphi-xe ×1

sql ×1

tclientdataset ×1