Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Funktion um den Namen der aktuellen Prozedur zu ermitteln

617 views
Skip to first unread message

Johannes Karl

unread,
Oct 31, 2003, 4:14:38 AM10/31/03
to
Hi NG,
ich habe schon gelesen das das nicht geht, deswegen frage ich euch:
wenn ihr am anfang jeder Prozedur eine globale Variable setzt die den
Prozedurnamen speichert, was macht man damit eine Prozedur die eine andere
Prozedur aufruft immer noch den richtigen Namen zurückgibt, bei einer
Fehlermeldung?

Meine Idee ist das ich ein Fehlermodul schreibe das Fehler Protokolliert,
und ich möchte dann zurückgeben:
Fehlernummer, Fehlerbeschreibung, aktueller User, aktueller PC, Datum,
aktuelles Formular, aktuelles Sub/ aktuelle Funktion, aktuelle DB

einzige Probleme für mich sind: aktuelles Formular und aktuelle
Prozedur/aktuelles Sub ermitteln und die dann an die Errorfunktion
übergeben.

Danke im Vorraus, MfG Johannes

Juergen Frieling

unread,
Oct 31, 2003, 7:47:19 AM10/31/03
to
Hallo Johannes

> wenn ihr am anfang jeder Prozedur eine globale Variable setzt die den
> Prozedurnamen speichert, was macht man damit eine Prozedur die eine
> andere Prozedur aufruft immer noch den richtigen Namen zurückgibt, bei
> einer Fehlermeldung?

Eine _lokale_ Variable/Konstante nehmen und Deiner Error-Handler-Funktion
als Parameter übergeben.
Wenn Du den gesamten Aufruf-Stack haben willst, musst Du Dir einen solchen
(Stack) selbst bauen - am besten in einem Klassenmodul. Kann man evtl. auch
mit google finden...

Gruss,
Juergen

Rainer Lemke

unread,
Oct 31, 2003, 7:51:09 AM10/31/03
to
Johannes Karl wrote:
[schnippel]

> Meine Idee ist das ich ein Fehlermodul schreibe das Fehler Protokolliert,
> und ich möchte dann zurückgeben:
> Fehlernummer, Fehlerbeschreibung, aktueller User, aktueller PC, Datum,
> aktuelles Formular, aktuelles Sub/ aktuelle Funktion, aktuelle DB
[schnippel]
Hallo Johannes,
ich hatte in der microsoft.public.de.vb Newsgroup
auf den Thread "Fehlerbehandlung..." vom 25.07.2003 10:20,
meine Antwort 25.07.2003 11:52
mal meinen Fehlerbehandlungsansatz skizziert
der die komplette Aufrufkette im Errorform zeigt,
nach dem Schema Modul1::Function1::Modul2::Function2....
--
Ich hoffe, dies hat geholfen.
Einen schönen Gruss aus dem Rheinland,
Rainer Lemke

Thomas Möller

unread,
Nov 1, 2003, 3:20:41 AM11/1/03
to
Hallo Johannes,

Johannes Karl <kill.all.spam@jkarl@lumino.de> schrieb:

da aktuelle Formular kannst Du mit "Me.Name" ermitteln.

Ich habe auch eine solche Routine im Einsatz. Den Namen der Sub/Function
übergebe ich dem Error-Handler beim Aufruf "von Hand". Ob ich jetzt zuerst
eine Variable mit dem Namen der Function/Sub belege und diese dann
übergebe - oder ob ich den Namen im Funktionsaufruf direkt übergebe - einmal
mußt Du den Namen codieren.

HTH
--
Tho...@Team-Moeller.de

Homepage: www.team-moeller.de

TM-FixObjectNames: Update auf Version 2.18 (seit 30.10.03)
Addin: Steuerelemente gemäß Namenskonvention umbenennen


Johannes Karl

unread,
Nov 3, 2003, 2:56:27 AM11/3/03
to
Moin Rainer

On Fri, 31 Oct 2003 13:51:09 +0100, Rainer Lemke wrote:

> Johannes Karl wrote:
> [schnippel]
>> Meine Idee ist das ich ein Fehlermodul schreibe das Fehler Protokolliert,
>> und ich möchte dann zurückgeben:
>> Fehlernummer, Fehlerbeschreibung, aktueller User, aktueller PC, Datum,
>> aktuelles Formular, aktuelles Sub/ aktuelle Funktion, aktuelle DB
> [schnippel]
> Hallo Johannes,
> ich hatte in der microsoft.public.de.vb Newsgroup
> auf den Thread "Fehlerbehandlung..." vom 25.07.2003 10:20,
> meine Antwort 25.07.2003 11:52
> mal meinen Fehlerbehandlungsansatz skizziert
> der die komplette Aufrufkette im Errorform zeigt,
> nach dem Schema Modul1::Function1::Modul2::Function2....

Danke für die Antwort, leider kann man im M$ Newsarchiev nicht so weit
zurück suchen
(http://search.communities.microsoft.com/newsgroups/Srchdefault.asp?ICP=GSS
3&sLCID=DE&NewsGroup=microsoft.public.de.vb)

... dämliche Sache wollte mir alle Postings von dem Tag anzeigen
lassen...und das bakommen: Die Suche hat keine Ergebnisse zurückgegeben

Na Ja, kann ich wohl nix machen!

MfG Johannes

Johannes Karl

unread,
Nov 3, 2003, 2:57:54 AM11/3/03
to
Hallo Thomasm

On Sat, 1 Nov 2003 09:20:41 +0100, Thomas Möller wrote:

> Hallo Johannes,

> Johannes Karl <kill.all.spam@jkarl@lumino.de> schrieb:
>> ich habe schon gelesen das das nicht geht, deswegen frage ich euch:
>> wenn ihr am anfang jeder Prozedur eine globale Variable setzt die den
>> Prozedurnamen speichert, was macht man damit eine Prozedur die eine
>> andere Prozedur aufruft immer noch den richtigen Namen zurückgibt,
>> bei einer Fehlermeldung?
>> Meine Idee ist das ich ein Fehlermodul schreibe das Fehler
>> Protokolliert, und ich möchte dann zurückgeben:
>> Fehlernummer, Fehlerbeschreibung, aktueller User, aktueller PC, Datum,
>> aktuelles Formular, aktuelles Sub/ aktuelle Funktion, aktuelle DB
>> einzige Probleme für mich sind: aktuelles Formular und aktuelle
>> Prozedur/aktuelles Sub ermitteln und die dann an die Errorfunktion
>> übergeben.

> da aktuelle Formular kannst Du mit "Me.Name" ermitteln.

> Ich habe auch eine solche Routine im Einsatz. Den Namen der Sub/Function
> übergebe ich dem Error-Handler beim Aufruf "von Hand". Ob ich jetzt zuerst
> eine Variable mit dem Namen der Function/Sub belege und diese dann
> übergebe - oder ob ich den Namen im Funktionsaufruf direkt übergebe - einmal
> mußt Du den Namen codieren.

> HTH

Das mit dem Me.Name habe ich auch mitlerweile gefunden...hat auch lange
genug gedauert. Trozdem Danke.

Und das ich das von Hand eingeben muss...na ja, was will man machen...

Danke für die Antwort,

MfG Johannes

Johannes Karl

unread,
Nov 3, 2003, 2:59:33 AM11/3/03
to
Tach Jürgen

> Hallo Johannes

> Gruss,
> Juergen

Was meinst du mit Aufrufstack? Ich habe mir nen Modul geschrieben das immer
wieder als error-Handling aufgerufen wird und die Daten dann in eine
Tabelle schiebt.

MfG Johannes

Gunter Avenius

unread,
Nov 3, 2003, 4:16:36 AM11/3/03
to
Hallo Johannes,

Johannes Karl schrieb folgendes:
[snip..]


> Danke für die Antwort, leider kann man im M$ Newsarchiev nicht so
> weit zurück suchen
>
(http://search.communities.microsoft.com/newsgroups/Srchdefault.asp?ICP=GSS
> 3&sLCID=DE&NewsGroup=microsoft.public.de.vb)
>
> ... dämliche Sache wollte mir alle Postings von dem Tag anzeigen
> lassen...und das bakommen: Die Suche hat keine Ergebnisse
> zurückgegeben
>
> Na Ja, kann ich wohl nix machen!

Such über Google
http://www.google.de/groups?q=Fehlerbehandlung+group:microsoft.public.de.vb+
author:Rainer+author:Lemke&hl=de&lr=&ie=UTF-8&oe=UTF-8&as_drrb=b&as_mind=23&
as_minm=7&as_miny=2003&as_maxd=30&as_maxm=7&as_maxy=2003&selm=1vcswmi73e8h1.
1rihpxv83m43u.dlg%4040tude.net&rnum=1
(Link in einer Zeile)


--
Gruß
Gunter
_________________________________________________
Access - FAQ: http://www.donkarl.com
home: http://www.avenius.com

Johannes Karl

unread,
Nov 3, 2003, 4:47:26 AM11/3/03
to
Hallo Gunter

On Mon, 3 Nov 2003 10:16:36 +0100, Gunter Avenius wrote:

[snip..]

> Such über Google
> http://www.google.de/groups?q=Fehlerbehandlung+group:microsoft.public.de.vb+
> author:Rainer+author:Lemke&hl=de&lr=&ie=UTF-8&oe=UTF-8&as_drrb=b&as_mind=23&
> as_minm=7&as_miny=2003&as_maxd=30&as_maxm=7&as_maxy=2003&selm=1vcswmi73e8h1.
> 1rihpxv83m43u.dlg%4040tude.net&rnum=1
> (Link in einer Zeile)

Danke....

Johannes Karl

unread,
Nov 3, 2003, 4:52:23 AM11/3/03
to
On Fri, 31 Oct 2003 13:51:09 +0100, Rainer Lemke wrote:

> Johannes Karl wrote:
> [schnippel]
>> Meine Idee ist das ich ein Fehlermodul schreibe das Fehler Protokolliert,
>> und ich möchte dann zurückgeben:
>> Fehlernummer, Fehlerbeschreibung, aktueller User, aktueller PC, Datum,
>> aktuelles Formular, aktuelles Sub/ aktuelle Funktion, aktuelle DB
> [schnippel]
> Hallo Johannes,
> ich hatte in der microsoft.public.de.vb Newsgroup
> auf den Thread "Fehlerbehandlung..." vom 25.07.2003 10:20,
> meine Antwort 25.07.2003 11:52
> mal meinen Fehlerbehandlungsansatz skizziert
> der die komplette Aufrufkette im Errorform zeigt,
> nach dem Schema Modul1::Function1::Modul2::Function2....

Okay...nachdem ich es dank Gunter dochlesen konnte:

Ich wollte eigentlich ein einfaches Handling haben. Nix gegen deine
Methode, aber die ist mir ehrlich gesagt zu hoch. Ich will das nur der
Admin die Fehlermeldung sieht, und deswegen lasse ich diese in eine DB
eintragen:

Hier mein Modul:
+++++++++++++++++++++code start+++++++++++++++++++++++++++
Option Compare Database

'Funktionen für UserName
Private Declare Function api_GetUserName _
Lib "advapi32.dll" Alias "GetUserNameA" _
(ByVal lpBuffer As String, nSize As Long) As Long

'Funktionen für PC-Name
Private Const MAX_COMPUTERNAME_LENGTH As Long = 31
Private Declare Function GetComputerName Lib "kernel32" Alias
"GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Public Function PCName() As String
Dim dwLen As Long
Dim strString As String
'Create a buffer
dwLen = MAX_COMPUTERNAME_LENGTH + 1
strString = String(dwLen, "X")
'Get the computer name
GetComputerName strString, dwLen
'get only the actual data
PCName = Left(strString, dwLen)
End Function

Public Function UserName() As String
On Error Resume Next

Dim NBuffer As String
Dim Buffsize As Long
Dim Dummy As Long

Buffsize = 256
NBuffer = Space$(Buffsize)
Dummy = api_GetUserName(NBuffer, Buffsize)
UserName = Trim$(NBuffer)
If Right(UserName, 1) = Chr(0) Then
UserName = Left(UserName, Len(UserName) - 1)
End If

End Function

Public Function ErrorReport(intErrNr As Integer, strErrDescr As String,
strErrFormName As String, _
strErrFunktion As String, intErrStatus As Integer)

Dim SQL As String
Dim db As Database
Set db = CurrentDb

SQL = "Insert into tblErrorLog(errNr, errDescription, errUser,
errDatabase, errForm, errFunction" & _
", errDate, errPCName, errStatus) Select " & intErrNr & ", '" &
strErrDescr & "', '" & UserName & "'" & _
", '" & DBName & "', '" & strErrFormName & "', '" & strErrFunktion &
"', '" & Date & "', '" & PCName & "'" & _
", " & intErrStatus & ";"

db.Execute SQL
End Function

Public Function DBName() As String

DBName = Dir(CurrentDb.Name)

End Function
++++++++++++++++++++++code end++++++++++++++++++++++++++++++
(Zeilenumbrüche bitte ich zu verzeihen)

Für Verbesserungen bin ich immer dankbar...

MfG Johannes

Rainer Lemke

unread,
Nov 3, 2003, 10:32:18 AM11/3/03
to
Johannes Karl wrote:
[schnippel]

> Ich wollte eigentlich ein einfaches Handling haben. Nix gegen deine
> Methode, aber die ist mir ehrlich gesagt zu hoch. Ich will das nur der
> Admin die Fehlermeldung sieht, und deswegen lasse ich diese in eine DB
> eintragen:
[schnippel]
Hallo Johannes,
o.k., du trägst den Error in eine Log ein,
das ist ja o.k. wenns dir reicht.
Mit der Übergabe Prozedurname habe ich bei mir auch schon
mal anders gelöst:
Ich benutze GhostTyperXML, ein Tool welches TastaturMakros
abspielt. Ich klicke auf den Prozedurnamen und drücke meinen
Hotkey, GhostTyperXML kopiert der Prodezurnamen in die
Zwischenablage und baut den Erroraufruf drumherum nach dem
Schema:
ShowError "FastDCount", "", Err.Number, Err.Description
In der selbstgeschriebenen Routine "ShowError" kannst du
dann alles mögliche machen.
Das mit der Übergabe Modulname hatte ich mir geschenkt.
Mein Beispiel in der VB Newsgroup zeigt weitmehr
darüberhinaus wie ich die komplette Aufrufkette erhalte,
das Prinzip habe ich aus dem Buch VBA mit Excel2000 von
Klaus Prinz.

Johannes Karl

unread,
Nov 4, 2003, 1:42:34 AM11/4/03
to
Moin Rainer,

Ich habe nur ein Problem, ich bin noch ein totaler Neuling, und sehe keinen
Vorteil in deiner Vorgehensweise. Wenn du diesen mir noch näherbringen
könntest wärde ich dankbar.

Was den GhostTyperXML angeht, das hört sich cool an, werde das Proggi ma
probieren...

MfG Johannes

Rainer Lemke

unread,
Nov 4, 2003, 5:22:21 AM11/4/03
to
Johannes Karl wrote:
[schnippel]

> Ich habe nur ein Problem, ich bin noch ein totaler Neuling, und sehe keinen
> Vorteil in deiner Vorgehensweise. Wenn du diesen mir noch näherbringen
> könntest wärde ich dankbar.
[schnippel]
Hallo Johannes
-GhostTyperXML -> www.s-a-d.de
-Vorteil? - es kommt darauf an ob die Zusatzinformation
einem der Codierungsaufwand Wert ist.
Du logst jetzt einfach einen Fehler und kennst dann die
Fehlerstelle nach Modulname, Prozedurname, das ist o.k..
Die Erweiterung des Zusammenbauens der Aufrufkette - da
sieht man dann statt "Modulname, Prozedurname"
z.B. Modulname1::Prozedurname1::Modulname2::Prozedurname2
::Modulname3::Prozedurname3......
Wenn jetzt z.B. in der Funktion xyz3 ein Fehler auftritt
weisst du das xyz3 den Fehler verursacht hat und das sie
z.B. von abc2 aufgerufen worden ist und abc2 von z.B. uvw1
aufgerufen wurde. xyz3 kann jetzt z.B. die Funktion
"getADORec" sein, und so weisst du, welches Recordset da
angefordert wurde weil du die aufrufende Prozedur, z.B.
"CreateDebitorList" da auch ablesen kannst. Falls dich das
interessiert und du dazu mehr Grundlagen haben willst - ich
mag hier nicht und darf nicht die Seiten, die im schon
genannten Buch gedruckt sind, hier abtippen, also müsstest
du das dann lesen, sorry.
Übrigens gibt es einige Tools die einen Errorhandler
"Aufrufstack" anlegen, mir fällt jetzt auf die Schnelle nur
VB-Partner für VB6 ein, meine Lösung ist eben etwas
abweichend (aber gut - wie ich finde). Aber man muss den
Aufwand ja nicht treiben.

Johannes Karl

unread,
Nov 4, 2003, 6:16:13 AM11/4/03
to

Das hört sich sehr gut an....werde mir das bei gelegenheit nochmal zum
Geiste führen und überdenken ob ich es nutze :) Bisher sind aber nur simple
Vorgänge in meinem VBA, daher ist das alles noch einfach....aber für die
Zukunft....

Vielen Dank .... auch für die gute Erklärung

Ach Ja...der GhostTyperXML ist klasse...gefällt mir! Mein Admin fand das
Dingen auch direkt toll. Danke auch dafür!

MfG Johannes

0 new messages