Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Effiziente SELECT Abfrage (https://www.delphipraxis.net/137795-effiziente-select-abfrage.html)

WorstNightmare 28. Jul 2009 23:45

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:
  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;
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?

Ich hoffe ich bin im richtigen Forum, denn diese Frage hat eher mehr direkt mit MySQL zu tun als mit Delphi...

FaTaLGuiLLoTiNe 28. Jul 2009 23:57

Re: Effiziente SELECT Abfrage
 
Vereinfachte Syntax des SQL-Befehls SELECT:

SQL-Code:
SELECT [Feldname1, Feldname2, ...] FROM [Tabelle] WHERE [Bedingungen]
In deinem Fall also etwa sowas:

SQL-Code:
SELECT (id, password, ...) FROM accounts WHERE name = 'admin'
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.

[edit=alzaimar] "code"- durch "SQL"-Tags ersetzt. Mfg, alzaimar[/edit]

alzaimar 29. Jul 2009 05:07

Re: Effiziente SELECT Abfrage
 
Zitat:

Zitat von FaTaLGuiLLoTiNe
SQL-Code:
SELECT (id, password, ...) FROM accounts WHERE name = 'admin'

Ohne Klammern wär's besser.

FaTaLGuiLLoTiNe 29. Jul 2009 05:26

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.

WorstNightmare 29. Jul 2009 10:06

Re: Effiziente SELECT Abfrage
 
Ah danke, so geht es nun:
SQL-Code:
  SELECT id FROM accounts WHERE name = 'admin';
Ich hatte sowas ähnliches auch schon versucht, aber mit diesen anderen Hochstrichen (`), mit den "normalen" aus Delphi funktioniert es aber nun.

DeddyH 29. Jul 2009 10:17

Re: Effiziente SELECT Abfrage
 
Zitat:

Zitat von alzaimar
Zitat:

Zitat von FaTaLGuiLLoTiNe
SQL-Code:
SELECT (id, password, ...) FROM accounts WHERE name = 'admin'

Ohne Klammern wär's besser.

Mit Parametern wär's noch besser :zwinker:
Delphi-Quellcode:
Query.SQL.Text := 'SELECT id, password FROM accounts WHERE name = :name';
Query.ParamByName('name').Value := 'admin';

hitzi 29. Jul 2009 10:47

Re: Effiziente SELECT Abfrage
 
Zitat:

Zitat von DeddyH
Mit Parametern wär's noch besser :zwinker:

Ich nutze dazu immer die Format Funktion. Haben die Parameter einen Vorteil gegenüber Format?

DeddyH 29. Jul 2009 10:51

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.

Nersgatt 29. Jul 2009 10:52

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.

hitzi 29. Jul 2009 10:58

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 19:03 Uhr.
Seite 1 von 3  1 23      

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