Name einer Instanz ermitteln [ERLEDIGT]

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

Name einer Instanz ermitteln [ERLEDIGT]

Beitragvon Manfred » Do, 01. Mär 2012 14:50

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 Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
Benutzeravatar
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 15972
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Name einer Instanz ermitteln

Beitragvon georg » Do, 01. Mär 2012 15:18

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
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1769
Registriert: Fr, 08. Feb 2008 21:29

Re: Name einer Instanz ermitteln

Beitragvon Manfred » Do, 01. Mär 2012 15:23

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 Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
Benutzeravatar
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 15972
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Name einer Instanz ermitteln

Beitragvon brandelh » Do, 01. Mär 2012 15:52

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
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13267
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: Name einer Instanz ermitteln

Beitragvon Manfred » Do, 01. Mär 2012 16:07

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 Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
Benutzeravatar
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 15972
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Name einer Instanz ermitteln

Beitragvon brandelh » Do, 01. Mär 2012 16:15

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
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13267
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: Name einer Instanz ermitteln

Beitragvon Manfred » Do, 01. Mär 2012 16:18

Hubert,

das war nur ein Beispiel. Bitte nicht drauf herumreiten. Ich nutze die Selectnummer
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
Benutzeravatar
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 15972
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Name einer Instanz ermitteln

Beitragvon brandelh » Do, 01. Mär 2012 16:28

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
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13267
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: Name einer Instanz ermitteln

Beitragvon Manfred » Do, 01. Mär 2012 16:34

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 Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
Benutzeravatar
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 15972
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Name einer Instanz ermitteln

Beitragvon brandelh » Do, 01. Mär 2012 16:58

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
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13267
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: Name einer Instanz ermitteln

Beitragvon Herbert » Do, 01. Mär 2012 17:09

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
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1764
Registriert: Mi, 13. Aug 2008 23:22
Wohnort: Gmunden am Traunsee, Österreich

Re: Name einer Instanz ermitteln

Beitragvon AUGE_OHR » Fr, 02. Mär 2012 3:52

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
Benutzeravatar
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10146
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Name einer Instanz ermitteln

Beitragvon UliTs » Fr, 02. Mär 2012 9:47

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
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 2356
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen

Re: Name einer Instanz ermitteln

Beitragvon Manfred » Fr, 02. Mär 2012 9:51

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 Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
Benutzeravatar
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 15972
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Name einer Instanz ermitteln [ERLDIEGT]

Beitragvon AUGE_OHR » Sa, 03. Mär 2012 0:26

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
Benutzeravatar
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10146
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg


Zurück zu OOP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast