Konnte das Problem lösen.
Der Indexname war zu lang!
Für all diejenigen, die Interesse an der Lösung haben, hier der Quellcode.
Gruß Markus
Delphi-Quellcode:
procedure TDM_Datenbanken.SetSuchergebnisSortierung(
const IndexFelder: string; const Aufsteigend: boolean);
var
IndexName: string;
MaxIdx,
i: integer;
begin
IBQuery_Suche_Vertragsdaten.IndexDefs.Update;
{ Fesstellen ob bereits ein Index mit den aktuellen Feldern existiert }
for I := 0 to Pred(IBQuery_Suche_Vertragsdaten.IndexDefs.Count) do
if (IBQuery_Suche_Vertragsdaten.IndexDefs.Items[I].Fields = IndexFelder) then
begin
if (not Aufsteigend) and (ixDescending in IBQuery_Suche_Vertragsdaten.IndexDefs.Items[i].Options) then
begin
{ Diesen Index als aktuellen Index der Tabelle aktivieren }
IBQuery_Suche_Vertragsdaten.IndexName := IBQuery_Suche_Vertragsdaten.IndexDefs.Items[i].Name;
exit;
end;
if (Aufsteigend) and (not (ixDescending in IBQuery_Suche_Vertragsdaten.IndexDefs.Items[i].Options)) then
begin
{ Diesen Index als aktuellen Index der Tabelle aktivieren }
IBQuery_Suche_Vertragsdaten.IndexName := IBQuery_Suche_Vertragsdaten.IndexDefs.Items[i].Name;
exit;
end;
end;
{ Neuen Namen finden }
MaxIdx := 0;
for i := 0 to Pred(IBQuery_Suche_Vertragsdaten.IndexDefs.Count) do
if Copy(IBQuery_Suche_Vertragsdaten.IndexDefs.Items[i].Name, 1, 4) = 'AUT_' then
MaxIdx := StrToInt(Copy(IBQuery_Suche_Vertragsdaten.IndexDefs.Items[i].Name, 5, 3));
Inc(MaxIdx);
IndexName := 'AUT_' + IntToStr(MaxIdx);
if Aufsteigend then
IBQuery_Suche_Vertragsdaten.IndexDefs.Add(IndexName, IndexFelder, [ixCaseInsensitive])
else
IBQuery_Suche_Vertragsdaten.IndexDefs.Add(IndexName, IndexFelder, [ixCaseInsensitive,
ixDescending]);
IBQuery_Suche_Vertragsdaten.IndexName := IndexName;
end;