使用TClientDataset更新已加入的查询

时间:2015-06-15 19:48:11

标签: sql-server delphi tclientdataset

我有一个包含这些表的SQL Server数据库:

CREATE TABLE [dbo].[Table_1](
    [key1] [nchar](50) NOT NULL,
    [key2] [nchar](50) NOT NULL,
    [data1] [nchar](10) NULL,
    [data2] [nchar](10) NULL
) ON [PRIMARY]

CREATE TABLE [dbo].[Table_2](
    [key1] [nchar](50) NOT NULL,
    [key2] [nchar](50) NOT NULL,
    [data3] [nchar](10) NULL,
    [data4] [nchar](10) NULL
) ON [PRIMARY]

我有一个提取所有字段的查询:

select 
  t1.key1, t1.key2, t1.data1, t1.data2,
  t2.key1, t2.key2, t2.data3, t2.data4
from Table_1 t1 join Table_2 t2 on 
  t1.key1 = t2.key1 and t1.key2 = t2.key2

我的表单中包含TDBGridTADOConnectionTADOQueryTDatasetProviderTDataSource。我已将所有内容都连接起来,以便网格在设计模式下显示查询中的预期数据。网格不是只读的,所有已分类的数据集都有CanModify为真。

表单中有一个菜单,其中的项目具有以下OnClick方法

procedure TCdsToy0Form.ApplyUpdates1Click(Sender: TObject);
begin
  (dsCDStoGrid.DataSet as TClientDataSet).ApplyUpdates(0);
end;

当我使用网格编辑data1列的值,然后单击“我的应用更新”菜单项时,收到以下消息:

Exception class EOleException with message 'Invalid column name 'key1_1''. 

我做错了什么,或者没做错?

1 个答案:

答案 0 :(得分:3)

当ClientDataset基于连接表时,它可能无法确定要更新的列/表。在这种情况下,你需要告诉它如何。请参阅this文章,其中说明了您需要执行的操作。基本上,您可能必须在OnGetTableName中实现代码。

相关问题