Firebird
-
- Beiträge: 92
- Registriert: So 26. Aug 2007, 20:35
- OS, Lazarus, FPC: Win7, Laz 1.2.6, FPC 2.6.4, SVN 33306, ZEOS 7.1.4
- CPU-Target: 32Bit
- Wohnort: Helmstedt
- Kontaktdaten:
Firebird
Hallo beisammen,
ich tu mich ein wenig schwer, in Lazarus eine Tabelle zu öffnen.
Folgendes liegt auf dem Formular:
TIBConnection
TSQLTransaction
TSQLQuery
TDatasource
TIBConnection wurde mit TSQLTransaction verbunden.
Properties sind ausgefüllt und Verbindung steht (FB 2.0)
TSQLQuery wurde mit der TIBConnection verbunden.
Selectsql der Komponente ist eine einfache Selektion: 'Select * from Artikeldaten'.
So, rechte Maustaste und Felder bearbeiten - Felder hinzufügen: Es war nicht möglich, die Liste der Felder...
Setzen der Eigenschaft active auf true geht nicht.
Was mache ich falsch?
Laz.: 0.9.24 beta (12752)
Freepascal: 2.2.0
Vielen Dank und Gruß
Peter
ich tu mich ein wenig schwer, in Lazarus eine Tabelle zu öffnen.
Folgendes liegt auf dem Formular:
TIBConnection
TSQLTransaction
TSQLQuery
TDatasource
TIBConnection wurde mit TSQLTransaction verbunden.
Properties sind ausgefüllt und Verbindung steht (FB 2.0)
TSQLQuery wurde mit der TIBConnection verbunden.
Selectsql der Komponente ist eine einfache Selektion: 'Select * from Artikeldaten'.
So, rechte Maustaste und Felder bearbeiten - Felder hinzufügen: Es war nicht möglich, die Liste der Felder...
Setzen der Eigenschaft active auf true geht nicht.
Was mache ich falsch?
Laz.: 0.9.24 beta (12752)
Freepascal: 2.2.0
Vielen Dank und Gruß
Peter
Ich habe ein einfaches Tutorial im Wiki verfaßt: http://wiki.lazarus.freepascal.org/SQLdb_Tutorial1/de Vielleicht hilft es dir weiter.
knight
knight
-
- Beiträge: 92
- Registriert: So 26. Aug 2007, 20:35
- OS, Lazarus, FPC: Win7, Laz 1.2.6, FPC 2.6.4, SVN 33306, ZEOS 7.1.4
- CPU-Target: 32Bit
- Wohnort: Helmstedt
- Kontaktdaten:
knight hat geschrieben:Ich habe ein einfaches Tutorial im Wiki verfaßt: http://wiki.lazarus.freepascal.org/SQLdb_Tutorial1/de Vielleicht hilft es dir weiter.
knight
@knight,
Danke schön! Werde ich morgen früh durchkämmen
Gruß
Peter
Zeiterfassung, einfach gerechter!
- af0815
- Lazarusforum e. V.
- Beiträge: 6216
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Firebird
petermännchen hat geschrieben:TIBConnection wurde mit TSQLTransaction verbunden.
Properties sind ausgefüllt und Verbindung steht (FB 2.0)
Ich vermute nein, denn Probleme in der Verbindung werden oft auch erst sichtbar, wenn die erste Query so wirklich was anfordert. Die Anzeichen bei deuten darauf hin.
Ich empfehle ein Update auf eine relativ neue Version (besonders FPC), da sich sehr viel an Bugfixing auch im DB Bereich getan hat.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 92
- Registriert: So 26. Aug 2007, 20:35
- OS, Lazarus, FPC: Win7, Laz 1.2.6, FPC 2.6.4, SVN 33306, ZEOS 7.1.4
- CPU-Target: 32Bit
- Wohnort: Helmstedt
- Kontaktdaten:
@af0815
der letzte Tip war es. Habe die full 0.9.25 installiert mit FPC 2.2.1
jetzt kann ich die Tabelle öffnen und anzeigen.
Was aber nciht klappt:
- zeos läßt sich nicht installieren
- laszdatadesktop läßt sich nicht installieren
- zcore, zjpegforlazarus, zparsesql, zplain, zdbc und zcomponent wurden nicht mitinstalliert. Gibt jedes mal nen Mecker bei Programmstart.
Also leicht wird einem der Einstieg in Lazarus nicht gemacht!
Vielen Dank für eure Hilfen.
Gruß
Peter
der letzte Tip war es. Habe die full 0.9.25 installiert mit FPC 2.2.1
jetzt kann ich die Tabelle öffnen und anzeigen.
Was aber nciht klappt:
- zeos läßt sich nicht installieren
- laszdatadesktop läßt sich nicht installieren
- zcore, zjpegforlazarus, zparsesql, zplain, zdbc und zcomponent wurden nicht mitinstalliert. Gibt jedes mal nen Mecker bei Programmstart.
Also leicht wird einem der Einstieg in Lazarus nicht gemacht!
Vielen Dank für eure Hilfen.
Gruß
Peter
Zeiterfassung, einfach gerechter!
- af0815
- Lazarusforum e. V.
- Beiträge: 6216
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
petermännchen hat geschrieben:- zcore, zjpegforlazarus, zparsesql, zplain, zdbc und zcomponent wurden nicht mitinstalliert.
Wenn ZEOS nicht geht, so ist auch klar, warum er das anmeckert, es gehört fast alles zu ZEOS. Räum es mal raus.
petermännchen hat geschrieben:Also leicht wird einem der Einstieg in Lazarus nicht gemacht!
Es ist noch Beta und die Plattformunabhängigkeit bedingt auch ein paar Opfer, besonders wenn man von Delphi kommt. Aber in großen und ganzen kann man sich nach einer Einarbeitungszeit recht wohl damit fühlen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 92
- Registriert: So 26. Aug 2007, 20:35
- OS, Lazarus, FPC: Win7, Laz 1.2.6, FPC 2.6.4, SVN 33306, ZEOS 7.1.4
- CPU-Target: 32Bit
- Wohnort: Helmstedt
- Kontaktdaten:
@knight
sehe ich das richtig, dass 2.3.1 nur selbst erstellt werden kann?
Zu den Felddefinitionen:
Im Unterschied zu Delphi wird die SQLQuery nicht automatisch geöffnet, wenn ich die Felder im Feldeditor einlesen möchte. Das war gewöhnungsbedürftig.
Nun eine weitere Frage:
Ich rufe eine bestehende Tabelle auf, um diese im DBGrid anzuzeigen.
Das klappt.
Felder die ich nicht sehen will kann ich ausblenden, habe ich gefunden.
OHNE UpdateSQL kann ich edititeren! Das Ergebnis bleibt auch erhalten, wenn ich in den nächsten Datensatz wechsele. Sogar beim Scrollen der Datenmenge im DBGrid (Aufruf der nächsten 20 Datensätze) bleibt das Ergebnis erhalten.
Schließen und neu öffnen: Änderung ist weg.
Das betrifft auch delete und insert.
Sichern der Änderungen mittels verknüpften DBNavigator bringt nichts.
SQLTransaction.commit for Schließen der Datenmenge auch nichts.
Ich vermute, ich muß die Entsprechenden Anweisungen in der Komponente SQLQuery1 setzen.
Allerdings ein "Delete from Artikeldaten where ID = :ID" scheint nicht zu reichen.
Wie gehe ich vor?
Gruß
Peter
sehe ich das richtig, dass 2.3.1 nur selbst erstellt werden kann?
Zu den Felddefinitionen:
Im Unterschied zu Delphi wird die SQLQuery nicht automatisch geöffnet, wenn ich die Felder im Feldeditor einlesen möchte. Das war gewöhnungsbedürftig.
Nun eine weitere Frage:
Ich rufe eine bestehende Tabelle auf, um diese im DBGrid anzuzeigen.
Das klappt.
Felder die ich nicht sehen will kann ich ausblenden, habe ich gefunden.
OHNE UpdateSQL kann ich edititeren! Das Ergebnis bleibt auch erhalten, wenn ich in den nächsten Datensatz wechsele. Sogar beim Scrollen der Datenmenge im DBGrid (Aufruf der nächsten 20 Datensätze) bleibt das Ergebnis erhalten.
Schließen und neu öffnen: Änderung ist weg.
Das betrifft auch delete und insert.
Sichern der Änderungen mittels verknüpften DBNavigator bringt nichts.
SQLTransaction.commit for Schließen der Datenmenge auch nichts.
Ich vermute, ich muß die Entsprechenden Anweisungen in der Komponente SQLQuery1 setzen.
Allerdings ein "Delete from Artikeldaten where ID = :ID" scheint nicht zu reichen.
Wie gehe ich vor?
Gruß
Peter
Zeiterfassung, einfach gerechter!
sehe ich das richtig, dass 2.3.1 nur selbst erstellt werden kann?
Im Gegensatz zu Version 2.2.0 gibt es 2.3.1 nur als Sourcecode. Man muß diesen selbst kompilieren (was man z.B. mit einem (parallel) installierten Lazarus erledigen kann).
Was die Probleme im Umgang mit sqldb betrifft, so solltest du am besten einen Auszug aus deinem Quelltext veröffentlichen. So kann man vorhandene Fehler meist am schnellsten erkennen.
knight
-
- Beiträge: 92
- Registriert: So 26. Aug 2007, 20:35
- OS, Lazarus, FPC: Win7, Laz 1.2.6, FPC 2.6.4, SVN 33306, ZEOS 7.1.4
- CPU-Target: 32Bit
- Wohnort: Helmstedt
- Kontaktdaten:
Hallo Knight,
ich habe versucht, ausschließlich das Gespann Lazarus/FPC wirken zu lassen
aber hier der Quelltext:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs,
IBConnection, sqldb, db, DBGrids, DbCtrls, ExtCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Datasource1: TDatasource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
IBConnection1: TIBConnection;
Panel1: TPanel;
SQLQuery1: TSQLQuery;
SQLQuery1ARTIKELNUMMER1: TLongintField;
SQLQuery1AVKN1: TSmallintField;
SQLQuery1BEZEICHNUNG1: TStringField;
SQLQuery1BEZUGSARTIKEL1: TLongintField;
SQLQuery1EINHEIT1: TStringField;
SQLQuery1FARBE1: TStringField;
SQLQuery1FILIALID1: TLongintField;
SQLQuery1ID1: TLongintField;
SQLQuery1KASSENARTIKEL1: TSmallintField;
SQLQuery1KENNUNG1: TStringField;
SQLQuery1LAGERARTIKEL1: TSmallintField;
SQLQuery1MENGE1: TBCDField;
SQLQuery1PFAND1: TBCDField;
SQLQuery1PFANDARTIKEL1: TSmallintField;
SQLQuery1SCHANKARTIKEL1: TSmallintField;
SQLQuery1SETARTIKEL1: TSmallintField;
SQLQuery1WARENGRUPPE1: TLongintField;
SQLTransaction1: TSQLTransaction;
procedure DBNavigator1Click(Sender: TObject; Button: TDBNavButtonType);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormShow(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{ TForm1 }
procedure TForm1.FormShow(Sender: TObject);
begin
IBConnection1.connected := true;
SQLQuery1.active := true;
DBGrid1.setfocus;
end;
procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TDBNavButtonType);
begin
end;
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
SQLTransaction1.commit;
SQLQuery1.close;
end;
initialization
{$I unit1.lrs}
end.
ich habe versucht, ausschließlich das Gespann Lazarus/FPC wirken zu lassen
aber hier der Quelltext:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs,
IBConnection, sqldb, db, DBGrids, DbCtrls, ExtCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Datasource1: TDatasource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
IBConnection1: TIBConnection;
Panel1: TPanel;
SQLQuery1: TSQLQuery;
SQLQuery1ARTIKELNUMMER1: TLongintField;
SQLQuery1AVKN1: TSmallintField;
SQLQuery1BEZEICHNUNG1: TStringField;
SQLQuery1BEZUGSARTIKEL1: TLongintField;
SQLQuery1EINHEIT1: TStringField;
SQLQuery1FARBE1: TStringField;
SQLQuery1FILIALID1: TLongintField;
SQLQuery1ID1: TLongintField;
SQLQuery1KASSENARTIKEL1: TSmallintField;
SQLQuery1KENNUNG1: TStringField;
SQLQuery1LAGERARTIKEL1: TSmallintField;
SQLQuery1MENGE1: TBCDField;
SQLQuery1PFAND1: TBCDField;
SQLQuery1PFANDARTIKEL1: TSmallintField;
SQLQuery1SCHANKARTIKEL1: TSmallintField;
SQLQuery1SETARTIKEL1: TSmallintField;
SQLQuery1WARENGRUPPE1: TLongintField;
SQLTransaction1: TSQLTransaction;
procedure DBNavigator1Click(Sender: TObject; Button: TDBNavButtonType);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormShow(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{ TForm1 }
procedure TForm1.FormShow(Sender: TObject);
begin
IBConnection1.connected := true;
SQLQuery1.active := true;
DBGrid1.setfocus;
end;
procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TDBNavButtonType);
begin
end;
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
SQLTransaction1.commit;
SQLQuery1.close;
end;
initialization
{$I unit1.lrs}
end.
Zeiterfassung, einfach gerechter!
-
- Beiträge: 205
- Registriert: So 2. Dez 2007, 20:47
- OS, Lazarus, FPC: Windows XP Lazarus immer neueste Version
- CPU-Target: xxBit
- Wohnort: Schweiz
Daten gehen verloren
Hallo Peter
Genau das gleiche Problem hatte ich sowie auch Alfred. Die Lösung ist folgende:
Im OnClose folgende Befehle einfügen:
SQLQUERY1.UpdateMode := upWhereChanged;
SQLQUERY1.ApplyUpdates;
SQLTransaction1.Commit;
SQLQUERY1.close;
Wenn nun das PRG zusammenbricht oder ein Stromunterbruch ist und das PRG nicht korrekt geschlossen wird, dann sind die Daten weg.
Ist leider ein grosser Bug im Lazarus.
Peter
Genau das gleiche Problem hatte ich sowie auch Alfred. Die Lösung ist folgende:
Im OnClose folgende Befehle einfügen:
SQLQUERY1.UpdateMode := upWhereChanged;
SQLQUERY1.ApplyUpdates;
SQLTransaction1.Commit;
SQLQUERY1.close;
Wenn nun das PRG zusammenbricht oder ein Stromunterbruch ist und das PRG nicht korrekt geschlossen wird, dann sind die Daten weg.
Ist leider ein grosser Bug im Lazarus.
Peter
-
- Beiträge: 92
- Registriert: So 26. Aug 2007, 20:35
- OS, Lazarus, FPC: Win7, Laz 1.2.6, FPC 2.6.4, SVN 33306, ZEOS 7.1.4
- CPU-Target: 32Bit
- Wohnort: Helmstedt
- Kontaktdaten:
@Peter
danke für die Hilfestellung.
Ob das eine Fehler ist möchte ich nicht bejahen. Wenn ein PC abstürzt mit aktiver Transaction, dann ist in Delphi auch alles weg.
Abhilfe:
procedure TForm1.SQLQuery1AfterPost(DataSet: TDataSet);
begin
SQLQuery1.applyupdates; //updatemode in den Propertys gesetzt.
SQLTransaction1.commitretaining;
end;
Klappt jetzt auch in Lazarus wunderbar, läßt allerdings kein Rollback zu. Hier muß der Entwickler entscheiden zwischen Sicherheit und Funktionen. Ich verzichte lieber auf die Rollback- Funktion.
Mögliche Verbesserung: eigenes Fehlerhandling (Mainform!) und in dieser Routine die Transaction beenden.
Gegen Stromausfall hilft USV
Gegen Hardwarecrash hilft.. nichts.
Unterschied zu Delphi: applyupdates muß manuell gesetzt werden.
Was mich etwas verunsichert ist, das ich die Transaction nicht mit intransaction abfragen kann. Aber ein commit ohne Transaction bringt ja keine Fehler.
Gruß
Peter
danke für die Hilfestellung.
Ob das eine Fehler ist möchte ich nicht bejahen. Wenn ein PC abstürzt mit aktiver Transaction, dann ist in Delphi auch alles weg.
Abhilfe:
procedure TForm1.SQLQuery1AfterPost(DataSet: TDataSet);
begin
SQLQuery1.applyupdates; //updatemode in den Propertys gesetzt.
SQLTransaction1.commitretaining;
end;
Klappt jetzt auch in Lazarus wunderbar, läßt allerdings kein Rollback zu. Hier muß der Entwickler entscheiden zwischen Sicherheit und Funktionen. Ich verzichte lieber auf die Rollback- Funktion.
Mögliche Verbesserung: eigenes Fehlerhandling (Mainform!) und in dieser Routine die Transaction beenden.
Gegen Stromausfall hilft USV
Gegen Hardwarecrash hilft.. nichts.
Unterschied zu Delphi: applyupdates muß manuell gesetzt werden.
Was mich etwas verunsichert ist, das ich die Transaction nicht mit intransaction abfragen kann. Aber ein commit ohne Transaction bringt ja keine Fehler.
Gruß
Peter
Zeiterfassung, einfach gerechter!
- af0815
- Lazarusforum e. V.
- Beiträge: 6216
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Daten gehen verloren
Kuster Peter hat geschrieben:Ist leider ein grosser Bug im Lazarus.
Ich würde sagen, es sit dann erst ein Bug, wenn du zuerst wirklich gesagt hast was du willst.
Bei Lazarus ist einfach die Eigenverantwortung höher. Bei Delphi hat die Komponente greaten was du eigentlich machen willst, Lazarus verlangt da ganz einfach eine schlüssigere Einstellung/Programmierung. Wenn du die Daten in der DB haben willst, solltest du wenigstens das mitteilen (ApplyUpdates) oder wirklich mit Transaktionen arbeiten. Genauso wie die Komponente wissen sollte, WIE sie das Updatestatement (auch delete oder insert) aus deinem SQL Statement erraten soll.
Bezüglich Daten weg - Wenn eine transaktion nicht abgeschlossen werden kann, so hat sie die verdammte Pflicht, alles was nicht commited wurde wegzuschmeissen UND die DB in einem konsistenten Zustand zu halten ! Eine Stromunterbrechung oder ein Versagen des programmes ist kein 'normaler' Zustand. Das sage ich eher, warum hast du nicht so schnell wie möglich comittet.
Ist nicht Kritik, soll nur zum denken anregen
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 131
- Registriert: Sa 5. Apr 2008, 17:57
- OS, Lazarus, FPC: Linux (Debian, Xubuntu), MacOS X, MS Win, Android, Web
- CPU-Target: 32Bit/64Bit
- Wohnort: Ulm
Hallo,
gerade wegen der Transaktionssicherheit sind wir auf Zeos gegangen. Ich kann es nur empfehlen.
Probier mal über eine zweites Query Objekt per ".ExecSQL" ein "COMMIT" oder ein "ROLLBACK" zu schicken.
Das hat bei uns ein paar Dinge gut gelöst. Über eine solche zweite Verbindung machen wir auch ein "select * where id=4711 for update" um einen Datensatz für ein Update zu sperren. Da hatte es einige Probleme gegeben aber über diesen Weg geht es einwandfrei.
Allerdings arbeiten wir auf MySQL5 mit InnoDB Storage Engine.
Gruss,
Tibor
gerade wegen der Transaktionssicherheit sind wir auf Zeos gegangen. Ich kann es nur empfehlen.
Probier mal über eine zweites Query Objekt per ".ExecSQL" ein "COMMIT" oder ein "ROLLBACK" zu schicken.
Das hat bei uns ein paar Dinge gut gelöst. Über eine solche zweite Verbindung machen wir auch ein "select * where id=4711 for update" um einen Datensatz für ein Update zu sperren. Da hatte es einige Probleme gegeben aber über diesen Weg geht es einwandfrei.
Allerdings arbeiten wir auf MySQL5 mit InnoDB Storage Engine.
Gruss,
Tibor