![]() |
AW: Datei mit FireDac "Case Sensitive" filtern
Ich poste alles damit vielleicht
jemand mal einen nutzen hat.
Delphi-Quellcode:
function RTF_Stream_To_Plain_Text(Stream : TStream) : string; var RichEdit : TRichEdit; begin try RichEdit := TRichEdit.CreateParented(HWND_MESSAGE); RichEdit.Parent := nil; RichEdit.PlainText := False; RichEdit.WordWrap := false; RichEdit.Visible := false; Stream.Position := 0; RichEdit.Lines.LoadFromStream(Stream); Result := RichEdit.Lines.Text; finally RichEdit.Free; end; end; function DumpTable(MemTable : TFDMemTable;const UniqueInt : string) : t64Array; var i : Int64; begin i := 0; MemTable.First; while not MemTable.Eof do begin inc(i); SetLength(Result , i); Result[i-1] := MemTable.Fields.FieldByName(UniqueInt).AsLargeInt; MemTable.Next; end; end; procedure FilterNoCaseSensitive(Table : TFDTable;Filter, Field2Filter, UniqueInt : string); var _Connection : TFDConnection; LocalSQL : TFDLocalSQL; MemTable : TFDMemTable; S : string; Stream : TStream; arr : t64Array; i : Integer; begin Stream := TStream.Create; _Connection := TFDConnection.Create(nil); _Connection.DriverName := 'SQLite'; LocalSQL := TFDLocalSQL.Create(nil); LocalSQL.Connection := _Connection; MemTable := TFDMemTable.Create(nil); MemTable.Name := 'Testtable'; MemTable.LocalSQL := LocalSQL; MemTable.FieldDefs.Add(UniqueInt, ftLargeint); MemTable.FieldDefs.Add(Field2Filter, ftString, 1000); MemTable.CreateDataSet; LocalSQL.Active := True; MemTable.Active := True; Table.First; while not Table.Eof do begin MemTable.Insert; MemTable[UniqueInt] := Table[UniqueInt]; Stream := Table.CreateBlobStream(Table.FieldByName('FELD1') , bmRead); S := RTF_Stream_To_Plain_Text(Stream); S := LowerCase(S); MemTable[Field2Filter] := S; MemTable.Post; Table.Next; end; Filter := LowerCase(Filter); MemTable.Filter := Field2Filter + ' LIKE ''%'+ Filter +'%'''; MemTable.Filtered := False; MemTable.Filtered := True; arr := DumpTable(MemTable, UniqueInt); S := ''; for i := Low(arr) to High(arr) do S := S + IntToStr(arr[i]) + ','; Delete(S,Length(S), 1); S := UniqueInt + ' in (' + S + ')'; Table.Filter := S; Table.Filtered := True; MemTable.Free; LocalSQL.Free; _Connection.Free; Stream.Free; end; FilterNoCaseSensitive(FDTable1 , 'TesT', 'FELD1', 'COUNTER'); |
AW: Datei mit FireDac "Case Sensitive" filtern
Zitat:
Dafür gibt es Collate Sequenzen, die auf Deiner DB vielleicht auch eingestellt sind.. ? Oben hast Du geschrieben, dass Du beides können willst? Kommen bei CaseInSensitive soviel Ergebnisse raus, dass man es genauer braucht? |
AW: Datei mit FireDac "Case Sensitive" filtern
Danke jobo
Gut zu wissen das man so was auch in einer Datenbank vorgeben kann. Ich wollte beiden in der Applikation haben. |
AW: Datei mit FireDac "Case Sensitive" filtern
Zitat:
Zitat:
|
AW: Datei mit FireDac "Case Sensitive" filtern
Und hierfür kann man dann einen weiteren expression index anlegen, wenn man es regelmässig benötigt.
|
AW: Datei mit FireDac "Case Sensitive" filtern
Hallo
Für Leute die auf diesen Post stoßen ![]() Nur die Frage ist, geht das auch für ein Blob ? oder ist da die komplizierte Funktion besser. |
AW: Datei mit FireDac "Case Sensitive" filtern
Ein Textblob verhält sich bis zur Länge von 32k weitgehenst wie ein VarChar-Feld
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:11 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