Logo

  DELPHI - FAQ

  Delphi-FAQ | Allgemeine Tipps | Grafik | Datenbanken | VCL | DLL-Programmierung |
 
  Delphi-FAQ | Datenbanken | dBase | dBase Index |
  AddIndex (mit Filter)

Bei dBase-Dateien ist es möglich, Filter im Index zu definieren. Diese sehr gute Funktion wird von Delphi leider nicht direkt unterstützt.
procedure AddIndex(DB :TTable; const Name, aFields, Filter: string;
                   Options: TIndexOptions);
var
  IndexDesc: IDXDesc;

   procedure EncodeIndexDesc;
   var
     Pos: Integer;
   begin
     FillChar(IndexDesc, SizeOf(IndexDesc), 0);
     with IndexDesc do
     begin
       AnsiToNative(DB.Locale, Name, szTagName, SizeOf(szTagName) - 1);
       bPrimary := false;
       bUnique := ixUnique in Options;
       bDescending := ixDescending in Options;
       bMaintained := True;
       bCaseInsensitive := false;
       bSubSet:=true;
       AnsiToNative(DB.Locale,Filter,szKeyCond,SizeOf(szKeyCond)-1);
       if ixExpression in Options then
       begin
         bExpIdx := True;
         AnsiToNative(DB.Locale, aFields, szKeyExp, SizeOf(szKeyExp) - 1);
       end else
       begin
         Pos := 1;
         while (Pos <= Length(aFields)) and (iFldsInKey < 16) do
         begin
           aiKeyFld[iFldsInKey] :=
             DB.FieldDefs.Find(ExtractFieldName(aFields, Pos)).FieldNo;
           Inc(iFldsInKey);
         end;
       end;
     end;
   end;
begin
 if Filter='' then DB.AddIndex(Name,aFields,Options)
 else begin
  with DB do Begin
   FieldDefs.Update;
   EncodeIndexDesc;
   if Active then
   begin
     CheckBrowseMode;
     CursorPosChanged;
     Check(DbiAddIndex(DBHandle, Handle, nil, nil, IndexDesc, nil));
     IndexDefs.Update;
   end
  end;
 end;
end;




 26.01.2006 © wlsoft www.wlsoft.de