Autor Beitrag
Delphi_Rainer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Di 12.06.07 14:26 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Di 12.06.07 16:03 
Du könntest uns auch ein bisschen Code zeigen

_________________
Markus Kinzler.
Delphi_Rainer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Di 12.06.07 16:13 
Hier ist der Sourcecode

ausblenden volle Höhe 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:
 //Erstellen des Event in Datenbank
 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;

 // Erstellung der Event Komponente
 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

//Meine Event Prozedur "Eventallert"

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 user profile iconraziel: Delphi-Tags hinzugefügt
Delphi_Rainer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: 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 ???