![]() |
Datenbank: Paradox • Version: 7 • Zugriff über: TTable Komponente und TDataSource
In Paradox suche
Hallo zusammen
Sagen wir mal ich habe eine Datenbank mit x-Spalten jede Spalte von einem anderen Typ. Jetzt will ich eine Suchfunktion machen bei der ich zum Beispiel alle Einträge in denen 'X' vorkommt anzeigen lassen und die anderen eben nicht. Ich dachte ich kann das irgendiwe über einen Filter machen, jetzt fehlen mir allerdings erstens die Operatoren dafür (ich brauche sowas wie *X* denke ich nur geht das so leider nicht) zweitens kommt ne Fehlermeldung : Fehlende Typübereinstimmung in Ausdruck. Kommt vermutlich daher das ich alle Felder durchsuchen will, auch Integerfelder. Hat jemand Vorschläge wie man das lösen könnte? |
Re: In Paradox suche
Verwende TQuery und SQL
SQL-Code:
SELECT *
FROM Tabelle WHERE Feld1 like '%X%' AND Feld2 like '%X%' AND FeldN like '%X%' Zitat:
|
Re: In Paradox suche
Hallo Angel4585,
du solltest dazu ein TTableobjekt nehmen und das Array Fields in einer Schleife durchlaufen, aber was erwartest du denn als Ergebnis, wenn du ein Integer Feld nach "X" filterst? Das sieht dann etwa wie folgt aus:
Delphi-Quellcode:
myTable.First;
while not myTable.EOF do begin for i := 0 to myTable.FieldCount-1 do begin gefunden := (Fields[i].AsString = suchString); if gefunden then // ... end; myTable.Next; end; |
Re: In Paradox suche
Zitat:
Zitat:
MitSQL hab ich noch nie was gemacht. Ich hab mir das aber gerade angeschaut nur handelt es sich um eine Tabelle mit 60 Spalten und da ist es ein bisschen mühsam jeden Spaltennamen einzeln anzugeben. Wie mach ich das jetzt das ich alle Spaltennamen in einer Schleife auslesen kann? |
Re: In Paradox suche
Zitat:
Delphi-Quellcode:
Table.Filter:= '"X" $ feldname';
Table.Filtered:=True; |
Re: In Paradox suche
Hallo Angel,
wenn du mit der Komponente TTable arbeiten willst, dann kannst du nur tail recursion in der property Filter eintragen. Für erweiterte Suchmuster musst du einen event handler für das Ereignis OnFilterRecord schreiben. Im folgenden Beispiel gehe ich davon aus, dass du SearchStr mit 'x' initialisiert hast, deine Suche nicht case sensitive sein soll und nur String-Felder untersucht werden sollen:
Delphi-Quellcode:
Grüße vom marabu
procedure TDataForm.TableFilterRecord(DataSet: TDataSet;
var Accept: Boolean); var i: integer; begin with DataSet do begin Accept := false; for i := 0 to Pred(FieldCount) do begin Accept := Accept or (Fields[i].DataType = ftString) and AnsiContainsText(Fields[i].AsString, SearchStr); if Accept then Break; end; end; end; |
Re: In Paradox suche
Zitat:
|
Re: In Paradox suche
Ich habe das mit SQL mal so gemacht:
Delphi-Quellcode:
ist das so ok?
SQL.Clear;
SQL.Add('SELECT * FROM "Int.db"'); temp:='WHERE '+Fields.Fields[0].FieldName+' LIKE '+QuotedStr('%'+suchstring+'%'); for i:= 1 to Fields.Count - 1 do temp := temp +' OR '+Fields.Fields[i].FieldName+' LIKE '+QuotedStr('%'+suchstring+'%'); SQL.Add(temp); Edit: wenn ich das so mache kommt die Meldung Listenindex(0) überschritten. D.h. doch das die Tabelle irgendwo nicht drin sthet wo sie aber drinstehen sollte. oder? |
Re: In Paradox suche
Martin, in deinem thread hast du gefragt, wie du dein Suchproblem mit der Komponente TTable lösen kannst. Eine Lösung habe ich gegeben. Ich habe die Bedingungen genannt unter denen mein Code funktioniert. Wenn du auch in anderen Feldern suchen willst, dann musst du die Bedingungen anpassen. Wenn du die Feldtyp-Prüfung wegnimmst, dann werden auch Zahlenwerte durchsucht. Für BLOB-Felder wirst du etwas mehr Aufwand treiben müssen. Wenn du das alles nicht kannst, dann bib Laut und es wird dir geholfen, aber bitte tue mir und den anderen Profis im Forum einen Gefallen:
Nenne die Invarianten deines Problems. Wenn die Komponente TTable für den Lösungsansatz irrelevant ist, dann schreibe bei der Angabe zum Zugriff nur BDE rein. Der Einsatz von TQuery in Verbindung mit LOCALSQL vereinfacht den Umgang mit komplexen Suchmustern ('*abc*123*'). Wenn du sowas brauchst, dann sage es vorher - es ist ein wertvoller Hinweis für jeden Helfer. Ob du LOCALSQL einsetzt oder nicht, du wirst über die Felder iterieren müssen, damit dein Code nicht irgendwann bricht. Nichts für ungut. marabu |
Re: In Paradox suche
Sorry wegen der TTable, hatte es anfangs darauf aufgebaut allerdings habe ich bei der Forensuche bemerkt das es scheinbar mit einer TQuery und SQL einfacher geht und hab das Thema deswegen aufgegriffen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 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