Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi memo Feld in Datenbank durchsuchen (https://www.delphipraxis.net/84531-memo-feld-datenbank-durchsuchen.html)

Jacuzzi 18. Jan 2007 09:49

Re: memo Feld in Datenbank durchsuchen
 
okay :roteyes:

Auch wenn ich in der BDE dafür gar keinen Eintrag hab?



Das hier geht auch nich:

Delphi-Quellcode:
   
Form1.Query1.Active := False;
Form1.Query1.SQL.Text := 'SELECT * FROM problemloesung WHERE titel LIKE "sfilter" OR problem LIKE "sfilter" OR loesung LIKE "sfilter"';
Form1.Query1.Active := True; // "Fehler: Variante des Typs (Null) konnt nich in den Typ (String) konvertiert werden."

Gerous 18. Jan 2007 10:21

Re: memo Feld in Datenbank durchsuchen
 
Das Ganze ist doch schon fast richtig ;)

probiers mal so:

Delphi-Quellcode:
Form1.Query1.SQL.Text := 'SELECT * FROM problemloesung WHERE titel LIKE ''%' + sfilter + '%'' OR problem LIKE ''%' + sfilter + '%'' OR loesung LIKE ''%' + sfilter + '%''';

Jacuzzi 18. Jan 2007 10:31

Re: memo Feld in Datenbank durchsuchen
 
Super, das hab ich jetzt kurz vorher auch schon rausgefunden :D
Aber trotzdem Danke.


Delphi-Quellcode:
Form1.Query1.Active := False;
Form1.Query1.SQL.Text := 'SELECT * FROM problemloesung WHERE titel LIKE ''%' + sfilter + '%'' OR problem LIKE ''%' + sfilter + '%'' OR loesung LIKE ''%' + sfilter + '%''';
Form1.Query1.Active := True;

while not Form1.Query1.Eof do
begin
  Form1.lb_titel.Items.Add(Form1.Query1.FieldValues['titel']);
  Form1.Query1.Next;
end;
Nochmal zusammenfassend zum Quellcode:
- Volltextsuche der Query in der db
- gefundene Einträge in Listbox schreiben

Jacuzzi 23. Jan 2007 10:53

Re: memo Feld in Datenbank durchsuchen
 
So, weiter gehts :D


Ich suche in den "Titeln" nach verschiedenen Strings -> AND-verknüpft
funkioniert alles soweit:

Delphi-Quellcode:
   
Query1.SQL.Text := 'SELECT * FROM ''' + DB_NAME + ''' WHERE (titel LIKE ''%' + fwoerter[1] + '%'')
                                                        AND (titel LIKE ''%' + fwoerter[2] + '%'')';

Jetzt will ich aber bestimmte Zeichen von der Suche ausschließen -> also AND-NOT-verknüpft
funktioniert NICHT:

Bsp: "1" und "2" finden, welche keine "3" enhalten

Delphi-Quellcode:
   
Query1.SQL.Text := 'SELECT * FROM ''' + DB_NAME + ''' WHERE (titel LIKE ''%' + fwoerter[1] + '%'')
                                                        AND (titel LIKE ''%' + fwoerter[2] + '%'')
                                                    AND NOT (titel LIKE ''%' + fwoerter[3] + '%'')';

Kann ich das überhaupt mit SQL realisieren?
Wie mach ich das?


Jacuzzi.

Jürgen Thomas 23. Jan 2007 11:55

Re: memo Feld in Datenbank durchsuchen
 
Hallo,
versuch es einmal mit zusätzlichen Klammern.
Delphi-Quellcode:
Query1.SQL.Text := 'SELECT * FROM ''' + DB_NAME + ''' WHERE (titel LIKE ''%' + fwoerter[1] + '%'')
                                                        AND (titel LIKE ''%' + fwoerter[2] + '%'')
                                                    AND ( NOT (titel LIKE ''%' + fwoerter[3] + '%'') )';
Es sollte grundsätzlich mit SQL möglich sind. Wenn Du Pech hast, überschreitest Du allenfalls die Fähigkeiten von LocalSQL.

Gruß Jürgen

marabu 23. Jan 2007 12:33

Re: memo Feld in Datenbank durchsuchen
 
Hallo Hannes,

das NOT gehört in LocalSQL zum LIKE:

SQL-Code:
... AND titel NOT LIKE :titel ...
Grüße vom marabu

Jacuzzi 24. Jan 2007 08:42

Re: memo Feld in Datenbank durchsuchen
 
@ marabu
So funktioniert das leider nicht.

Bei mir klappt das nur so:
Delphi-Quellcode:
     
// erster zu suchender String
Query1.SQL.Text := 'SELECT * FROM ''' + DB_NAME + ''' WHERE (titel LIKE ''%' + fwoerter[0] +
  '%'' OR problem LIKE ''%' + fwoerter[0] + '%'' OR loesung LIKE ''%' + fwoerter[0] + '%'')';

// weitere zu suchende Strings (anfügen)
for i := 1 to length(fwoerter)-1 do
  Query1.SQL.Text := Query1.SQL.Text + ' AND (titel LIKE ''%' + fwoerter[i] +
    '%'' OR problem LIKE ''%' + fwoerter[i] + '%'' OR loesung LIKE ''%' + fwoerter[i] + '%'')';

// auszuschließende Strings (anfügen)
for i := 0 to length(fwoerter_)-1 do
  Query1.SQL.Text := Query1.SQL.Text + ' AND (NOT (titel LIKE ''%' + fwoerter_[i] +
    '%'' OR problem LIKE ''%' + fwoerter_[i] + '%'' OR loesung LIKE ''%' + fwoerter_[i] + '%''))';
So funktioniert das aber auch nur wenn ich nur einen String ausschließe...
wenn ich zwei oder mehrere Strings auschließen will, dann wird alles rausgefiltert.
Liegt wahrscheinlich daran, dass es dann so aussieht:

AND (NOT (... OR ...)) AND (NOT (... OR ...))

wobei es aber bei mehreren Ausschließungen sicher so sein müsste:

AND (NOT (... OR ... OR ... OR ...))


:roll:

marabu 24. Jan 2007 13:53

Re: memo Feld in Datenbank durchsuchen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

dein Fall ist tatsächlich etwas komplizierter. Ich habe dir mal eine Demo angehängt, die dir den Ansatz über eine konjunktive Normalform zeigt.

Freundliche Grüße

Jacuzzi 24. Jan 2007 14:53

Re: memo Feld in Datenbank durchsuchen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Vielen Dank!

Dein Programm ist sicherlich funktionsfähig und durchdacht, aber für mich undurchsichtig.

Ich hab mir da jetzt schon selber was gebastelt, sicherlich für Außenstehende auch nich ganz durchsichtig, aber funktionell. :-D
Für alle die es interessiert, hier mein Proggie.



MfG Jacuzzi. :cheers:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:44 Uhr.
Seite 2 von 2     12   

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