ClientDataSet - criando indices em runtime

Top  Previous  Next

Question/Problem/Abstract:

 

When I had to create an index for a in-memory table, I got the 

error message 'No active index' when accessing the index e.g. with FindKey(). 

 

Answer:

 

 

 

I had originally created the index with the property IndexName 

and finally found out that this did not select my index

Selecting the index by the property IndexFieldNames worked fine, 

as the following source shows. 

 

This is also an example how to create a memory table.. 

 

   

  with CDS1 Do 

  begin 

    Close; 

    // Define the fields 

    FieldDefs.Clear; 

    FieldDefs.Add ('Project', ftInteger, 0, True); 

    FieldDefs.Add ('Module',  ftString, 60, False); 

    FieldDefs.Add ('FuncName',ftString, 60, False); 

    FieldDefs.Add ('FuncDate',ftDate,    0, False); 

    FieldDefs.Add ('FuncCRC', ftString,  2, False); 

    FieldDefs.Add ('Programmer', ftString, 32, False); 

    // Define the index 

    IndexDefs.Clear; 

    IndexDefs.Add ('IProject''Project;Module;FuncName'

                   [ixPrimary, ixUnique]); 

    // this seems not to do anything 

    IndexName := 'IProject'

 

    // this does work 

    IndexFieldNames := 'Project;Module;FuncName'

 

    // Create the dataset 

    CreateDataSet; 

    Open; 

  end