Name einer Instanz ermitteln [ERLEDIGT]
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Name einer Instanz ermitteln [ERLEDIGT]
Hi,
im Moment komme ich nicht weiter. Wie komme ich an den Namen einer Instanz ran? Der Name der Klasse, von der instanziiert wird ist klar.
im Moment komme ich nicht weiter. Wie komme ich an den Namen einer Instanz ran? Der Name der Klasse, von der instanziiert wird ist klar.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2825
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 96 Mal
- Danksagung erhalten: 13 Mal
Re: Name einer Instanz ermitteln
Hallo, Manfred -
Du meinst
Da Du bestimmt nicht oXbp:className() meinst, bleibt die Frage übrig, ob Du wissen willst, wie "oXbp" heisst?
Verwundert grüssend,
Georg
Du meinst
Code: Alles auswählen
oXbp := XbpDialog():new(...)
Verwundert grüssend,
Georg
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Name einer Instanz ermitteln
Hi Georg,
fast richtig. Ich möchte die Info bekommen, das Teil heißt oXbp. Das ist ja der Instanzname. Im Moment erhalte ich nur das es XbpDialog heißt.
nur:
ergibt immer nur XbpDialog und das hilft mir nicht weiter, für das wozu ich es benötigen will.
fast richtig. Ich möchte die Info bekommen, das Teil heißt oXbp. Das ist ja der Instanzname. Im Moment erhalte ich nur das es XbpDialog heißt.
nur:
Code: Alles auswählen
ox1 := XbpDialog():new()
ox2 := XbpDialog():new()
ox3 := XbpDialog():new()
ox4 := XbpDialog():new()
ox5 := XbpDialog():new()
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Name einer Instanz ermitteln
Manfred,
oXbp ist NICHT der Instanzname, falls es den überhaupt gibt.
Das ist der Name der lokalen Variable in deinem Quellcode ... was passiert beim compilieren ?
Richtig, locale Variablen weren in Speicherbereiche umgerechnet und somit ist zur Laufzeit nur noch ein Zeiger im Code.
Keine Info über den Namen der Variable.
Du kannst aber CARGO ... soweit nicht anders verwendet dafür benutzen.
ob das Sinn macht ???
Falls du aber z.B. in einer Methode deiner Fensterklasse wissen willst, welcher PushButton gerade ausgelöst hat, das geht ... da dieser ja auch aufgelöst wird:
oXbp ist NICHT der Instanzname, falls es den überhaupt gibt.
Das ist der Name der lokalen Variable in deinem Quellcode ... was passiert beim compilieren ?
Richtig, locale Variablen weren in Speicherbereiche umgerechnet und somit ist zur Laufzeit nur noch ein Zeiger im Code.
Keine Info über den Namen der Variable.
Du kannst aber CARGO ... soweit nicht anders verwendet dafür benutzen.
Code: Alles auswählen
oXbp := XbpSle()....
oXbp:cargo := "oXbp"
...
Falls du aber z.B. in einer Methode deiner Fensterklasse wissen willst, welcher PushButton gerade ausgelöst hat, das geht ... da dieser ja auch aufgelöst wird:
Code: Alles auswählen
::pbEnde:activate := {|n1,n2,oXbp| ::ZeigButton( oXbp ) }
::pbOK:activate := {|n1,n2,oXbp| ::ZeigButton( oXbp ) }
::pbEgal99:activate := {|n1,n2,oXbp| ::ZeigButton( oXbp ) }
...
method :ZeigButton( oXbp )
local cTxt
do case
case oXbp = ::pbEnde
cTxt := "pbEnde"
case oXbp = ::pbEnde
cTxt := "pbOK"
case oXbp = ::pbEgal99
cTxt := "pbEgal99"
end case
msgbox( "Gedrückt wurde "+cTxt , "Info")
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Name einer Instanz ermitteln
Ich wußte, es läuft wieder aus der Bahn.
OK, es sieht folgendermassen aus:
Ich habe eine Fehlerroutine, die entsprechende Meldungen rauswirft, welche DBF nicht das macht, was der Anwender erwartet.
Da meine Datenbankklasse alles automatisch verwaltet, wird bei einer Mehrfachöffnung nur der Alias anders sein. D.h. Ich bilde x Instanzen von einem Datenbankobjekt und öffne damit x-mal eine DBF. Der Name oXbp(X):cDbank ist immer der gleiche, aber der Alias ist ein anderer. Jetzt hatte ich jüngst das Problem, dass ich eine DBF mehrmals hintereinander (unter verschiedenen) Aliasnamen geöffnet hatte, aber die :cDbank hieß immer gleich und somit gab es eine Meldung über eine DBF, die eigentlich nicht so hieß. Sowas verführt natürlich dazu, unendlich und an der falschen Stelle zu suchen. Selbst wenn ich den Alias anzeigen würde, wüßte ich aber immer noch nicht von welcher Instanz es die DBF ist. Also wäre es schön, wenn ich die auslesen könnte um somit genau zu wissen, was da rumzickt.
Cargo fällt somit auch flach, weil da auch nichts automatisch reingeschrieben werden könnte, was genau definiert wer was ist.!
OK, es sieht folgendermassen aus:
Ich habe eine Fehlerroutine, die entsprechende Meldungen rauswirft, welche DBF nicht das macht, was der Anwender erwartet.
Code: Alles auswählen
oXbp:cDbank
Cargo fällt somit auch flach, weil da auch nichts automatisch reingeschrieben werden könnte, was genau definiert wer was ist.!
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Name einer Instanz ermitteln
Hallo Manfred,
ich würde NIE den Alias() Namen bei Xbase++ benutzen, da dieser nie sicher ist.
Ich verwende den numerischen Selectbereich. Also
das hat zwei Vorteile, der Selectbereich ist im Programm (je Thread) eindeutig und wenn man wissen will ob er noch offen ist
wird es nie eine Fehlermeldung bei (::nAlias)->(used()) geben. Bei (cAlias)->(used()) knallt es wenn es den Alias nicht (mehr) gibt.
Somit könntest du in der Fehlerroutine den Selectbereich ausgeben.
ich würde NIE den Alias() Namen bei Xbase++ benutzen, da dieser nie sicher ist.
Ich verwende den numerischen Selectbereich. Also
Code: Alles auswählen
USE cDBF ... NEW // KEIN ALIAS ANGEBEN
if neterr()
...
endif
::nAlias := select()
wird es nie eine Fehlermeldung bei (::nAlias)->(used()) geben. Bei (cAlias)->(used()) knallt es wenn es den Alias nicht (mehr) gibt.
Somit könntest du in der Fehlerroutine den Selectbereich ausgeben.
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Name einer Instanz ermitteln
Hubert,
das war nur ein Beispiel. Bitte nicht drauf herumreiten. Ich nutze die Selectnummer
das war nur ein Beispiel. Bitte nicht drauf herumreiten. Ich nutze die Selectnummer
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Name einer Instanz ermitteln
Manfred,
wenn du mir nicht glauben willst, dass es sowas wie den Instanznamen nicht gibt, baue doch zum Testen eine Methode mit einen schweren Fehler ein.
Dann schau in der XppError.LOG nach ob du den NAMEN der Variablen dort findest. Wenn nein, geht es einfach nicht (außer du legst extra ein Feld NameIVar an),
falls doch, kannst du in der ErrorSys.prg nachsehen wie sie den Namen ermittelt haben![Wink ;-)](./images/smilies/wink.gif)
das sollte eine schöne Fehlermeldung geben, bitte die XppError.LOG posten ![Very Happy :D](./images/smilies/biggrin.gif)
wenn du mir nicht glauben willst, dass es sowas wie den Instanznamen nicht gibt, baue doch zum Testen eine Methode mit einen schweren Fehler ein.
Dann schau in der XppError.LOG nach ob du den NAMEN der Variablen dort findest. Wenn nein, geht es einfach nicht (außer du legst extra ein Feld NameIVar an),
falls doch, kannst du in der ErrorSys.prg nachsehen wie sie den Namen ermittelt haben
![Wink ;-)](./images/smilies/wink.gif)
Code: Alles auswählen
method ...:HierKnallts(oXbp)
local cMichKenntManNicht := "A", nWasSollDas
nWasSollDas := cMichKenntManNicht ^ 2
return self
![Very Happy :D](./images/smilies/biggrin.gif)
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Name einer Instanz ermitteln
Hubert,
ich glaube Dir das. Auf jeden Fall. Ich wollte nur ein Abschweifen verhindern. Aber wenn es nicht geht, dann geht es nicht.
ich glaube Dir das. Auf jeden Fall. Ich wollte nur ein Abschweifen verhindern. Aber wenn es nicht geht, dann geht es nicht.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Name einer Instanz ermitteln
Der Select-Bereich kann dir schon helfen, aber ist es eigentlich nicht egal in welcher der "Instanzen" der Fehler auftritt,
es kommt doch auf den Inhalt der Datenfelder, den Selectbereich und den durchlaufenen Quellcode an oder ?
Ich habe bei mir die ErrorSys.PRG so aufgebohrt, dass sie mir Aktenzeichen, Sachbearbeiter und Routine des Fehlers ausgibt ...
Oft reicht aber auch das nicht aus, da das andere Vorgehen erst Situationen produziert, die ich bei meinen Test gar nicht vorausgesehen habe.
es kommt doch auf den Inhalt der Datenfelder, den Selectbereich und den durchlaufenen Quellcode an oder ?
Ich habe bei mir die ErrorSys.PRG so aufgebohrt, dass sie mir Aktenzeichen, Sachbearbeiter und Routine des Fehlers ausgibt ...
Oft reicht aber auch das nicht aus, da das andere Vorgehen erst Situationen produziert, die ich bei meinen Test gar nicht vorausgesehen habe.
Gruß
Hubert
Hubert
- Herbert
- Der Entwickler von "Deep Thought"
- Beiträge: 1991
- Registriert: Do, 14. Aug 2008 0:22
- Wohnort: Gmunden am Traunsee, Österreich
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Name einer Instanz ermitteln
Manfred hat geschrieben:Ich habe eine Fehlerroutine, die entsprechende Meldungen rauswirft, welche DBF nicht das macht, was der Anwender erwartet.
Code: Alles auswählen
============================================================================
ERROR MESSAGE from "D:\xbase\MANFRED.EXE" Date:, 14.10.10, 20:36:06
Xbase++ version :, Xbase++ (R) Version 1.90.355
Operating system :, Windows 7 06.01 Build 07600
Application version :, ZUSCALC, 7.1, 01.09.2010
User: Manfred/MANFRED-PC
----------------------------------------------------------------------------
oError:canDefault :Nein
oError:canRetry :Nein
oError:canSubstitute:Ja
oError:cargo :NIL
oError:description :Vom Benutzer nicht erwartetes Verhalten
oError:genCode :2
oError:operation :<NIL> / <42>
oError:osCode :0
oError:severity :2
oError:subCode :3
oError:subSystem :BASE
oError:thread :5
oError:tries :0
----------------------------------------------------------------------------
CALLSTACK:
----------------------------------------------------------------------------
Aufgerufen von: DBEZKA(623)
Aufgerufen von: PRNLIST:SAVEDATA(256)
Aufgerufen von: (B)PRNLIST:INIT(78)
Aufgerufen von: XBPPUSHBUTTON:HANDLEEVENT(968)
Aufgerufen von: DIALOG(294)
![Very Happy :D](./images/smilies/biggrin.gif)
Schön speziell. In diesem Fall würde ich die DB einmal öffnen und für alle im selben Selectbereich ansprechbar lassen.Manfred hat geschrieben:Ich bilde x Instanzen von einem Datenbankobjekt und öffne damit x-mal eine DBF. Der Name oXbp(X):cDbank ist immer der gleiche, aber der Alias ist ein anderer. Jetzt hatte ich jüngst das Problem, dass ich eine DBF mehrmals hintereinander (unter verschiedenen) Aliasnamen geöffnet hatte, aber die :cDbank hieß immer gleich und somit gab es eine Meldung über eine DBF, die eigentlich nicht so hieß. Sowas verführt natürlich dazu, unendlich und an der falschen Stelle zu suchen. Selbst wenn ich den Alias anzeigen würde, wüßte ich aber immer noch nicht von welcher Instanz es die DBF ist. Also wäre es schön, wenn ich die auslesen könnte um somit genau zu wissen, was da rumzickt.
Cargo fällt somit auch flach, weil da auch nichts automatisch reingeschrieben werden könnte, was genau definiert wer was ist.!
Grüsse Herbert
Immer in Bewegung...
Immer in Bewegung...
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Name einer Instanz ermitteln
nö ... das ist IMHO die einzige Lösung mit :Cargo was "allgemein" gilt.Manfred hat geschrieben:Cargo fällt somit auch flach, weil da auch nichts automatisch reingeschrieben werden könnte, was genau definiert wer was ist.!
Code: Alles auswählen
cName := oDialog:title
cName := oStatic:caption
cName := oButton:caption
im Grunde müsstest du mit oXbp:isDerivedFrom() "feststellen" um was für ein XbPart es sich handelt.
Frage : pro ALIAS() auch ein Thread ?
wenn ja, vielleicht wäre dort ein Ansatz um dem Thread ( wer/wo/wann ) mehr Infos zu entlocken ?
gruss by OHR
Jimmy
Jimmy
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: Name einer Instanz ermitteln
Hallo Manfred,
kannst Du nicht einfach die Programmzeilennummer speichern/verwenden?
Wenn ich es richtig verstanden habe, möchtest Du das ganze ja im "Fehlerfall" auswerten...
Und dann kannst Du direkt in die Zeile im Programmcode reingehen und siehst auch den Namen der Local-Variable
.
Uli
kannst Du nicht einfach die Programmzeilennummer speichern/verwenden?
Wenn ich es richtig verstanden habe, möchtest Du das ganze ja im "Fehlerfall" auswerten...
Und dann kannst Du direkt in die Zeile im Programmcode reingehen und siehst auch den Namen der Local-Variable
![Smile :-)](./images/smilies/smile.gif)
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Name einer Instanz ermitteln
Um die Sache auf den Punkt zu bringen:
Ich kann alles über Umwege machen. Ich wollte nur wissen, ob es einen kurzen, knappen, eleganten Weg gibt. Ich habe oft feststellen müssen, dass ich viel zu viel Verbiegungen vollzogen habe um etwas zu erreichen, was vom System her schon längst zur Verfügung stand. Deshalb meine Frage! Im Zweifelsfalle gebe ich einen Parameter in der entsprechenden Öffnungemethode mit, über den ich alles sehen kann. Aber das ist nur der letzte Weg. Aber scheinbar auch der einzige.
Ich kann alles über Umwege machen. Ich wollte nur wissen, ob es einen kurzen, knappen, eleganten Weg gibt. Ich habe oft feststellen müssen, dass ich viel zu viel Verbiegungen vollzogen habe um etwas zu erreichen, was vom System her schon längst zur Verfügung stand. Deshalb meine Frage! Im Zweifelsfalle gebe ich einen Parameter in der entsprechenden Öffnungemethode mit, über den ich alles sehen kann. Aber das ist nur der letzte Weg. Aber scheinbar auch der einzige.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Name einer Instanz ermitteln [ERLDIEGT]
indem du einen "vergibst" ...Manfred hat geschrieben:Wie komme ich an den Namen einer Instanz ran?
einen "Namen" kannst du IMHO nicht verwenden ... damit kann die Maschine "so" nichts anfangen
![Wink ;)](./images/smilies/wink.gif)
die Antwort von Hubert mit o:Cargo ist "die" auf einen "Namen".
was anderes ist dass jedes mal, wenn Xbase++ ein Object "erzeugt", es ein Handle geben MUSS ... eine Frage an Pablo.
p.s. ich nehme solche "dynamischen" Objecte immer in ein Array zwecks "Verwaltung" auf.
gruss by OHR
Jimmy
Jimmy