Von 0 auf SQL in einem Programm [gelöst]
- corpsman
- Lazarusforum e. V.
- Beiträge: 1617
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Von 0 auf SQL in einem Programm [gelöst]
Guten Morgen allerseits,
Ich wollte mir mal eine SQL Anwendung basteln, damit ich meine bisher gelernten SQL Befehle auch mal üben kann.
Also habe ich mir SQLite3 installiert und die entsprechenden Pakete für Lazarus. Genau wie es unter : http://wiki.lazarus.freepascal.org/SQLdb_Package" onclick="window.open(this.href);return false; steht.
Doch wenn ich nun meine Anwendung starte und auf Senden Klicke bekomme ich nur eine AV (can not open a non selected statement) die ich nicht verstehe.
Könnt ihr mir weiterhelfen ?
Ich wollte mir mal eine SQL Anwendung basteln, damit ich meine bisher gelernten SQL Befehle auch mal üben kann.
Also habe ich mir SQLite3 installiert und die entsprechenden Pakete für Lazarus. Genau wie es unter : http://wiki.lazarus.freepascal.org/SQLdb_Package" onclick="window.open(this.href);return false; steht.
Doch wenn ich nun meine Anwendung starte und auf Senden Klicke bekomme ich nur eine AV (can not open a non selected statement) die ich nicht verstehe.
Könnt ihr mir weiterhelfen ?
- Dateianhänge
-
sql_demo.zip
- Funktionierende Demo, benötigt nur noch einen Installierten SQLLite3 und das entsprechende Lazarus Paket
- (4.62 KiB) 58-mal heruntergeladen
Zuletzt geändert von corpsman am Di 27. Jul 2010, 18:27, insgesamt 2-mal geändert.
--
Just try it
Just try it
Re: Von 0 auf SQL in einem Programm (Hilfe für einen Anfänger)
Es macht einen Unterschied, ob man vorhandene Daten anzeigen lassen will (Select...), oder ob man neue Daten hinzufügen will (Insert..., Create...). Du willst letzteres, hast deinen Code aber für ersteres ausgelegt. Statt SQLQuery1.Active würde ich SQLQuery1.ExecSQL gefolgt von SQLTransaction1.Commit verwenden.
knight
knight
- corpsman
- Lazarusforum e. V.
- Beiträge: 1617
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Von 0 auf SQL in einem Programm (Hilfe für einen Anfänger)
*g*
An der Uni haben wir prinzipiell zwischen solchen Befehlen nicht unterschieden *g*
ein zweiter Button und :
und die Tabelle kann ich anlegen *g*
Wenn ich nun gemäß :
http://reeg.junetz.de/DSP/node10.html#S ... 0000000000" onclick="window.open(this.href);return false;
ein
Und die 2. Frage die sich mir natürlich gleich aufdrängt, gibt es eine Liste, in welcher steht, welche Befehle ich mit welchem "verfahren" behandeln muss?
Und die allerwichtigste Frage, wo lese ich die Antwort der SQL Datenbank aus ?
An der Uni haben wir prinzipiell zwischen solchen Befehlen nicht unterschieden *g*
ein zweiter Button und :
Code: Alles auswählen
procedure TForm1.Button2Click(Sender: TObject);
begin
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Text := memo1.Text;
SQLQuery1.ExecSQL;
SQLTransaction1.Commit;
end;
Wenn ich nun gemäß :
http://reeg.junetz.de/DSP/node10.html#S ... 0000000000" onclick="window.open(this.href);return false;
ein
eingebe, bekomme ich aber bei beiden buttons einen Syntax fehler für show.show tables;
Und die 2. Frage die sich mir natürlich gleich aufdrängt, gibt es eine Liste, in welcher steht, welche Befehle ich mit welchem "verfahren" behandeln muss?
Und die allerwichtigste Frage, wo lese ich die Antwort der SQL Datenbank aus ?
--
Just try it
Just try it
-
- Beiträge: 359
- Registriert: Mi 27. Mai 2009, 20:54
- OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
- CPU-Target: x86
- Wohnort: Cottbus
Re: Von 0 auf SQL in einem Programm (Hilfe für einen Anfänger)
Open wird immer dann aufgerufen wenn etwas zurück erwartet wird (select, show) und ein ExecSQL wenn etwas an der Datenbank verändert wird (insert, update, delete, ...).
Ich hoffe das hilft dir weiter.
Gruß Teekeks
Ich hoffe das hilft dir weiter.
Gruß Teekeks
- corpsman
- Lazarusforum e. V.
- Beiträge: 1617
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Von 0 auf SQL in einem Programm (Hilfe für einen Anfänger)
Wie man die Tabelle auslesen kann habe ich nun auch raus gefunden *freu*
Die Frage ist nun, wenn ich es wirklich nur als Reine Ausgabe mache, geht dass dann auch "Eleganter" ?
der Befehl "Show Tables;" geht immer noch nicht ...
Code: Alles auswählen
Procedure TForm1.Button1Click(Sender: TObject);
Var
f: TField;
s: TStringlist;
c, i: Integer;
Begin
SQLQuery1.Active := false;
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Text := memo1.Text;
SQLQuery1.Open;
StringGrid1.ColCount := SQLQuery1.Fields.Count;
// Wenn überhaupt etwas ausgelesen werden konnte
If SQLQuery1.Fields.Count <> 0 Then Begin
StringGrid1.RowCount := 1;
// Die Labels Setzen
s := TStringlist.create;
SQLQuery1.Fields.GetFieldNames(s);
For i := 0 To s.count - 1 Do Begin
StringGrid1.Cells[i, 0] := s[i];
End;
// Auslesen aller gesendeter Daten
c := 0;
While (Not SQLQuery1.EOF) And (c < 10) Do Begin
inc(c);
StringGrid1.RowCount := StringGrid1.RowCount + 1;
For i := 0 To s.count - 1 Do Begin
f := SQLQuery1.Fields.FieldByName(s[i]);
If assigned(f) Then Begin
Case f.DataType Of
ftInteger: StringGrid1.Cells[i, StringGrid1.RowCount - 1] := inttostr(f.AsInteger);
ftString: StringGrid1.Cells[i, StringGrid1.RowCount - 1] := f.AsString;
End;
End;
End;
SQLQuery1.Next;
End;
s.free;
StringGrid1.FixedCols := 0;
StringGrid1.FixedRows := 1;
End;
End;
der Befehl "Show Tables;" geht immer noch nicht ...
--
Just try it
Just try it
Re: Von 0 auf SQL in einem Programm (Hilfe für einen Anfänger)
Ist ja auch klar, schließlich gibt es diesen Befehl nur in MySQL.der Befehl "Show Tables;" geht immer noch nicht ...
- corpsman
- Lazarusforum e. V.
- Beiträge: 1617
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Von 0 auf SQL in einem Programm (Hilfe für einen Anfänger)
Damn,
d.h. ich muss also doch MySQL auf meinem System zum laufen bekommen, will ich in den vollen Genus aller SQL-Befehle bekommen ?
-> und das bedeutet dann einen Server installieren und die entsprechenden Clientlibs, oder sehe ich das falsch ?
Hatte SQLite ja deswegen genommen, weil ich die anderen nicht auf meinem Linux zum laufen bekommen hatte, bzw weil ich da nur das Paket sqllite3 installieren musste.
d.h. ich muss also doch MySQL auf meinem System zum laufen bekommen, will ich in den vollen Genus aller SQL-Befehle bekommen ?
-> und das bedeutet dann einen Server installieren und die entsprechenden Clientlibs, oder sehe ich das falsch ?
Hatte SQLite ja deswegen genommen, weil ich die anderen nicht auf meinem Linux zum laufen bekommen hatte, bzw weil ich da nur das Paket sqllite3 installieren musste.
--
Just try it
Just try it
Re: Von 0 auf SQL in einem Programm (Hilfe für einen Anfänger)
Nicht zwangsläufig, selbst wenn du MySQL installiert hast benötigst du den Befehl SHOW TABLES; doch eher selten, in Sqlite kannst du den Befehl nachbilden.d.h. ich muss also doch MySQL auf meinem System zum laufen bekommen, will ich in den vollen Genus aller SQL-Befehle bekommen ?
Code: Alles auswählen
SELECT name FROM sqlite_master
WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'
UNION ALL
SELECT name FROM sqlite_temp_master
WHERE type IN ('table','view')
ORDER BY 1
http://www.sqlite.org/sqlite.html" onclick="window.open(this.href);return false;
- corpsman
- Lazarusforum e. V.
- Beiträge: 1617
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Von 0 auf SQL in einem Programm (Hilfe für einen Anfänger)
Cool, das funktioniert,
ja ich suche gerade auch schon nach den Unterschieden zwischen Mysql und SQLite, da ich ja nur vorhabe es für Lehrzwecke ein zu setzen, müsste auch sqlite gehen *g*
danke an alle Helfer, ich aktualisiere noch meine Anwendung in Post1, auf das zukünftige *neugierige* gleich eine Demo zum spielen haben...
ja ich suche gerade auch schon nach den Unterschieden zwischen Mysql und SQLite, da ich ja nur vorhabe es für Lehrzwecke ein zu setzen, müsste auch sqlite gehen *g*
danke an alle Helfer, ich aktualisiere noch meine Anwendung in Post1, auf das zukünftige *neugierige* gleich eine Demo zum spielen haben...
--
Just try it
Just try it
-
- Lazarusforum e. V.
- Beiträge: 3177
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Von 0 auf SQL in einem Programm [gelöst]
MySQL arbeitet immer über einen Datenbank-Server, der alle Anfragen bearbeitet. SQLite ist nur eine Bibliothek, die einzelne Dateien (=Datenbank) verwaltet. Beide haben ihre eigenen Vorteile in unterschiedlichen Einsatzbereichen. Du solltest aber darauf achten, dass SQLite den SQL-Sprachstandard sehr viel strikter auslegt/weniger davon abweicht. Ein SQL-Befehl für SQLite wird unter MySQL wahrscheinlich nicht funktionieren.corpsman hat geschrieben:ja ich suche gerade auch schon nach den Unterschieden zwischen Mysql und SQLite, da ich ja nur vorhabe es für Lehrzwecke ein zu setzen, müsste auch sqlite gehen *g*
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Re: Von 0 auf SQL in einem Programm [gelöst]
Wenn sich SQLite stärker an den SQL-Standard hält ist es eher wahrscheinlich das ein Statement welches in SQLite funktioniert auch in MySQL funktioniert, umgekehrt ist eher das ein Statement welches in MySQL funktioniert eben nicht in SQLite funktioniert.Du solltest aber darauf achten, dass SQLite den SQL-Sprachstandard sehr viel strikter auslegt/weniger davon abweicht. Ein SQL-Befehl für SQLite wird unter MySQL wahrscheinlich nicht funktionieren.
Dazu weicht MySQL viel zu sehr vom Standard ab, angefangen bei GROUP BY und des automatischen Typecastings.
Code: Alles auswählen
SELECT Feld1, Feld2, COUNT(*)
FROM tabelle
GROUP BY Feld1
Code: Alles auswählen
SELECT '10euro' * 100
Zu SQL lernen halte ich jedenfalls MySQL als absolut nicht geeignet, ich muß allerdings dazu erwähnen das ich SQLite in der Hinsicht nicht so gut kenne.
-
- Lazarusforum e. V.
- Beiträge: 3177
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Von 0 auf SQL in einem Programm [gelöst]
Als Pascal-Programmierer bin ich eine klare Syntax gewohnt. Bei MySQL weiß ich nicht, wann ich welche Zeichen zur Kennzeichnung von Strings, Tabellen/Datenbanken (allgemein Identifikatoren) usw. einsetzen muss. In der SQLite Dokumentation stehts wenigstens schnell auffindbar drinnen.DiBo33 hat geschrieben:Zu SQL lernen halte ich jedenfalls MySQL als absolut nicht geeignet, ich muß allerdings dazu erwähnen das ich SQLite in der Hinsicht nicht so gut kenne.
Der andere Teil an SQLite ist die einfache API. Mit der kam ich ich wesentlich schneller klar, als mit den Lazarus-Komponenten. Vergleichen mit MySQL kann ich das aber nicht.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Re: Von 0 auf SQL in einem Programm [gelöst]
Oh das ist eigentlich ganz einfach.Bei MySQL weiß ich nicht, wann ich welche Zeichen zur Kennzeichnung von Strings, Tabellen/Datenbanken (allgemein Identifikatoren) usw. einsetzen muss.
Alles was ein Wert beinhaltet, sofern es kein numerischer Wert ist, gehört in Anführungszeichen (Strings, Datum, etc.), also so wie in jedem anderen DBMS.
Alle Objektbezeichner welche ungültig (incl. Leerzeichen, bestehend aus Zahl etc.) oder reservierte Wörter darstellen (ALTER, FROM etc.) müssen in Backticks, bei Vermeidung solcher Objektbezeichner brauchst du die Backticks niemals.
MySQL ist das PHP unter den DBMS

-
- Lazarusforum e. V.
- Beiträge: 3177
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Von 0 auf SQL in einem Programm [gelöst]
Ich für meinen Teil kann dann aber schneller erkennen, was ein Identifikator (Datenbank/Tabelle/Spalte), ein SQL-Keyword oder ein Wert ist. Ansonsten habe nur einen Unterschied zwischen Strings und allem anderen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein