![]() |
Datenbank: Paradox • Version: 7 • Zugriff über: BDE
Suche in Datenbank (TTable) mit Joker am Anfang
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Datenbänkler,
ich habe mich in das Thema Datenbanken eingearbeitet und versucht das im Netz verfügbare Demo ![]() Nunmehr habe ich eine Datenbank, in der ich
Delphi-Quellcode:
und
//LESEN über:
Edit1.Text:=Table1.FieldByName('Name').AsString;
Delphi-Quellcode:
kann.
//SCHREIBEN über
Table1.Edit; Table1.FieldByName('Name').AsString:=Edit1.Text; Table1.Post; Auch die SUCHE über
Delphi-Quellcode:
bringt mir in meinem mit der Datenbank verküpften DBGrid die entsprechende Filterung.
//Suche via
Table1.Filtered:=false; Table1.Filter:='Name=''Mustermann'''; Table1.Filter:=''; Selbst die SUCHE mit Jokern am Ende des Stringes
Delphi-Quellcode:
funktioniert und listet alle Namen mit Muster* im DBGrid auf.
//Suche mit Joker am Ende via
Table1.Filtered:=false; Table1.Filter:='Name=''Muster*'''; Table1.Filter:=''; Suche ich aber mit Joker am Anfang der Art '*mann'
Delphi-Quellcode:
bleibt die DBGrid-Liste leer.
//Suche mit Joker am Anfang via
Table1.Filtered:=false; Table1.Filter:='Name=''*mann'''; Table1.Filter:=''; Nach nächtlicher Suche habe ich heute morgen einen Kommentar gefunden, dass diese Art Suche nur mit TQuery über SQL gehen soll. ![]() Nun verstehe ich aber nicht, ob ich meine bisherige Datenbank inkl. Quelltext auf SQL umstellen muss oder die Komponente Query(DBTables) von der BDE-Komponente nur einfügen und mit TTable verbinden soll? Auch die Diskussion "TQuery oder TTable?" ![]() 1. Suche entweder mit TQuery oder TTable oder 2. Suche mit TQuery in TTable gemeint ist. Natürlich habe ich schon versucht die o.g. Komponenten einzufügen, bei der Suche via
Delphi-Quellcode:
bleibt des DBGrid aber ungefiltert!
//Suche mit Joker am Anfang via
with Query1 do begin Close; SQL.Text := 'SELECT * FROM BESTAND WHERE (Name like :suche)'; ParamByName('suche').asString := '%mann'; Open; end; Vielleicht habe ich ja die Komponente TQuery von DBTables auch nur falsch verknüpft? Ich habe da so ein merkwürdiges Fragezeichen, dass ich nicht wegbekomme, aber beim Kompilieren auch keinen Fehler verursacht. Bin für jede Hilfe dankbar. Gruß Gerd Anmerkung: Die Diskussion über Paradox und BDE habe ich bereits in aller Ausführlichkeit gelesen. Hier geht es mir nur um das Verstehen von Datenbaken. Da ich aber zur Erstellung (bzw. Umstellung) auf SQL keine so einfach Anleitung gefunden habe, habe ich die Sache damit begonnen. ![]() |
AW: Suche in Datenbank (TTable) mit Joker am Anfang
Was steht in im Parameter suche? Bei SQL lautet der Joker %
|
AW: Suche in Datenbank (TTable) mit Joker am Anfang
Zitat:
Delphi-Quellcode:
mit SQL musst Du wahrscheinlich beide Seiten betrachten:
//Suche mit Joker am Anfang via
Table1.Filtered:=false; Table1.Filter:='''mann'' $ Name'; Table1.Filter:='';
Delphi-Quellcode:
//Suche mit Joker am Anfang via
with Query1 do begin Close; SQL.Text := 'SELECT * FROM BESTAND WHERE (Name like :suche)'; ParamByName('suche').asString := '%mann%'; Open; end; |
AW: Suche in Datenbank (TTable) mit Joker am Anfang
Hallo mkinzler,
was meinst Du mit: Zitat:
Delphi-Quellcode:
..die Übergabevariable für den Suchstring ist?
//Suche mit Joker am Anfang via
with Query1 do begin Close; SQL.Text := 'SELECT * FROM BESTAND WHERE (Name like :suche)'; ParamByName('suche').asString := '%mann'; Open; end; Um alle Klarheit zu beseitigen: ================================ --> "BESTAND.DB" ist meine Paradoxdatenbank --> "Name" ist mein Spaltenbezeichner --> "%mann" ist der Suchbegriff, der aus der Spalte alle Namen mit "*mann" auflisten soll. Was ist eigentlich mit den Fragezeichen bei der TQuery-Definition ? Und wie verknüpft man TQuery mit einer TTable1 ? (Falls das ja überhaupt geht) Gruß Gerd |
AW: Suche in Datenbank (TTable) mit Joker am Anfang
Hallo joachimd,
Zitat:
Meine Tabellenspalte heißt ja name und gesucht werden alle Namen mit '*mann*' an irgeneiner Stelle. So bekomme ich jedenfalls einen Laufzeitfehler: Und mit der Sucher der Art:
Delphi-Quellcode:
bleibt mein DBGrid auch leer.
Filtered:=false;
Table1.Filter:='Name=''$mann'''; Filtered:=true; Zitat:
Ich denke, der Fehler steckt irgendwo in meiner Verknüpfung von TQuery mit TTable bzw. DBGrid. Trotzdem vielen Dank Gruß Gerd |
AW: Suche in Datenbank (TTable) mit Joker am Anfang
Zitat:
|
AW: Suche in Datenbank (TTable) mit Joker am Anfang
Es gibt hier viel zu sagen, was (zumindest auf den ersten Blick) hier falsch verstanden wird, aber die Antwort zu einer schnellen Lösung ist: das TTable-Objekt hat ein Event OnFilterRecord , in dem Du bestimmen kannst, ob ein Datensatz angezeigt werden soll. Da kannst Du mit ganz normalem Delphi-Code herausfinden, ob der DS Deinen Kriterien entspricht. Ist vllt nicht super performant, aber ich schätze, hier genügt es.
|
AW: Suche in Datenbank (TTable) mit Joker am Anfang
Zitat:
Setze also dein TQuery auf dein Datenmodul oder deine Form, stelle die im Objektinspektor (OI) Databasename ein und doppelklicke im OI auf das Feld mit der Bezeichnung SQL. Es erscheint ein Stringlisten-Editor, in dem du deinen SQL-String eingibst:
Code:
wobei Tabelle den Namen bezeichnet, den die entsprechende Tabelle in der Datenbank besitzt. Danach schaltest du im OI das Property Active auf true. Dieselbe Vorgehensweise kannst du auch im Code vornehmen. Gehen wir davon aus, dein TQuery heißt Q_Adresse und deine Tabelle Adressen:
select * from Tabelle
Delphi-Quellcode:
Möchtest du deine Tabelle nun filtern, kannst du das entweder im SQL-Feld tun:
Q_Adresse.Active := false;
Q_Adresse.SQL.Clear; Q_Adresse.SQL.Append('select * from Adressen'); Q_Adresse.Active := true;
Delphi-Quellcode:
oder eben mittels der eingebauten Filterfunktion:
Q_Adresse.Active := false;
Q_Adresse.SQL.Clear; Q_Adresse.SQL.Append('select * from Adressen where Name=Mustermann'); Q_Adresse.Active := true;
Delphi-Quellcode:
Die zweite Lösung hat die Vorteile, daß du erstens nicht ständig die Verbundung zur Tabelle trennen und wieder herstellen mußt und daß sie zweitens kürzer ist.
Q_Adresse.Filtered := false;
Q_Adresse.Filter := 'Name=Mustermann'; Q_Adresse.Filtered := true; Selbstverständlich kannst du dasselbe auch mit der TTable-Komponente erreichen, die ebenfalls über ein Filter-Property verfügt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:32 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 by Thomas Breitkreuz