![]() |
Datenbank: MySQL • Version: 5.0.32 • Zugriff über: MyDAC
Suchfunktion realisieren
Hallo,
hab hier ein blödes Problem mit einer Suchfunktion die ich entworfen habe. Die Suche soll ein DbGrid, mit jedem Buchstaben aktualisieren, den ein User eintippt. Auf dem Formular liegen einige Editfenster, die die Daten aus dem DbGrid anzeigen. Wenn ein User ein best. Panel anklickt, soll die Suchfunktion quasi "aktiviert" werden, die Editfelder sollen als Suchkriterien dienen. Das Problem: Wenn ich die Suchfunktion aktiviere, ist noch der aktuelle Datensatz in den DbEdit-Feldern geladen, wodurch die Datasource annimmt, ich wollte eine Änderung am jenem Eintrag machen. Tippe ich also ein Suchkriterium ein, wird nur der aktuelle Datensatz geändert :?
Delphi-Quellcode:
procedure TmaxMain.DbEdTitelChange(Sender: TObject);
var sTitel, sStandort: string; begin if PnSearch.BevelOuter = bvLowered then begin sTitel := DbEdTitel.Text; sStandort := DbCbStandort.Text; try dbquery(QuSearch,SrcSearch,'SELECT * FROM `ma_marchiv_'+maxlogin.mydacSourceLogin.DataSet.Fields[0].AsString+'` WHERE Titel LIKE "%'+sTitel+'%" AND Standort LIKE "%'+sStandort+'%" ORDER BY Titel'); DbGrMain.DataSource := SrcSearch; except On E:Exception Do begin MessageDlg('Fehler aufgetreten: '+E.Message+'', mtError, [mbOK], 0); end end; end; end; Hoffentlich versteht jemand was ich meine ^^ Gruß Daniel |
Re: Suchfunktion realisieren
Hi,
Zwar nicht die Antwort, aber: Ich bin der böse User der
Code:
eingibt. Vielleicht habe ich ja glück und erwische das richtige XYZ ;)
"; DROP TABLE `ma_marchiv_XYZ`; --
Soll heißen: Bitte nicht direkt den Inhalt des Edits in deine SQL-Anweisung einbauen. Dann kann man beliebig herummanipulieren. ![]() Reicht es in dem Fall nicht, "normale" Edits zu nehmen? Ich kenn ja dein Programm nicht, aber für eine Suchfunktion würde ich es so machen, solange die Edits nur und ausschließlich zum Suchen da sind. Mfg FAlter |
Re: Suchfunktion realisieren
Jo danke für den Hinweis, ist noch alles im Anfangsstadium, hab mir daher bisher noch keine Gedanken über solche Dinge gemacht :wink:
Extra Felder für die Suchfunktion wollte ich eigentlich nicht erstellen, da die vorhandenen Editfelder (welche zum Eingeben/Anschauen der Daten im DbGrid gedacht sind) genauso gut die Suche übernehmen könnten. Natürlich könnte ich einfach "normale" Editfelder über die DbEdits legen und bei Bedarf sichtbar/unsichtbar machen, aber das scheint mir nicht gerade als die professionellste Lösung :roll: |
Re: Suchfunktion realisieren
Hallo,
naja, drüberlegen ist ja auch nicht proffessionell ;) Nur ein DBEdit zeigt nun mal ein Feld des aktuellen Datensatzes an. Dafür ist der da. Ihn zum Suchen zu missbrauchen, ist nicht professionell. Heiko |
Re: Suchfunktion realisieren
Und es gibt keine Möglichkeit, das temporär zu deaktivieren? Die Suche funktioniert ja mit dem DbEdit-Feld eigentlich schon, sofern man halt den automatisch geladenen Datensatz wegmacht und dann seine eigenen Eingaben eintippt. Nur wird dann halt der noch geladene Datensatz überschrieben, während die Suche läuft.
Sobald ich aber die Verbindung des Feldes zur Datasource kappe, ist das Edit-Feld auch nicht mehr editierbar :x Als brutale Lösung ginge sicherlich auch sowas wie:
Delphi-Quellcode:
Aber dann gibt's wieder 100 Sonderfälle zu beachten und es wird viel zu viel Code :wall:
procedure TmaxMain.DBEdit1KeyPress(Sender: TObject; var Key: Char);
begin if key = '1' then DbEdit1.Text := '1'; end; |
Re: Suchfunktion realisieren
Ok hab ne Lösung gefunden:
Einfach ne Art Fake Tabelle in der Datenbank erstellt, die die gleiche Struktur wie der eigentlich abzufragende Datensatz hat. Danach die DBFelder mit diesem Fake verknüpft, dadurch kann man in die DBFelder reinschreiben. Da das OnChange Ereignis sich ja nicht darum schert mit was das DBFeld verknüpft ist, sondern nur den aktuellen Text abfragt, klappt die Suche einwandfrei :) Trotzdem danke für die Denkanstöße :cheers: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 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