我有一个包含这些表的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
我的表单中包含TDBGrid
,TADOConnection
,TADOQuery
,TDatasetProvider
和TDataSource
。我已将所有内容都连接起来,以便网格在设计模式下显示查询中的预期数据。网格不是只读的,所有已分类的数据集都有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''.
我做错了什么,或者没做错?
答案 0 :(得分:3)
当ClientDataset基于连接表时,它可能无法确定要更新的列/表。在这种情况下,你需要告诉它如何。请参阅this文章,其中说明了您需要执行的操作。基本上,您可能必须在OnGetTableName
中实现代码。