Moin
Bei ABSTable kann der Index für ein Feld auch der Methode
FindIndexForFields gefunden/gesucht werden:
Delphi-Quellcode:
ABSTable1.IndexDefs.Update;
//--alle vorhandenen Index auflisten
ABSTable1.IndexDefs.GetItemNames(Combobox1.Items);
try
ABSTable1.IndexName := ABSTable1.IndexDefs.FindIndexForFields(FeldName).Name;
//--oder
ABSTable1.IndexFieldNames := ABSTable1.IndexDefs.FindIndexForFields(FeldName).Fields;
except
// Function zum Erstellen des Index aufrufen;
p_IndexErstellen(ABSTable1, FeldName);
end;
....
p_IndexErstellen(const Tabelle: TABSTable; const FeldNAme: String);
begin
Tabelle.AddIndex('idx_'+FeldName, FeldName, []);
//--Updaten, damit beim nächsten Überprüfen der neue Index gefunden wird
Tabelle.IndexDefs.Update;
Tabelle.IndexNAme := 'idx_'+FeldName;
end;
...
Der try---except-Block muss sein, weil sonst die ABS-
DB bei nicht vorhandenem/gefundenen Index eine Fehlermeldung auf das Formular setzt.
[EDIT] zu #9
Diese Art der Schleife ist nicht unbedingt praktikabel - weil:
selbst bei passendem/gefundenem Index werden die weiteren Einträge in der IndexDef durchsucht - und es dürfte dann klar sein, dass dann nix (mehr) gefunden wird und der Index (zum wiederholten) Mal erstellt wird! Das dürfte mit sicherheit ne Fehlermeldung produzieren!
Besser wäre dann so:
Delphi-Quellcode:
procedure TForm1.GridTitleClick(Column: TColumn);
var
sName : String;
I : integer;
bVorhanden: Boolean;
begin
bVorhanden := false;
sName := Column.Field.FieldName; // Feldname
// vorhandenen Index suchen
Table.IndexDefs.Update;
for I := 0 to Table.IndexDefs.Count -1 do // vorhandenen Index suchen
if Table.IndexDefs.Items[I].Fields = sName then
begin
bVorhanden := True;
break; //-- durchaus erlaubt, weil Forstezung der Suche ja nicht mehr sinnvoll *gg*
end;
if bVorhanden then
begin
Table.IndexName := sName; //vorhandener Index einsetzen geht auch bei geöffneter Tabelle!!!
end
//------------------- 2) Index nicht vorhanden
else //
begin
Table.CLose;
Table.Exclusive := true;
Table.AddIndex(sName, sName,[]); // <--
Table.IndexName := sName; // <--
Table.Exclusive := False;
Table.Open;
end;
end;
[/EDIT]