![]() |
Datenbank: Paradox • Version: 7 • Zugriff über: Query
memo Feld in Datenbank durchsuchen
Ich habe eine kleine Paradox db, in dieser möchte ich eine Volltextsuche realisieren.
Jedoch funktioniert anscheinend die Suche in der db nicht, welche den Feldtyp 'memo' besitzen. Hier ein kleiner bescheidener Auszug aus mein Quellcode:
Delphi-Quellcode:
Es soll jedes Feld eines Datensatz der db durchsucht werden.
procedure titel_einlesen(sfilter :string); // sfilter = zu suchender Text
begin Form1.lb_titel.Clear; Form1.Table1.First; repeat if (pos(sfilter,Form1.Table1.FieldValues['Titel']) <> 0) or (pos(sfilter,Form1.Table1.FieldValues['Problem']) <> 0) or (pos(sfilter,Form1.Table1.FieldValues['Loesung']) <> 0) then Form1.lb_titel.Items.Add(Form1.Table1.FieldValues['Titel']); Form1.Table1.Next; until Form1.Table1.Eof; end; Wenn in einem Feld des Datensatz der gesuchte Text vorhanden ist, dann soll der 'Titel' dieses Datensatzes in eine Listbox geschrieben werden. MfG Jacuzzi. |
Re: memo Feld in Datenbank durchsuchen
Warum läßst du nicht die Datenbank die Arbeit machen (SQL)?
|
Re: memo Feld in Datenbank durchsuchen
Zitat:
MfG freak |
Re: memo Feld in Datenbank durchsuchen
Mit SQL hab ich auch schonmal probiert.
Geht aber irgednwie nicht:
Delphi-Quellcode:
Form1.Query1.SQL.Text := 'SELECT * FROM problemloesung WHERE Titel ' + sfilter; repeat Form1.lb_titel.Items.Add(Form1.Query1.FieldValues['Titel']); until Form1.Query1.Eof; btw. Die Paradox Datenbank liegt lokal und läuft ohne BDE! |
Re: memo Feld in Datenbank durchsuchen
Zitat:
SQL-Code:
select titel from <tabelle> where titel like '%<suchbegriff>%' or problem like '%<suchbegriff>%' or loesung like '%<suchbegriff>%';
|
Re: memo Feld in Datenbank durchsuchen
Zitat:
|
Re: memo Feld in Datenbank durchsuchen
Zitat:
Ich wende die Table einfach auf die lokale Datenbank an, ohne BDE Zugriff. Zitat:
Delphi-Quellcode:
Form1.Query1.SQL.Text := 'SELECT titel FROM problemloesung WHERE titel LIKE %sfilter% OR problem LIKE %sfilter% OR loesung LIKE %sfilter%';
repeat Form1.lb_titel.Items.Add(Form1.Query1.FieldValues['titel']); // hier bekomm ich die Fehlermeldung "Query1: Das Feld 'titel' wurde nicht gefunden" Form1.Table1.Next; until Form1.Query1.Eof; |
Re: memo Feld in Datenbank durchsuchen
Zitat:
|
Re: memo Feld in Datenbank durchsuchen
Zitat:
|
Re: memo Feld in Datenbank durchsuchen
Dann verwendest du auch die BDE!
|
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." |
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 + '%''';
|
Re: memo Feld in Datenbank durchsuchen
Super, das hab ich jetzt kurz vorher auch schon rausgefunden :D
Aber trotzdem Danke.
Delphi-Quellcode:
Nochmal zusammenfassend zum 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; - Volltextsuche der Query in der db - gefundene Einträge in Listbox schreiben |
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. |
Re: memo Feld in Datenbank durchsuchen
Hallo,
versuch es einmal mit zusätzlichen Klammern.
Delphi-Quellcode:
Es sollte grundsätzlich mit SQL möglich sind. Wenn Du Pech hast, überschreitest Du allenfalls die Fähigkeiten von LocalSQL.
Query1.SQL.Text := 'SELECT * FROM ''' + DB_NAME + ''' WHERE (titel LIKE ''%' + fwoerter[1] + '%'')
AND (titel LIKE ''%' + fwoerter[2] + '%'') AND ( NOT (titel LIKE ''%' + fwoerter[3] + '%'') )'; Gruß Jürgen |
Re: memo Feld in Datenbank durchsuchen
Hallo Hannes,
das NOT gehört in LocalSQL zum LIKE:
SQL-Code:
Grüße vom marabu
... AND titel NOT LIKE :titel ...
|
Re: memo Feld in Datenbank durchsuchen
@ marabu
So funktioniert das leider nicht. Bei mir klappt das nur so:
Delphi-Quellcode:
So funktioniert das aber auch nur wenn ich nur einen String ausschließe...// 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] + '%''))'; 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: |
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 |
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 06:48 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