Delphi 将Clientdataset记录复制到数据库表
我试图实现的是将记录从tClientDataSet插入/复制到数据库表(数据库是Sybase ASA) 我还有一个表格,上面有一个cxgrid,我可以看到CD上的记录,所以我知道里面有记录 单击按钮后,我将执行以下操作:Delphi 将Clientdataset记录复制到数据库表,delphi,delphi-xe2,sybase,tclientdataset,tcxgrid,Delphi,Delphi Xe2,Sybase,Tclientdataset,Tcxgrid,我试图实现的是将记录从tClientDataSet插入/复制到数据库表(数据库是Sybase ASA) 我还有一个表格,上面有一个cxgrid,我可以看到CD上的记录,所以我知道里面有记录 单击按钮后,我将执行以下操作: with dmData.cds do begin Close; Open; First; while not (EOF) do begin dmData.qry1.Open; dmData.qry1.Inser
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;
完成此操作后,我没有收到任何错误,但在数据库表中查找时,没有插入任何记录
我不知道我做错了什么,任何帮助都将不胜感激。看来您正在努力完成
TClientDataSet
为您所做的工作。为了使所有这些工作正常进行,您需要三个组件:
TDatasetProvider
的实例,使用dataset
属性引用以前的数据集TClientDataSet
的实例,使用ProviderName
属性引用以前的提供程序TClientDataset
(CD)中的所有记录后,可以调用ApplyUpdate(0)
将它们发送给提供商。调用此方法时,CDS将构建一个名为Delta的数据包,其中包含必须持久化的记录,并将其发送给提供程序
提供程序不知道如何持久化增量中现有的记录,因此它与您分配给它的数据集协同工作。对于增量中的每个记录,相应的操作都在数据集上执行,因此数据服务器将开始接收命令
最后,提供者通知CD一切正常(称为协调),最终返回插入操作期间生成的密钥。这些键将出现在CD中
在所有这些之后,更改记录的状态将被清除,以便不报告任何挂起的更改(这是代码没有执行的重要操作)
我建议您阅读更多有关DataSnap的内容,以真正掌握它。Delphi帮助中有足够的信息。正如Kobim所说,dmData.qry1中的SQL可能不正确。请回答您的问题并演示如何使用您的查询。在“ApplyUpdate”末尾添加:目前,您正在更新ClientDataSet中的数据;'ApplyUpdates将数据传输到底层数据集。重要的问题是:您使用什么样的查询将记录插入数据库,他的SQL是什么?如果我们不知道这一点,我们就帮不了你。无论如何,您可以使用:
dmQuery.qry1.SQL:='insert into table_name(field1,field2,field3)值(dmData.cds.FieldByName('field1')。AsString,dmData.cds.FieldByName('field2')。AsString,dmData.cds.FieldByName('field3')。AsString);'dmQuery.qry1.ExecSql代码>