Hallo Monta,
ein Auszug aus dem Datenbank-Wiki zu Lazarus.
Code: Alles auswählen
Das Hinzügen von Indexen ist ein wenig unterschiedlich von ihrer typischen TTable. Es muss getan werden, nachdem die Datenbank geöffnet wurde. Es ist auch die selbe Methode, die sie zum Erneuern der Indexe verwenden. Zum Beispiel:
Dbf1.Exclusive := True;
Dbf1.Open;
Dbf1.AddIndex('dvdsname','Name',[ixPrimary, ixUnique, ixCaseInsensitive]);
Dbf1.AddIndex('rating.ndx', 'Rating', [ixCaseInsensitive]);
Dbf1.Close;
Der erste (primary) Index ist eine Datei mit dem Namen "dvdsname.mdx" und der zweite ist die Datei "rating.ndx". Daher müssen sie aufpassen in einer Mehrfach-Tabellen Datenbank, den selben Dateinamen nicht zweimal zu verwenden.
Delphi kann es so:
Code: Alles auswählen
Test.AddIndex('ce_fahrt', 'DTOS(STARTDATE)', [ixPrimary]);
Wenn ich den Index auf ein Characterfeld anlege funktioniert es unter Lazarus ohne murren:
Es muß also eine Umwandlung von ftDate nach String erfolgen, ist ja auch logisch. Nur wie?
Code: Alles auswählen
Test.AddIndex('ce_fahrt', 'DateToStr(STARTDATE)', [ixPrimary]);
Geht auch nicht.
Ich könnte das Datum als String speichern, dann funktioniert die Indexerstellung. Aber kann das wirklich der Sinn sein und was ist mit Zahlen wie zum Beispiel:
Code: Alles auswählen
Test.AddIndex('ce_fahrt', 'MITARBEITER + JAHRESGEHALT', [ixPrimary]);
oder wenn beides Zahlen sind, dann werden die Werte ID + Gehalt addiert.
Code: Alles auswählen
Test.AddIndex('ce_fahrt', 'MIT_ID + JAHRESGEHALT', [ixPrimary]);
Hmm, ...
Gruß
Baba.
Mea Culpa!!! (Meine Schuld)
Die Datenbank war Exclusive = False und da diese mit dem Index verknüpft wird, konnte es nicht funktionieren.
Code: Alles auswählen
Test.Exclusive := True; //GANZ WICHTIG!!!
Test.Active := True;
Test.AddIndex('ce_fahrt', 'DTOS(STARTDATE)+STARTTIME', []);
Test.ce_fahrt.Active := False;
Ich habe mal wieder, wie schon so häufig, an der ganz falschen Stelle gesucht.
