正在将客户端数据集记录复制到数据库 table

Copying Clientdataset records to Database table

我想要实现的目标是 insert/copy 从 tClientDataSet 到数据库 table 的记录(数据库是 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;

完成后我没有收到任何错误,但是在查看数据库时 table 没有插入任何记录。

我不知道我做错了什么,任何帮助将不胜感激。

您似乎正在尝试完成 TClientDataSet 为您完成的工作。为了使所有这些正常工作,您需要三个组件:

  1. 能够与您的数据服务器通信的数据集实例,已配置为这样做
  2. TDatasetProvider 的一个实例引用了以前的数据集,通过使用 Dataset 属性
  3. TClientDataSet 的一个实例,通过使用 ProviderName 属性
  4. 引用以前的提供者

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

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

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

之后,更改记录的状态将被清除,以便报告没有未决更改(您的代码没有做的重要事情)。

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