Thema: Delphi Volltextsuche

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#27

AW: Volltextsuche

  Alt 3. Okt 2011, 19:50
Delphi-Quellcode:
uses DB, DBClient, MidasLib; // unit MidasLib, damit man diese blöde Midas.dll nicht mitgeben muß

type
  TWoerterbuch = class(TClientDataSet)
    constructor Create;
    procedure Add(const Word: string);
    function Filter(const SearchWord: string): Boolean;
    procedure Delete(const Word: string);
    procedure Clear;
    procedure GetList(Result: TStrings);

    //property FileName: string; // ist alles in TClientDataSet deklariert
    //procedure LoadFromFile(const FileName: string = '');
    //procedure SaveToFile(const FileName: string = ''; Format: TDataPacketFormat = dfBinary);
    //procedure LoadFromStream(Stream: TStream);
    //procedure SaveToStream(Stream: TStream; Format: TDataPacketFormat = dfBinary);
  end;

procedure TWoerterbuch.Add(const Word: string);
begin
  Insert;
  try
    Self['Word'] := Word;
    Post;
  except
    Cancel;
    raise;
  end;
end;

procedure TWoerterbuch.Clear;
begin
  EmptyDataSet;
end;

constructor TWoerterbuch.Create;
begin
  CreateDataSet;
  FieldDefs.Add('Word', {$IF SizeOf(Char) = 2}ftWideString{$ELSE}ftString{$IFEND}, 30);
  AddIndex('WordIdx', 'Word', [ixUnique, ixCaseInsensitive]);
  IndexName := 'WordIdx';
end;

procedure TWoerterbuch.Delete(const Word: string);
begin
  if Locate('Word', Word, [loCaseInsensitive]) then
    inherited Delete;
end;

function TWoerterbuch.Filter(const SearchWord: string): Boolean;
begin
  if SearchWord <> 'then begin
    Filtered := False;
    FilterOptions := [foCaseInsensitive, foNoPartialCompare];
    Filter := '[Word] LIKE ''' + SearchWord + '%''';
    Filtered := True;
  end else
    Filtered := False;
  Result := RecordCount > 0;
end;

procedure TWoerterbuch.GetList(Result: TStrings);
begin
  Result.BeginUpdate;
  try
    First;
    while not Eof do begin
      Result.Add(Self['Word']);
      Next;
    end;
  finally
    Result.EndUpdate;
  end;
end;
(hoffentlich hab ich das jetzt richtig zusammenbekommen)

Oder direkt an eine datenbank ran, aber dann ohne CreateDataSet (im Constructor) und ohne SaveToFile und LoadFromFile.

Statt GetList kann man es auch direkt, über eine TDataSource, an einen DBGrid hängen.
Oder man nimmt die TDataSource als Vorfahre und das TClientDataSet in die Klasse rein.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 3. Okt 2011 um 19:57 Uhr)
  Mit Zitat antworten Zitat