AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Suchfunktion realisieren
Thema durchsuchen
Ansicht
Themen-Optionen

Suchfunktion realisieren

Ein Thema von Postman1986 · begonnen am 30. Jul 2007 · letzter Beitrag vom 31. Jul 2007
Antwort Antwort
Postman1986

Registriert seit: 24. Jul 2007
Ort: Trier
31 Beiträge
 
#1

Suchfunktion realisieren

  Alt 30. Jul 2007, 19:46
Datenbank: MySQL • Version: 5.0.32 • Zugriff über: MyDAC
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
Daniel
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Suchfunktion realisieren

  Alt 30. Jul 2007, 20:03
Hi,

Zwar nicht die Antwort, aber:

Ich bin der böse User der

Code:
"; DROP TABLE `ma_marchiv_XYZ`; --
eingibt. Vielleicht habe ich ja glück und erwische das richtige XYZ

Soll heißen: Bitte nicht direkt den Inhalt des Edits in deine SQL-Anweisung einbauen. Dann kann man beliebig herummanipulieren. Bei Google suchensql injection

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
Felix Alter
  Mit Zitat antworten Zitat
Postman1986

Registriert seit: 24. Jul 2007
Ort: Trier
31 Beiträge
 
#3

Re: Suchfunktion realisieren

  Alt 30. Jul 2007, 20:11
Jo danke für den Hinweis, ist noch alles im Anfangsstadium, hab mir daher bisher noch keine Gedanken über solche Dinge gemacht


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
Daniel
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Suchfunktion realisieren

  Alt 30. Jul 2007, 20:34
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
Heiko
  Mit Zitat antworten Zitat
Postman1986

Registriert seit: 24. Jul 2007
Ort: Trier
31 Beiträge
 
#5

Re: Suchfunktion realisieren

  Alt 30. Jul 2007, 21:51
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

Als brutale Lösung ginge sicherlich auch sowas wie:
Delphi-Quellcode:
procedure TmaxMain.DBEdit1KeyPress(Sender: TObject; var Key: Char);
begin
if key = '1then DbEdit1.Text := '1';
end;
Aber dann gibt's wieder 100 Sonderfälle zu beachten und es wird viel zu viel Code
Daniel
  Mit Zitat antworten Zitat
Postman1986

Registriert seit: 24. Jul 2007
Ort: Trier
31 Beiträge
 
#6

Re: Suchfunktion realisieren

  Alt 31. Jul 2007, 16:10
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
Daniel
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz