我正在尝试将tClientDataSet中的记录插入/复制到数据库表(数据库是Sybase ASA)。
我还有一个带有cxgrid的表单,我可以看到来自cds的记录,所以我知道其中有记录。
点击按钮,我会执行以下操作:
with dmData.cds do
begin
Close;
Open;
First;
while not (EOF) do
begin
dmData.qry1.Open;
dmData.qry1.Insert;
dmData.qry1.FieldByName('field1').AsString := dmData.cds.FieldByName('field1').AsString;
dmData.qry1.FieldByName('field2').AsString := dmData.cds.FieldByName('field2').AsString;
dmData.qry1.FieldByName('field3').AsString := dmData.cds.FieldByName('field3').AsString;
dmData.qry1.Post;
Next;
end;
end;
完成此操作后我没有收到任何错误,但查看数据库表时没有插入任何记录。
我不知道我做错了什么,任何帮助都会非常感激。
答案 0 :(得分:0)
您似乎正在努力完成TClientDataSet
为您所做的工作。为了完成所有这些工作,您需要三个组件:
TDatasetProvider
属性Dataset
实例
TClientDataSet
属性ProviderName
实例
醇>
在更新TClientDataset
(CDS)中的所有记录后,您调用ApplyUpdates(0)
将其发送给提供商。当您调用此方法时,CDS会构建一个名为 Delta 的数据包,其中包含必须保留的记录并将其发送给提供者。
提供商不知道如何保留 Delta 中存在的记录,因此它与您分配给它的数据集相关联。对于 Delta 中的每条记录,将对数据集执行相应的操作,因此数据服务器将开始接收命令。
最后,提供程序通知CDS一切正常(这称为协调),最终返回插入操作期间生成的密钥。这些密钥将出现在CDS中。
毕竟,已更改记录的状态将被清除,以便报告没有待处理的更改(代码未执行的重要操作)。
我建议您阅读有关DataSnap的更多信息,以便真正掌握它。 Delphi帮助有足够的信息。