-1

我试图实现将记录从 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;

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

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

4

1 回答 1

0

看来您正在尝试为您做的工作TClientDataSet。为了让所有这些工作,您需要三个组件:

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

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

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

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

毕竟,更改记录的状态将被清除,以便报告没有待处理的更改(您的代码没有做的重要事情)。

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

于 2015-08-03T15:59:29.840 回答