![]() |
Datenbank: MySQL • Version: 5 • Zugriff über: ZeosLib 7
Effiziente SELECT Abfrage
Hallo,
ich stricke gerade mit Datenbanken rum, eher gesagt mit MySQL 5. Es handelt sich um die Datenbank eines Spieleservers und normalerweise greift ein Java-Programm auf diese zu, nun wollte ich allerdings auch mal versuchen, sie aus Delphi heraus zu verwalten.
Delphi-Quellcode:
Da die Datenbank frisch eingerichtet wurde, enthält sie nur den Account "admin". Dieser wird mir durch Showmessage auch angezeigt, allerdings möchte ich nun gerne machen, dass mir die üblichen Felder angezeigt werden (id, passwort etc.), aber eben nur von einem bestimmten Account. Ich könnte einfach alle Accounts durchgehen (falls mal irgendwann mehrere vorhanden sind), allerdings gibt es da sicherlich eine bessere Lösung, oder?
ZConnection1.Connected := True;
ZQuery1.SQL.Text:='Select * from accounts;'; ZQuery1.Open; while not ZQuery1.Eof do begin Showmessage(Zquery1.FieldByName('name').AsString); ZQuery1.Next; end; Ich hoffe ich bin im richtigen Forum, denn diese Frage hat eher mehr direkt mit MySQL zu tun als mit Delphi... |
Re: Effiziente SELECT Abfrage
Vereinfachte Syntax des SQL-Befehls SELECT:
SQL-Code:
In deinem Fall also etwa sowas:
SELECT [Feldname1, Feldname2, ...] FROM [Tabelle] WHERE [Bedingungen]
SQL-Code:
Ich würde dir aber empfehlen, wenn du neu in der Arbeit mit Datenbanken bist, ein Tutorial oder sowas durchzuarbeiten. SQL ist eine eigene Sprache mit nicht geringem Funktionsumfang.
SELECT (id, password, ...) FROM accounts WHERE name = 'admin'
[edit=alzaimar] "code"- durch "SQL"-Tags ersetzt. Mfg, alzaimar[/edit] |
Re: Effiziente SELECT Abfrage
Zitat:
|
Re: Effiziente SELECT Abfrage
Mpf, da hast du natürlich recht. Danke für die Berichtigung.
Und für die Zukunft merke ich mir auch, dass es hier Tags für SQL-Code gibt. |
Re: Effiziente SELECT Abfrage
Ah danke, so geht es nun:
SQL-Code:
Ich hatte sowas ähnliches auch schon versucht, aber mit diesen anderen Hochstrichen (`), mit den "normalen" aus Delphi funktioniert es aber nun.
SELECT id FROM accounts WHERE name = 'admin';
|
Re: Effiziente SELECT Abfrage
Zitat:
Delphi-Quellcode:
Query.SQL.Text := 'SELECT id, password FROM accounts WHERE name = :name';
Query.ParamByName('name').Value := 'admin'; |
Re: Effiziente SELECT Abfrage
Zitat:
|
Re: Effiziente SELECT Abfrage
Über das Format, Quoting etc. musst Du Dir bei Parametern keine Gedanken machen. Als Nebeneffekt schützen Sie außerdem vor SQL-Injection, wobei ich jetzt erst nachdenken müsste, ob diese bei Verwendung von Format() möglich wäre.
|
Re: Effiziente SELECT Abfrage
Wenn Du z.B. in einer Schleife 10x die selbe Abfrage ausführen musst, nur mit unterschiedlichen Parametern, dann muss die DB das Statement nur 1x parsen und prüfen und dann beim Ausführen nur die Werte des parameters ändern. Kann u.U. einen erheblichen Geschwindigkeitsvorteil bringen.
|
Re: Effiziente SELECT Abfrage
Danke für die Infos. Da werd ich in Zukunft mal auf die Parameter umsteigen :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 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