Entwickler-Ecke
Datenbanken - IBEVENT mit Firebird 1.5
Delphi_Rainer - Di 12.06.07 14:26
Titel: IBEVENT mit Firebird 1.5
Hallo,
Ich versuche in Delphi 7 ein Ereignis einer Datenbank mit IBevent zu bekommen.
Dies klappt auch für eine gewisse Zeit.
Vorgehensweise:
Eine Anwendung auf ein Client PC schreibt Daten auf ein Server PC.
Die Anwendung mit der Datenbank auf dem Server PC läuft in einem Thread.
Nach ein paar Einträge in die Datenbank bekomme ich die Fehlermeldung "Invalid transaction handle" (explicit transaction started).
Entferne ich die die IBEvent Komponente aus dem Sourcecode und übersetzte die Anwendung neu so tritt kein Fehler auf.
Muss man beim erhalt des Events die Transaction neu starten ?
Was mache ich falsch ?
Kann mir jemand ein Sourcecode geben ?
mkinzler - Di 12.06.07 16:03
Du könntest uns auch ein bisschen Code zeigen
Delphi_Rainer - Di 12.06.07 16:13
Hier ist der Sourcecode
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69:
| with ibsql1 do begin SQL.Clear; sql.Add('Create Trigger POST_NEW_ORDER'+inttostr(line+1)+' for Protokoll'+inttostr (line+1)); sql.Add('Active After Insert Position 0'); sql.Add('AS BEGIN '); sql.Add('POST_EVENT "POSTING'+inttostr(line+1)+'";'); sql.Add('END'); Execquery; end;
IBEVENTS1:=TIBEVENTS.Create(nil); IBEvents1.AutoRegister:=false; IBEvents1.Database:=database; IBEvents1.OnEventAlert:=EVENTALLERT
Nach öffnen der database
IBEvents1.Events.Clear; IBEvents1.UnRegisterEvents; for i:=0 to Lin_anzahl-1 do IBEvents1.Events.Add('POSTING'+inttostr(i+1)); IBEvents1.RegisterEvents
procedure Protokoll_thread.EVENTALLERT(Sender: TObject; EventName: String; EventCount: Integer; var CancelAlerts: Boolean); begin try if Eventname='POSTING1' then begin form1.PROTOKOLL_CHANGE[0]:=true; end else if Eventname='POSTING2' then begin form1.PROTOKOLL_CHANGE[1]:=true; end else if Eventname='POSTING3' then begin form1.PROTOKOLL_CHANGE[2]:=true; end else if Eventname='POSTING4' then begin form1.PROTOKOLL_CHANGE[3]:=true; end else if Eventname='POSTING5' then begin form1.PROTOKOLL_CHANGE[4]:=true; end else if Eventname='POSTING6' then begin form1.PROTOKOLL_CHANGE[5]:=true; end else if Eventname='POSTING7' then begin form1.PROTOKOLL_CHANGE[6]:=true; end else if Eventname='POSTING8' then begin form1.PROTOKOLL_CHANGE[7]:=true; end;
except Synchronize(ERROR_OUTPUT_PROTO); end; end; |
Alles wird im Thread erzeugt.
Moderiert von
raziel: Delphi-Tags hinzugefügt
Delphi_Rainer - Di 19.06.07 16:28
Der Fehler mit invalid transaction handle ist jetzt behoben.
Ich bekomme jetzt die Fehlermeldung "Error in gds32.dll" wenn ich ein disconnect auf die Datenbank mache.
Kann mir jemand helfen ???
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!