AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datei mit FireDac "Case Sensitive" filtern
Thema durchsuchen
Ansicht
Themen-Optionen

Datei mit FireDac "Case Sensitive" filtern

Ein Thema von ATS3788 · begonnen am 23. Feb 2015 · letzter Beitrag vom 28. Feb 2015
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von ATS3788
ATS3788

Registriert seit: 18. Mär 2004
Ort: Kriftel
646 Beiträge
 
Delphi XE Starter
 
#11

AW: Datei mit FireDac "Case Sensitive" filtern

  Alt 23. Feb 2015, 16:24
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');
Martin MIchael
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#12

AW: Datei mit FireDac "Case Sensitive" filtern

  Alt 23. Feb 2015, 16:34
Es ist hilfreich wenn man BC338, oder Bc338 oder bc338
eingibt und immer das gleich im einem String Grid ausgegeben wird.
Also mal unabhängig davon, ob es Probleme gibt. Was Du da schreibst, ist doch CaseInSensitive.
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?
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von ATS3788
ATS3788

Registriert seit: 18. Mär 2004
Ort: Kriftel
646 Beiträge
 
Delphi XE Starter
 
#13

AW: Datei mit FireDac "Case Sensitive" filtern

  Alt 26. Feb 2015, 07:18
Danke jobo
Gut zu wissen das man so was auch in einer Datenbank vorgeben kann.
Ich wollte beiden in der Applikation haben.
Martin MIchael
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#14

AW: Datei mit FireDac "Case Sensitive" filtern

  Alt 26. Feb 2015, 08:25
..
Gut zu wissen das man so was auch in einer Datenbank vorgeben kann.
Ich wollte beiden in der Applikation haben.
Das hatte Union eigentlich auch bereits geschrieben:
Vermutlich hat der DB-Designer entschieden, dass so was nicht gehen soll und daher das Feld mit einer ci_ Collation definiert.
Wenn man beides realisieren will, bietet es sich vielleicht alternative an, DB-seitig CaseSensitive zu arbeiten (also keine CI collation zu verwenden) und das InSensitive über Upper Funktionen im SQL darüber zu legen, wenn der Anwender es aktiviert.
Gruß, Jo
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: Datei mit FireDac "Case Sensitive" filtern

  Alt 26. Feb 2015, 09:21
Und hierfür kann man dann einen weiteren expression index anlegen, wenn man es regelmässig benötigt.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von ATS3788
ATS3788

Registriert seit: 18. Mär 2004
Ort: Kriftel
646 Beiträge
 
Delphi XE Starter
 
#16

AW: Datei mit FireDac "Case Sensitive" filtern

  Alt 28. Feb 2015, 06:00
Hallo
Für Leute die auf diesen Post stoßen

http://www.destructor.de/firebird/ca...tivesearch.htm

Nur die Frage ist, geht das auch für ein Blob ?
oder ist da die komplizierte Funktion besser.
Martin MIchael

Geändert von ATS3788 (28. Feb 2015 um 06:03 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Datei mit FireDac "Case Sensitive" filtern

  Alt 28. Feb 2015, 08:04
Ein Textblob verhält sich bis zur Länge von 32k weitgehenst wie ein VarChar-Feld
http://www.firebirdsql.org/refdocs/l...pd21-blob.html
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 04:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz