2011-09-20 210 views
1

我使用ClientDataSetDataSetProvider链接到本地​​数据集。 当我想编辑DataSet中的数据时,打开ClientDataSet并向其中添加一些索引。编辑完数据后,我关闭了ClientDataSet。 所有的工作都很好,除了当我再次打开ClientDataSet并选择一个索引时,它会抛出异常并显示消息"index 'xxx' not found". 我在做什么错了?德尔福2006 TClientDataSet索引问题

这里是开放的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的

+0

给我们更多的细节您的问题..编辑:不要写评论。编辑您的帖子以撰写新代码.. –

回答

2

第一轮结束后,你对IndexNameClientDataSet。当IndexDefs被丢弃时,它引用的索引变为无效。清除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'; 
    [..]