Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Suchfunktion mit DBEdit (https://www.delphipraxis.net/78903-suchfunktion-mit-dbedit.html)

Mr_G 12. Okt 2006 22:05

Datenbank: MySQL • Version: 5.0 • Zugriff über: Zeos

Suchfunktion mit DBEdit
 
Hallo erstmal,
ich habe momentan folgendes Problem: Ich habe eine Eingabemaske, bestehend aus mehreren DBEdits, die mit einer Datasource verbunden sind. Außerdem hängt noch ein DBGrid an der Datasource. Die normalen Vorgänge funktionieren wunderbar aber ich würde die Edits auch gerne nutzen, um nach den dort gemachten Eingaben zu suchen. Das Problem das sich dabei stellt ist natürlich wie kann ich die DBEdits dazu bekommen Eingaben nicht auf die Datenbank zu beziehen sondern den Inhalt so als Text zu behandeln wie ein normales Edit.
Ich habe mir das dann so vorgestellt, dass der Benutzer auf einen Knopf oder sonstwas drückt um in den "Such"-Modus zu wechseln. Danach kann er die Edits nutzen um Schlüsselwörter für die verschiedenen Felder einzugeben und nach eben diesen Wörtern sollte dann gesucht werden, bis der Benutzer den "Such"-Modus wieder verlässt und über die Maske ganz normal die Datensätze weiter bearbeitet.
Wenn ich aber bei den DBEdits die Verbindung zur Datenbank kappe kann man überhaupt nichts mehr hineinschreiben.
Meine Frage nun also: Wie und mit welcher Komponente kann ich die gewünschten Funktionen am einfachsten realisieren?
Vielen Dank im Voraus
Mr_G

P.S.: Die Suche wollte ich bewerkstelligen, indem ich die Abfrage des Querys, aus dem alle beschriebenen Kompos ihre Daten über die Datasoure erhalten, ändere. Ich bin gerne bereit dieses Idee -falls für eine adäquate Lösung nötig- aufzugeben ;)

mkinzler 12. Okt 2006 22:12

Re: Suchfunktion mit DBEdit
 
Du könntest einen normalen edit nehmen, den du dann halt manuell füllen mußt.

Mr_G 12. Okt 2006 22:25

Re: Suchfunktion mit DBEdit
 
Auf diese Idee bin ich auch schon gekommen. Ich habe die Idee jedoch wieder verworfen da ich keinen Weg gefunden habe das verwendte DBGrid mit normalen Edits zu koppeln. Ich dachte man könnte vielleicht aus der Datasource den aktuellen Datensatz auslesen und darauf reagieren, wenn ein anderer ausgewählt wird aber das ist mir nicht gelungen. Auch mittels des Grids habe ich keinen Weg gefunden.

mkinzler 12. Okt 2006 22:27

Re: Suchfunktion mit DBEdit
 
Ein DataSet hat die Eigenschaft .AfterScroll, welches nach dem Verschieben des Datrensatzzeigers ausgelöst wird.

Hansa 13. Okt 2006 00:11

Re: Suchfunktion mit DBEdit
 
Ich sags gleich : so ganz einfach geht das nicht ! Verwende am besten ein separates Suchformular. Habe mal bei mir nachgeguckt : klicke ich "suchen" an, dann öffnet sich ein anderes Formular und ich gebe meine Werte ein, nach denen gesucht wird. Daraus wird ein SQL-Statement zusammengebaut, was eine Datenmenge (=DataSet) zurückliefert. Der User hat nun irgendwann den richtigen Datensatz gefunden. Das wars im Prinzip. Das erste Formular erhält das Dataset für DBEDits usw. des Suchforms als Datasource zugewiesen und fertig.

Mr_G 13. Okt 2006 14:28

Re: Suchfunktion mit DBEdit
 
Also ich habe mir die Ereignisse mal angesehen und muss zugeben das DBEdit mit einem Edit nachzubauen ist doch recht aufwändig. Andererseits wollte ich ja gerade eine zusätzliche Eingabemaske für die Suche vermeiden.
Gibt es wirklich keine andere bzw. einfacherere Möglichkeit?

mkinzler 13. Okt 2006 16:10

Re: Suchfunktion mit DBEdit
 
Zitat:

Gibt es wirklich keine andere bzw. einfacherere Möglichkeit?
keine mir bekannte.

Hansa 13. Okt 2006 18:30

Re: Suchfunktion mit DBEdit
 
Zitat:

Zitat von Mr_G
...und muss zugeben das DBEdit mit einem Edit nachzubauen ist doch recht aufwändig. ...
Andererseits wollte ich ja gerade eine zusätzliche Eingabemaske für die Suche vermeiden.

Wer will denn die DBEdits nachbauen ? Wozu das ? Ohne Extra-Suchform wird so was schnell unübersichtlich. Der User muß ohne lange nachzudenken sofort sehen, ob er was sucht, oder etwas eingeben kann. Benutze ich dazu dasselbe Formular, dann merkt er es eventuell nicht und die DBEdits sind dann auch tatsächlich für die Katz. Eventuell verändert er sogar wegen eingegebener Suchbegriffe den Original-Datenbestand ! :wall:

In meinem Beispiel benutze ich in der Suchform tatsächlich nur normale Edits. Wenn der gewünschte Datensatz gefunden wurde, dann wird er allerdings auf der zu bearbeitenden Form angezeigt und zwar mit DBEdits usw.

marabu 13. Okt 2006 20:31

Re: Suchfunktion mit DBEdit
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Jan,

technisch gesehen ist es kein Problem die DBEdit-Komponenten auch für die Abfrage von Suchbegriffen (QBF, Query-By-Form) zu verwenden. Grundsätzlich würde ich dafür keine datensensitiven Controls verwenden, aber wenn du es möchtest, so ist es nicht schwer. Die Suche muss dann in zwei Phasen ablaufen. In der ersten Phase wird das DataSet in den Insert-Mode geschaltet und in der zweiten werden die Suchwerte eingesammelt und lokalisiert. Das Hauptproblem bei dieser Vorgehensweise ist nicht die Verwendung der DBEdit-Controls, sondern die eigentliche Suche. In meiner Demo habe ich einen minimalistischen Ansatz über die Methode Locate() einer Table gewählt, der mich mit wenig Code auskommen lässt. Allerdings beinhaltet die Methode Locate() Stolpersteine, derentwegen ich dir raten würde anders vorzugehen (SQL WHERE-Klausel).

Gute Nacht

Mr_G 13. Okt 2006 23:10

Re: Suchfunktion mit DBEdit
 
@marabu:
Vielen Dank für die Demo! Ich werde sie mir morgen mal ansehen und versuchen sie zu verwerten.

@Hansa:
1.
Zitat:

Zitat von Hansa
Wer will denn die DBEdits nachbauen ?

Zitat:

Zitat von mkinzler
Du könntest einen normalen edit nehmen, den du dann halt manuell füllen mußt.

In meinen Augen: Funktionalität "nachbilden/-bauen".

2.
In der Anwendung um die es geht verhält es sich so, dass der Benutzer mehrere Tabellen mit jeweils 5 bis 15 Feldern verwalten können soll. Ich fände es äußerst ungünstig wenn man dann für jede der Tabellen nochmal ein extra Formular anlegt wenn der Benutzer doch alles schön kompakt in seiner Oberfläche haben kann anstatt hier und da neue Fenster öffnen zu müssen. Und damit er sich nicht vertut schreibt man einfach groß drüber ob er gerade im Suchmodus oder im Editiermodus ist ;). Letzenendes ist es eine Geschmacksfrage und ich habe eben diesen Geschmack und versuche eine Lösung für das daraus resultierende Problem zu finden.

Hansa 14. Okt 2006 00:13

Re: Suchfunktion mit DBEdit
 
Zitat:

Zitat von Mr_G
...Ich fände es äußerst ungünstig wenn man dann für jede der Tabellen nochmal ein extra Formular anlegt.
...
Und damit er sich nicht vertut schreibt man einfach groß drüber ob er gerade im Suchmodus oder im Editiermodus ist ;)...

Zuerst zum 2. Zitat : er wird es trotzdem nicht sehen ! Wetten ? Murphy würde mir Recht geben. :mrgreen:

Zur Frage an sich : inwiefern muß für jede Tabelle, die angesprochen wird, ein neues Form angelegt werden ? :shock: Du mußt Dir mal FieldByName &Co. ansehen. Es ist doch wohl kein Problem, dies zu verwenden, um ein Datenbank-Feld an ein Edit so zu übergeben ? Marabus Beispiel gucke ich mir jetzt nicht mehr an, aber egal wie, überall ist nachzulesen, daß die DB-Komponenten schnell an ihre Grenzen stoßen. Ich kann das nur bestätigen. Benutzt wird im Prinzip nur DBEdit und DBText.

Mr_G 21. Okt 2006 11:07

Re: Suchfunktion mit DBEdit
 
Sorry das ich erst jetzt wieder antworte aber ich hatte in den letzten Tagen keine Zeit.

@marabu:
Vielen Dank nochmal für dein Beispiel. Es war im Prinzip genau das, was ich gesucht habe. Aufgrund einiger anderer Schwierigkeiten, die ich mit den DBEdits habe, werde ich für die Suche nun wohl doch normale Edits nehmen.

@Hansa:
Zitat:

Zitat von Hansa
Zuerst zum 2. Zitat : er wird es trotzdem nicht sehen ! Wetten ? Murphy würde mir Recht geben. :mrgreen:

Ich bin weiterhin der Meinung, das man das Interface so gestalten kann, dass der Benutzer weiß, wo er sich befindet. Falls er Farbabsetzungen und Beschriftungen nicht erkennt ist er auch nicht qualifiziert das Programm in anderen Belangen zu bedienen. Letztlich bleibt es nunmal eine Geschmacksfrage wie man so etwas gestaltet.

Zitat:

Zitat von Hansa
Zur Frage an sich : inwiefern muß für jede Tabelle, die angesprochen wird, ein neues Form angelegt werden ? :shock: Du mußt Dir mal FieldByName &Co. ansehen. Es ist doch wohl kein Problem, dies zu verwenden, um ein Datenbank-Feld an ein Edit so zu übergeben ?

Ich möchte jedoch falls zum Beispiel Adressen in der Tabelle gespeichert sind die jeweiligen Edits entsprechend einer Adressangabe anordnen. Da die zu verwaltenden Tabellen aber sehr unterschiedlich sind lohnt sich eine dynamische Umsetzung meiner Meinung nicht, da diese dann zu aufwändig wird.

Zitat:

Zitat von Hansa
Marabus Beispiel gucke ich mir jetzt nicht mehr an, aber egal wie, überall ist nachzulesen, daß die DB-Komponenten schnell an ihre Grenzen stoßen. Ich kann das nur bestätigen.

Wie oben gesagt: Ich musste dies nun auch feststellen und werde jetzt normale Edits verwenden.

Danke für eure Hilfe :dp:


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-2025 by Thomas Breitkreuz