Delphi 将Clientdataset记录复制到数据库表

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

我试图实现的是将记录从tClientDataSet插入/复制到数据库表(数据库是Sybase ASA)

我还有一个表格,上面有一个cxgrid,我可以看到CD上的记录,所以我知道里面有记录

单击按钮后,我将执行以下操作:

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