Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Zweite Zeile SQLite ansprechen (https://www.delphipraxis.net/181031-zweite-zeile-sqlite-ansprechen.html)

BenneX 9. Jul 2014 13:45

Datenbank: SQLite • Version: 1111 • Zugriff über: sqlite4delphi

Zweite Zeile SQLite ansprechen
 
Hallo Leute,

Für mein nächstes Projekt brauche ich in meinem Programm eine kleine Datenbank und stehe im Moment vor folgendem Problem:

Delphi-Quellcode:
  SQLTable:= database.GetTable('SELECT * FROM Spieler ORDER BY Spielername');
  Edit1.Text:=SQLTable.FieldAsString(SQLTable.FieldIndex['Alter']);
  Edit2.Text:=SQLTable.FieldAsString(SQLTable.FieldIndex['Spielername']);

  Edit3.Text:=SQLTable.FieldAsString(SQLTable.FieldIndex['Alter']);
  Edit4.Text:=SQLTable.FieldAsString(SQLTable.FieldIndex['Spielername']);
In Edit1 und Edit2 wird korrekter Weise der erste Datensatz eingetragen.
Wie kann ich nun in Edit 3 und Edit4 den zweiten Datensatz eintragen?

Viele Grüße,
BenneX

DeddyH 9. Jul 2014 13:47

AW: Zweite Zeile SQLite ansprechen
 
Kennt Deine SQLTable die Methode Next?

mkinzler 9. Jul 2014 13:47

AW: Zweite Zeile SQLite ansprechen
 
Auf den nächsten datensatz wechseln. Wenn es sich um einen TDataSet-kompatiblen Wrapper handelt mit
Delphi-Quellcode:
SQLTable.Next;

BenneX 9. Jul 2014 13:55

AW: Zweite Zeile SQLite ansprechen
 
Wunderbar!

Delphi-Quellcode:
SQLTable.Next
hat funktioniert.

Ich danke Euch für die schnelle Hilfe und werde mich sicher nochmal zurück melden mit weiteren Fragen.

Grüße,
BenneX

BenneX 9. Jul 2014 14:14

AW: Zweite Zeile SQLite ansprechen
 
Gleich die nächste Frage hinterher:

Delphi-Quellcode:
a:='23';

  SQLBefehl := 'INSERT INTO Spieler (Koordinaten, Spielername) VALUES (a,"BenneX")';
  database.execsql(SQLBefehl);
Es muss doch möglich sein, dass Variablen als Values fungieren, oder?

Wie oben beschrieben, krieg ich nur den SQL Fehler "No such column: a"

Grüße!

baumina 9. Jul 2014 14:19

AW: Zweite Zeile SQLite ansprechen
 
http://docwiki.embarcadero.com/RADSt...agen_verwenden

und

http://docwiki.embarcadero.com/RADSt...aufzeit_setzen

Mavarik 9. Jul 2014 15:51

AW: Zweite Zeile SQLite ansprechen
 
Zitat:

Zitat von BenneX (Beitrag 1264973)
Gleich die nächste Frage hinterher:

Delphi-Quellcode:
a:='23';

  SQLBefehl := 'INSERT INTO Spieler (Koordinaten, Spielername) VALUES (a,"BenneX")';
  database.execsql(SQLBefehl);
Es muss doch möglich sein, dass Variablen als Values fungieren, oder?

Wie oben beschrieben, krieg ich nur den SQL Fehler "No such column: a"

Grüße!

Delphi-Quellcode:
SQLBefehl := 'INSERT INTO Spieler (Koordinaten, Spielername) VALUES ("'+a+'","BenneX")';
Mavarik

DeddyH 9. Jul 2014 15:58

AW: Zweite Zeile SQLite ansprechen
 
So aber nur, wenn gar nichts anderes funktioniert.

himitsu 9. Jul 2014 16:35

AW: Zweite Zeile SQLite ansprechen
 
Grundsätzlich sollte doch langsam bekannt sein, daß im "kompilierten" Programm keine Variablennamen mehr existieren und selbst wenn, woher soll der Code, innerhalb des ExcecSql-Befehls wissen welche Variable mit dem Namen "a" gemeint ist, wenn es die Codestelle doch nicht kennt, wo das A deklariert/zugänglich ist.
Man muß also die Variable oder den Kontext (z.B. ein Daten-Objekt) übergeben.

Und wenn du das "a" nunmal nicht als Parameter/Variable deklarierst, dann ist es doch klar, daß es an dieser Stelle, von der Syntax her, nur ein Feld sein kann, und da es kein Feld "a" in der Tabelle gibt, muß es auch knallen.

Wir haben uns ein eigenes ExecSql geschrieben
Delphi-Quellcode:
function xxx.ExceSql(Query: string; Params: array of variant);
, welches die übergebenen Parameter an Params übergibt.

Delphi-Quellcode:
SQLBefehl := 'INSERT INTO Spieler (Koordinaten, Spielername) VALUES (:a, "BenneX")';
DataBase.ExecSql(SQLBefehl, [a]);
Der Parametername ist hier natürlich egal, da rein auf den Index gegangen wird, also der erste Parameter-Wert geht auch an den ersten Parameter im SQLBefehl.
Delphi-Quellcode:
b := 'Position';
a := 'Spieler';
SQLBefehl := 'INSERT INTO Spieler (Koordinaten, Spielername) VALUES (:a, :b)';
DataBase.ExecSql(SQLBefehl, [b, a]);

SQLBefehl := 'INSERT INTO Spieler (Koordinaten, Spielername) VALUES (:position, :name)';
DataBase.ExecSql(SQLBefehl, [b, a]);
[/delphi]

p80286 9. Jul 2014 16:45

AW: Zweite Zeile SQLite ansprechen
 
Zitat:

Zitat von himitsu (Beitrag 1265003)
... woher soll der Code, innerhalb des ExcecSql-Befehls wissen welche Variable mit dem Namen "a" gemeint ist, wenn es die Codestelle doch nicht kennt, wo das A deklariert/zugänglich ist.

Es ist doch noch viel schlimmer. "a" ist ein Bezeichner aus dem SQL-Universum, das hat mit dem Programm nichts aber auch garnichts zu tun.

Und sonst ist nur noch zu sagen Parameter,Parameter,Parameter.........


Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:29 Uhr.
Seite 1 von 2  1 2      

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