[gelöst] Automationserver

24. Oktober 2008 13:10

Ich greife per Report über ADO ('Microsoft ActiveX Data Objects 2.8 Library'.Connection) auf eine externe SQL-Datenbank zu.
Das funktioniert soweit auch sehr gut.
Nun kann es jedoch vorkommen, das die Datenbank nicht zu erreichen ist, und dann eine Fehlermeldung kommt: "Der Aufruf zum Member Open sit fehlgeschlagen....."
Da der Report in der Nacht automatisch läuft, ist keiner da der die Meldung quittiert.
Ist es irgendwie mögllich, die Meldung abzufangen, damit der Report weiterläuft und den Rest erledigen kann?

mfg Michael
Zuletzt geändert von mespelage am 27. Oktober 2008 09:33, insgesamt 1-mal geändert.

Re: Automationserver

24. Oktober 2008 20:05

Hallo Michael,

vielleicht kann Dir 'Microsoft ActiveX Data Objects 2.8 Library'.ConnectionEvents weiterhelfen.
Dort gibt es eine Methode ConnectComplete und InfoMessage. Ich habe diese Methoden zwar noch nicht ausprobiert,
aber die Namen und Rückgabetypen klingen vielversprechend.

Ansonsten könnte man noch den ADO-Zugriff in eine separate Codeunit kapseln und per IF CODEUNIT.RUN ... den Fehler abfangen.
(Ab NAV 5.0 steht in GETLASTERRORTEXT dann auch die Fehlermeldung.)

Re: Automationserver

26. Oktober 2008 14:06

Vermutlich arbeitest du mit zwei Variablen, eine ADODB.Connection (z.B. conn) und ein ADODB.Recordset (z.B. rec) und vermutlich sagst du conn.open oder rec.open(conn, ...).

Wenn du diese Aufrufe einfach in ein IF oder WHILE NOT setzt, sollte es klappen, z.B:
Code:
IF conn.open(...) then begin
  do_anything_you_need;
end;

oder
Code:
WHILE NOT conn.open(...) DO BEGIN
  sleep(1000); //* Warte eine Sekunde
END;
do_anything_you_need;

Re: Automationserver

27. Oktober 2008 09:32

MrBurns:
Die Abfrage eines Events erfolgt zu spät, da dann die Fehlermeldung ja bereits erfolgt ist.

FAFL:
Der Befehl "conn.open(...) " ist nicht boolean, daher ist eine Abfrage mit IF oder While nicht möglich

meine Lösung:
Ich setze vor den Befehl "conn.open(...)" ein PING. Wenn der erfolgreich ist, dann weiter, sonst ERROR(' ');

Michael