将Clientdataset记录复制到数据库表

时间:2015-08-03 10:31:38

标签: delphi delphi-xe2 sybase tclientdataset tcxgrid

我正在尝试将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;

完成此操作后我没有收到任何错误,但查看数据库表时没有插入任何记录。

我不知道我做错了什么,任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:0)

您似乎正在努力完成TClientDataSet为您所做的工作。为了完成所有这些工作,您需要三个组件:

  1. 能够与您的数据服务器通信的数据集实例,已配置为执行此操作
  2. 使用TDatasetProvider属性
  3. 引用先前数据集的Dataset实例
  4. 使用TClientDataSet属性
  5. 引用前一个提供程序的ProviderName实例

    在更新TClientDataset(CDS)中的所有记录后,您调用ApplyUpdates(0)将其发送给提供商。当您调用此方法时,CDS会构建一个名为 Delta 的数据包,其中包含必须保留的记录并将其发送给提供者。

    提供商不知道如何保留 Delta 中存在的记录,因此它与您分配给它的数据集相关联。对于 Delta 中的每条记录,将对数据集执行相应的操作,因此数据服务器将开始接收命令。

    最后,提供程序通知CDS一切正常(这称为协调),最终返回插入操作期间生成的密钥。这些密钥将出现在CDS中。

    毕竟,已更改记录的状态将被清除,以便报告没有待处理的更改(代码未执行的重要操作)。

    我建议您阅读有关DataSnap的更多信息,以便真正掌握它。 Delphi帮助有足够的信息。