TSqlTransaction liefert kuriose Exception

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Dets
Beiträge: 61
Registriert: Di 11. Sep 2007, 16:59
OS, Lazarus, FPC: Ubuntu Maverick (L 0.9.28.2-10, FPC 2.4.0)
CPU-Target: 32Bit
Wohnort: Lage
Kontaktdaten:

TSqlTransaction liefert kuriose Exception

Beitrag von Dets »

Hallo Forum,

beim Versuch eine Verbindung zu einer MySql-Datenbank aufzubauen bin ich auf ein seltsames Verhalten gestoßen: als erstes etwas Quellcode:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
     aDb:=TMySql50Connection.Create(nil);
     aTransaction:=TSqlTransaction.Create(nil);
     aDb.Transaction:=aTransaction;
     aDb.AfterConnect:=@DbAfterConnect;
 
     aDb.HostName:=edHost.text;
     aDb.DatabaseName:=edDatabase.Text;
     aDb.UserName:=edUsername.Text;
     aDb.Password:=edPassword.Text;
 
     aDb.Connected:=true;
     ShowMessage('connected');
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
     aDb.Connected:=false;
 
     aTransaction.Free;
     aDb.Free;
     ShowMessage('disconnected');
end;
 
procedure TForm1.DbAfterConnect(Sender: TObject);
begin
     (Sender as TMySql50Connection).ExecuteDirect('SET NAMES ''utf8'' ');
     (Sender as TMySql50Connection).ExecuteDirect('SET CHARACTER SET ''utf8'' ');
end;


Nun das Verhalten:
Nach dem Klicken auf Button1 und dann auf Button 2 wird eine Exception angezeigt:

Code: Alles auswählen

Operation cannot be performed on an active Transaction
Alle weiteren Klicks auf Button1 gefolgt von Button2 funktionieren (d.h. keine Exception).
Ziehe ich eine TMySql50Connection-Komponente auf das Formular (ohne damit irgendwas zu machen), funktioniert es ebenfalls!
Meine Versuche, durch Commit oder Active=false die Exception zu umgehen sind erfolglos geblieben.

Das kann doch so nicht Absicht sein, oder?

greetz, Dets ...

Dets
Beiträge: 61
Registriert: Di 11. Sep 2007, 16:59
OS, Lazarus, FPC: Ubuntu Maverick (L 0.9.28.2-10, FPC 2.4.0)
CPU-Target: 32Bit
Wohnort: Lage
Kontaktdaten:

Re: TSqlTransaction liefert kuriose Exception

Beitrag von Dets »

Nachtrag: das ganze läuft unter Ubuntu Karmic, Lazarus 0.9.28.2-10ppa2k, FPC 2.4.0, MySql 5.1.37-1ubuntu5.5

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Re: TSqlTransaction liefert kuriose Exception

Beitrag von knight »

Probiere mal eine aktuelle Lazarus Version mit FPC 2.5.1. Da gibt es eine separate Komponente für MySQL 5.1.

knight

Dets
Beiträge: 61
Registriert: Di 11. Sep 2007, 16:59
OS, Lazarus, FPC: Ubuntu Maverick (L 0.9.28.2-10, FPC 2.4.0)
CPU-Target: 32Bit
Wohnort: Lage
Kontaktdaten:

Re: TSqlTransaction liefert kuriose Exception

Beitrag von Dets »

knight hat geschrieben:Probiere mal eine aktuelle Lazarus Version mit FPC 2.5.1. Da gibt es eine separate Komponente für MySQL 5.1.
Als Workaround erzeuge ich jetzt einfach eine TMySql50Connection-Instanz nach dem Start und gebe sie nach dem Programmdurchlauf als erstes wieder frei. So funktioniert's auch.

Kann denn jemand das geschilderte Problem nachvollziehen?

thx, Dets ...

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6766
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: TSqlTransaction liefert kuriose Exception

Beitrag von af0815 »

Wenn du eine Tranaktion startest und gleich wieder beendet im Button1Click - ändert sich dann was ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Dets
Beiträge: 61
Registriert: Di 11. Sep 2007, 16:59
OS, Lazarus, FPC: Ubuntu Maverick (L 0.9.28.2-10, FPC 2.4.0)
CPU-Target: 32Bit
Wohnort: Lage
Kontaktdaten:

Re: TSqlTransaction liefert kuriose Exception

Beitrag von Dets »

af0815 hat geschrieben:Wenn du eine Tranaktion startest und gleich wieder beendet im Button1Click - ändert sich dann was ?
Wenn ich das vor dem aDb.Connected:=True mache, dann ändert sich nichts, mache ich es danach, dann gibt's eine Transaction already active-Exception

:? Dets ...

Antworten