Name einer Instanz ermitteln [ERLEDIGT]

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Name einer Instanz ermitteln [ERLEDIGT]

Beitrag von Manfred »

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.
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!!
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Name einer Instanz ermitteln

Beitrag von georg »

Hallo, Manfred -


Du meinst

Code: Alles auswählen

oXbp := XbpDialog():new(...)
Da Du bestimmt nicht oXbp:className() meinst, bleibt die Frage übrig, ob Du wissen willst, wie "oXbp" heisst?


Verwundert grüssend,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Name einer Instanz ermitteln

Beitrag von Manfred »

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:

Code: Alles auswählen

ox1 := XbpDialog():new()
ox2 := XbpDialog():new()
ox3 := XbpDialog():new()
ox4 := XbpDialog():new()
ox5 := XbpDialog():new()
ergibt immer nur XbpDialog und das hilft mir nicht weiter, für das wozu ich es benötigen will.
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!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Name einer Instanz ermitteln

Beitrag von brandelh »

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.

Code: Alles auswählen

oXbp := XbpSle()....
oXbp:cargo := "oXbp"
...
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:

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
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Name einer Instanz ermitteln

Beitrag von Manfred »

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.

Code: Alles auswählen

oXbp:cDbank
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.!
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!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Name einer Instanz ermitteln

Beitrag von brandelh »

Hallo Manfred,

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()
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.
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Name einer Instanz ermitteln

Beitrag von Manfred »

Hubert,

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!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Name einer Instanz ermitteln

Beitrag von brandelh »

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 ;-)

Code: Alles auswählen

method ...:HierKnallts(oXbp)
    local cMichKenntManNicht := "A", nWasSollDas
    nWasSollDas := cMichKenntManNicht ^ 2
return self
das sollte eine schöne Fehlermeldung geben, bitte die XppError.LOG posten :D
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Name einer Instanz ermitteln

Beitrag von Manfred »

Hubert,

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!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Name einer Instanz ermitteln

Beitrag von brandelh »

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.
Gruß
Hubert
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
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

Beitrag von Herbert »

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)
Etwa so?
:D
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.!
Schön speziell. In diesem Fall würde ich die DB einmal öffnen und für alle im selben Selectbereich ansprechbar lassen.
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Name einer Instanz ermitteln

Beitrag von AUGE_OHR »

Manfred hat geschrieben:Cargo fällt somit auch flach, weil da auch nichts automatisch reingeschrieben werden könnte, was genau definiert wer was ist.!
nö ... das ist IMHO die einzige Lösung mit :Cargo was "allgemein" gilt.

Code: Alles auswählen

cName := oDialog:title
cName := oStatic:caption
cName := oButton:caption
wären ja spezifisch für bestimmte XbParts.
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
UliTs
Der Entwickler von "Deep Thought"
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

Beitrag von UliTs »

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
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Name einer Instanz ermitteln

Beitrag von Manfred »

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.
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!!
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Name einer Instanz ermitteln [ERLDIEGT]

Beitrag von AUGE_OHR »

Manfred hat geschrieben:Wie komme ich an den Namen einer Instanz ran?
indem du einen "vergibst" ...

einen "Namen" kannst du IMHO nicht verwenden ... damit kann die Maschine "so" nichts anfangen ;)
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
Antworten