Thema: Delphi Fragen zu CDS.IndexDefs

Einzelnen Beitrag anzeigen

hyype

Registriert seit: 5. Nov 2008
97 Beiträge
 
Delphi XE2 Professional
 
#1

Fragen zu CDS.IndexDefs

  Alt 11. Nov 2008, 10:14
Datenbank: SQL OLE DB • Zugriff über: ADO
hi Kollegen

Ich wollte eine procedure schreiben, die ein CDS sowohl aufsteigend als auch absteigend sortieren kann.
Dazu habe ich in diesem Forum Code gefunden und angepasst und es funktioniert auch einwandfrei.
Nun wollte ich aber die procedure weiter optimieren und habe einige Verständnisprobleme:

1.) Könnte mir jmd die Unterschiede zwischen
Delphi-Quellcode:
CDS.AddIndex
CDS.IndexFieldNames
// und
CDS.IndexDefs.Add
erläutern?
Ich benutze nun letzteres, aber habe ka, wieso eigentlich. ^^

2.)
CDS.IndexDefs.Update Die delphi-Hilfe sagt dazu folgendes:
"Update wird aufgerufen, wenn die Indizes einer Datenmenge geändert wurden." Also NACHDEM sie geändert wurden.
Im darunter angegebenen Beispiel wird dieser Befehl aber VOR einer Änderung der Indexmenge aufgerufen, nicht danach. Bin ich nu blöde oder die? ^^

3.)
Delphi-Quellcode:
CDS.IndexDefs.Clear;
CDS.IndexDefs.Update;
CDS.Active war dabei auf true gesetzt, wodurch laut Hilfe Update automatisch 2 Felder (DEFAULT_ORDER und CHANGEINDEX) erstellt.
Ich hatte vorher 3, die 2 komischen ^^ und eins von meiner ersten Sortierung. Mit Clear habe ich alle 3 gelöscht und dachte nun, nach Update lediglich die 2 komischen wieder zu kriegen. Aber weit gefehlt, das 3. war auch wieder da und schon meckert er rum von wegen doppelt gemoppelt und ich habe ka, wieso...

Vielen Dank für eure Erklärungen schonmal!

mfg

Frank

edit:
Vlei kurz zur Erklärung: ich habe die procedure soweit optimiert, dass sie genau so funktioniert, wie ich es möchte, nur auf dem Weg dahin bin ich bald blöde geworden und würde das nun sozusagen im Nachhinein mal verstehen:

Delphi-Quellcode:
procedure TForm2.cds_sort(feldbez:string);
var
  IndexName: String;
  i:integer;
  aufsteigend:boolean;
begin
  indexname:=feldbez+'_id';
  aufsteigend:=true;

  for i := 0 to datamodule3.clientdataset1.IndexDefs.Count-1 do
    if (datamodule3.clientdataset1.IndexDefs.Items[I].Fields = feldbez) then
      aufsteigend:=false;

  datamodule3.ClientDataSet1.active:=false;
  datamodule3.ClientDataSet1.IndexDefs.Clear;
  datamodule3.clientdataset1.IndexDefs.Update;

  if Aufsteigend then
    datamodule3.clientdataset1.IndexDefs.Add(IndexName, feldbez, [ixCaseInsensitive])
  else
    datamodule3.clientdataset1.IndexDefs.Add(IndexName, feldbez, [ixCaseInsensitive,
      ixDescending]);

  datamodule3.clientdataset1.IndexName := IndexName;

  datamodule3.ClientDataSet1.Active:=true;

end;
  Mit Zitat antworten Zitat