Delphi 2006 TClientDataSet索引问题

Delphi 2006 TClientDataSet索引问题,delphi,indexing,tclientdataset,Delphi,Indexing,Tclientdataset,我使用ClientDataSet和链接到本地数据集的DataSetProvider。 当我想要编辑数据集中的数据时,我打开ClientDataSet并向其中添加一些索引。编辑完数据后,我关闭ClientDataSet。 一切正常,只是当我再次打开ClientDataSet并选择一个索引时,它抛出了一个异常,消息是“找不到索引‘xxx’” 我做错了什么 以下是打开ClientDataSet的代码: Application.CreateForm (TfrmCardDep, frmCardDep);

我使用
ClientDataSet
和链接到本地数据集的
DataSetProvider
。 当我想要编辑数据集中的数据时,我打开ClientDataSet并向其中添加一些索引。编辑完数据后,我关闭ClientDataSet。 一切正常,只是当我再次打开ClientDataSet并选择一个索引时,它抛出了一个异常,消息是“找不到索引‘xxx’” 我做错了什么

以下是打开ClientDataSet的代码:

 Application.CreateForm (TfrmCardDep, frmCardDep);
 try
  with DM.tblCCardDep do
   begin
    IndexDefs.Clear;
    if not Active then Open;
    AddIndex ('iDepID', 'DepID', []);
    AddIndex ('iDep', 'Dep', []);
    IndexName := 'iDep';
    FieldByName('Dep').DisplayLabel := 'Departament';
    FieldByName('Dep').DisplayWidth := 50;
    FieldByName('DepID').Visible := false;
   end;

  frmCardDep.ShowModal;
 finally
  if DM.tblCCardDep.Active then DM.tblCCardDep.Close;
  frmCardDep.Free; frmCardDep := nil;
 end;

DM.tblCCardDep是客户端数据集

关闭客户端数据集时,客户端数据集索引始终被丢弃。客户机数据集上下文中的“持久索引”意味着只要客户机数据集处于打开状态,它就会留在内存中:


在第一轮之后,您在
ClientDataSet
上设置了
IndexName
。当
indexdef
被丢弃时,它引用的索引将无效。在重新打开数据集之前,请清除
IndexName
,即将代码修改为:

 [..]
 try
  with DM.tblCCardDep do
   begin
    IndexDefs.Clear;
    IndexName := '';      // <- here
    if not Active then Open;
    [..]

给我们更多关于你问题的细节。。编辑:不要像评论一样写。编辑您的帖子以编写新代码。。
 try
  with DM.tblCCardDep do
   begin
    if not Active then Open;
    if IndexDefs.Count = 0 then
     begin
      AddIndex ('iDepID', 'DepID', []);
      AddIndex ('iDep', 'Dep', []);
      IndexDefs.Update;             // Update IndexDefs
      IndexName := 'iDep';
     end;
    FieldByName('Dep').DisplayLabel := 'Departament';
    [..]