AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi vorhandenen Index ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

vorhandenen Index ermitteln

Ein Thema von Fritz01 · begonnen am 20. Nov 2007 · letzter Beitrag vom 25. Nov 2007
Antwort Antwort
raiguen
(Gast)

n/a Beiträge
 
#1

Re: vorhandenen Index ermitteln

  Alt 21. Nov 2007, 09:32
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]
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz