Bei welchem Ereigniss ruft man Commit auf?
Bei welchem Ereigniss ruft man Commit auf?
Hallo,
da ich nicht weiterkomme habe ich mich hier angemeldet. Ich kann keine Daten in eine MySQL Datenbank schreiben. Das muss, glaube ich, am Commit liegen? Soviel habe ich hier schon gelesen. Aber wo ruft man Commit auf? Im Moment sieht das bei mir so aus:
XAMPP mit MySQL 5.5.27 installiert und Datenbank erstellt.
Datenbank teilweise mit phpMyAdmin mit Daten gefüllt.
Lazarus 1.0.8 installiert
Projekt mit Hauptformular und DatenModul erstellt:
- im Hauptformular DBEdit Komponenten, ein DBGrid und ein DBNavigator
- im DatenModul MySQL55Connection > SQLTransaction > SQLQuery > Datasource
- in SQLQuery "SELECT * FROM `tabellenname`" eingetragen
Ich kann nun in der Entwicklungsumgebung sowie zur Laufzeit die Daten der MySQL Datenbank sehen und während der Laufzeit auch mit dem DBNavigator darin scrollen. Kann aber keine Veränderungen vornehmen.
Mache ich da irgendwo einen grundsätzlichen Fehler in der Anordnung?
Und ein zweites Problem ist, wenn ich versuche Felder des Typ INT zu editieren, erscheint die Meldung:
"SQLQuery:FieldID is requiered, but not supplied.
Muss ich da den Text aus dem DBEdit Feld erst un einen String umwandeln?
Ich habe mal mit Delphi 6 eine Datenbank erstellt, die auf eine Access Datei zugegriffen hat. Da hat das alles sehr gut funktioniert. Hat Lazarus denn die selben Möglichkeiten wie Delphi 6 Prof wenn es um Datenbanken geht oder muss man da sehr viel mehr Wissen mitbringen?
Gruss Matze
da ich nicht weiterkomme habe ich mich hier angemeldet. Ich kann keine Daten in eine MySQL Datenbank schreiben. Das muss, glaube ich, am Commit liegen? Soviel habe ich hier schon gelesen. Aber wo ruft man Commit auf? Im Moment sieht das bei mir so aus:
XAMPP mit MySQL 5.5.27 installiert und Datenbank erstellt.
Datenbank teilweise mit phpMyAdmin mit Daten gefüllt.
Lazarus 1.0.8 installiert
Projekt mit Hauptformular und DatenModul erstellt:
- im Hauptformular DBEdit Komponenten, ein DBGrid und ein DBNavigator
- im DatenModul MySQL55Connection > SQLTransaction > SQLQuery > Datasource
- in SQLQuery "SELECT * FROM `tabellenname`" eingetragen
Ich kann nun in der Entwicklungsumgebung sowie zur Laufzeit die Daten der MySQL Datenbank sehen und während der Laufzeit auch mit dem DBNavigator darin scrollen. Kann aber keine Veränderungen vornehmen.
Mache ich da irgendwo einen grundsätzlichen Fehler in der Anordnung?
Und ein zweites Problem ist, wenn ich versuche Felder des Typ INT zu editieren, erscheint die Meldung:
"SQLQuery:FieldID is requiered, but not supplied.
Muss ich da den Text aus dem DBEdit Feld erst un einen String umwandeln?
Ich habe mal mit Delphi 6 eine Datenbank erstellt, die auf eine Access Datei zugegriffen hat. Da hat das alles sehr gut funktioniert. Hat Lazarus denn die selben Möglichkeiten wie Delphi 6 Prof wenn es um Datenbanken geht oder muss man da sehr viel mehr Wissen mitbringen?
Gruss Matze
Re: Bei welchem Ereigniss ruft man Commit auf?
Mit SELECT holst du Daten aus der Datenbank. Um Daten in eine Datenbank zu schreiben benötigst du andere Befehle (z.B. INSERT). Das ist unabhängig von der verwendeten Entwicklungsumgebung.
knight
knight
Re: Bei welchem Ereigniss ruft man Commit auf?
das ist korrekt, aber wenn man in Delphi einen einfachen select über Query mit RequestLive=true hat und einen DB-Navigator nutzt wird ein notwendiger insert oder update automatisch generiert.knight hat geschrieben:Mit SELECT holst du Daten aus der Datenbank. Um Daten in eine Datenbank zu schreiben benötigst du andere Befehle (z.B. INSERT). Das ist unabhängig von der verwendeten Entwicklungsumgebung.
Geht grundsätzlich bei Lazarus genau so gut, aber ich setze ausschließlich ZEOS unter Lazarus (und Delphi) ein.
hde
-
- Beiträge: 298
- Registriert: Di 23. Nov 2010, 23:41
- OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
- CPU-Target: 32Bit/64Bit
- Wohnort: Geldern
- Kontaktdaten:
Re: Bei welchem Ereigniss ruft man Commit auf?
Ich nutze diese Komponenten nicht aber ich würde die TSqlTransaction nicht nutzen, denn sonst muss der DBNavigator den Commit ausführen, nach dem Updaten der Daten. Wenn Du keine TSqlTransaction nutzt brauchst Du kein Commit und Update sollte der DBNavigator eigentlich schon standardmäßig mitbringen.
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
Re: Bei welchem Ereigniss ruft man Commit auf?
Danke für die Antworten.
Das man mit SELECT nur Daten anzeigen kann ist mir schon klar. Ich dachte nur eine SELECT Abfrage muss in der Query Komponente stehen, um in der Entwicklungsumgebung überhaupt Daten sehen zu können. Zur Laufzeit kann ich dann ja alle möglichen SQL Abfragen zuweisen, also auch INSERT. Nur dachte ich, dass der DBNavigator soetwas standardmässig erledigt.
Habe ich das jetzt richtig verstanden, ich benötige die TSqlTransaction Komponente gar nicht? Also einfach so:
DatenModul: MySQL55Connection --> SQLQuery --> Datasource
Hauptformular: DBNavigator, DBEdit, DBGrid
Matze
Das man mit SELECT nur Daten anzeigen kann ist mir schon klar. Ich dachte nur eine SELECT Abfrage muss in der Query Komponente stehen, um in der Entwicklungsumgebung überhaupt Daten sehen zu können. Zur Laufzeit kann ich dann ja alle möglichen SQL Abfragen zuweisen, also auch INSERT. Nur dachte ich, dass der DBNavigator soetwas standardmässig erledigt.
Habe ich das jetzt richtig verstanden, ich benötige die TSqlTransaction Komponente gar nicht? Also einfach so:
DatenModul: MySQL55Connection --> SQLQuery --> Datasource
Hauptformular: DBNavigator, DBEdit, DBGrid
Matze
-
- Beiträge: 298
- Registriert: Di 23. Nov 2010, 23:41
- OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
- CPU-Target: 32Bit/64Bit
- Wohnort: Geldern
- Kontaktdaten:
Re: Bei welchem Ereigniss ruft man Commit auf?
Also ich gehe davon aus das es so wie früher bei Delphi ist:
Mit Zeos sollte das auch gehen, da nimmst Du halt:
- Dbf1.TableName := 'beispiel.db'; //TDbf
- DataSource1.DataSet := Dbf1; //TDataSource
- DBNavigator1.DataSource := DataSource1; //TDBNavigator
- DBEdit1.DataSource := DataSource1;//TDBEdit
- DBEdit1.DataField := 'TestFeld';
- DBGrid1.DataSource := DataSource1; //TDBGrid
- DBGrid1.Columns.item[0].FieldName := 'TestFeld';
Mit Zeos sollte das auch gehen, da nimmst Du halt:
- ZConnection1. ...; //TZConnection, Definition deiner Datenbank Verbindung
- ZTable1.TableName := 'beispiel'; //TZTable
- ZTable1.Connection := ZConnection1;
- DataSource1.DataSet := ZTable1;
Zuletzt geändert von gocher am Mi 12. Jun 2013, 15:42, insgesamt 3-mal geändert.
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
Re: Bei welchem Ereigniss ruft man Commit auf?
offenbar nicht so ganzMatze hat geschrieben:Habe ich das jetzt richtig verstanden,

Re: Bei welchem Ereigniss ruft man Commit auf?
Das kann funktionieren, muss es aber nicht, so daß ich grundsätzlich davon abraten würde.hde hat geschrieben: das ist korrekt, aber wenn man in Delphi einen einfachen select über Query mit RequestLive=true hat und einen DB-Navigator nutzt wird ein notwendiger insert oder update automatisch generiert.
hde
knight
-
- Beiträge: 298
- Registriert: Di 23. Nov 2010, 23:41
- OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
- CPU-Target: 32Bit/64Bit
- Wohnort: Geldern
- Kontaktdaten:
Re: Bei welchem Ereigniss ruft man Commit auf?
Ein solches Vorgehen würde ich wenn überhaupt nur für Desktop-Datenbanken anwenden, konkurrierende Zugriffe und so... ! Deshalb mein Beispiel mit einer Desktop-Datenbank!!!!hde hat geschrieben: das ist korrekt, aber wenn man in Delphi einen einfachen select über Query mit RequestLive=true hat und einen DB-Navigator nutzt wird ein notwendiger insert oder update automatisch generiert.
hde
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
Re: Bei welchem Ereigniss ruft man Commit auf?
Also ich lasse jetzt den DBNavigator ganz weg und versuche einfach die SQL Befehle zur Laufzeit über die Query zuzuweisen. Mal sehen, ist ja nicht schlecht mehrere Möglichkeiten auszuprobieren. Die ZEOS Komponenten habe ich nicht installiert. Aber fast jeder schreibt, dass er die benutzt. Sind die soviel besser als die Lazarus Komponenten?
Re: Bei welchem Ereigniss ruft man Commit auf?
warum denn das? Wenn man weiß was man tut und was er macht ist er praktisch und gutMatze hat geschrieben:Also ich lasse jetzt den DBNavigator ganz weg
sie sind flexibler und dank des Einsatzes von EgonHugeist professioneller und sicherer (Nochmals Dank an dich, Michael)Matze hat geschrieben:Die ZEOS Komponenten habe ich nicht installiert. Aber fast jeder schreibt, dass er die benutzt. Sind die soviel besser als die Lazarus Komponenten?
auch dabei kann man Satzsperren einbauen, falls nötiggocher hat geschrieben:Ein solches Vorgehen würde ich wenn überhaupt nur für Desktop-Datenbanken anwenden, konkurrierende Zugriffe und so... !
hde
Re: Bei welchem Ereigniss ruft man Commit auf?
So nun geht gar nichts mehr. Ich habe ein update von Lazarus 1.0.8 auf 1.0.10 gemacht. Wenn ich nun die Eigenschaft Connected der MySQL55Connection auf True setze kommt die Meldung: Can not load default MySQL library ("libmysql.dll" or "libmysql.dll)
Das war nach der Installation der Version 1.0.8 auch so. Aber da habe ich die Datei libmysql.dll ins Projektverzeichnis kopiert und es lief. Geht jetzt aber nicht.
Sollte ich dazu lieber ein neues Thema aufmachen?
Das war nach der Installation der Version 1.0.8 auch so. Aber da habe ich die Datei libmysql.dll ins Projektverzeichnis kopiert und es lief. Geht jetzt aber nicht.
Sollte ich dazu lieber ein neues Thema aufmachen?
Re: Bei welchem Ereigniss ruft man Commit auf?
Ich kann nur nochmals sagen: nimm Zeos, da kannst du angeben wo die DLL liegt.
hde
hde
Re: Bei welchem Ereigniss ruft man Commit auf?
Der Fehler "Can not load default MySQL library ("libmysql.dll" or "libmysql.dll)" ist nun weg.
Ich habe beim update von Lazarus 1.0.8 auf 1.0.10 die 64 bit Version installiert statt der 32 bit Version.
Nun kann Lazarus wieder auf die Daten zugreifen.
Ich habe beim update von Lazarus 1.0.8 auf 1.0.10 die 64 bit Version installiert statt der 32 bit Version.
Nun kann Lazarus wieder auf die Daten zugreifen.
Würde ich ja, aber ich kann das ZEOS nicht benutzen weil ich nicht weiss wie man diesen SVN Client installiert bzw. wie man richtig damit umgeht.Ich kann nur nochmals sagen: nimm Zeos, da kannst du angeben wo die DLL liegt.
hde
Re: Bei welchem Ereigniss ruft man Commit auf?
So jetzt geht auch das schreiben in die DB
Diese beiden Zeilen müssen ausgeführt werden:
SQLQuery.ApplyUpdates;
SQLTransaction.Commit;
Dann werden die Änderungen dauerhaft übernommen und den DBNavigator kann ich auch benutzen.
Matze

Diese beiden Zeilen müssen ausgeführt werden:
SQLQuery.ApplyUpdates;
SQLTransaction.Commit;
Dann werden die Änderungen dauerhaft übernommen und den DBNavigator kann ich auch benutzen.
Matze