:setData() -> Parameter hat falschen Typ

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

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

:setData() -> Parameter hat falschen Typ

Beitrag von Manfred »

Hi,

diese Meldung bekomme ich immer wieder. Was könnte ich falsch machen?

Ich habe im Debugger an dieser Stelle halt gemacht und folgendes probiert:

1. das Feld ist von hause aus disabled
2. ich habe ein feld:setdata() ausgeführt
3. im Debugger kam die gleiche Meldung
4. ich habe das Feld enabled (True)
5. Ich habe wieder feld:setData() ausgeführt im Debugger
6. es klappte

Nächste Tour.

1.) das Feld ist von hause aus enabled
2. ich habe ein feld:setdata() ausgeführt
3. im Debugger kam die gleiche Meldung
4. ich habe das Feld disabled (True)
5. Ich habe wieder feld:setData() ausgeführt im Debugger
6. es klappte

Was soll das?
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:

Beitrag von brandelh »

Hallo Manfred,

bist du sicher, dass du einen STRING-Parameter übergibst ?

Oder nutzt du den :datalink ? Wenn ja, bitte zeigen.

Bitte zeige uns auch die XppError.log, was passiert übrigens ohne Debugger ?
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

Beitrag von Manfred »

Hi Hubert,
brandelh hat geschrieben:Hallo Manfred,

bist du sicher, dass du einen STRING-Parameter übergibst ?
Das war mein erster Fehler, das habe ich dann im Datalink geändert
Oder nutzt du den :datalink ? Wenn ja, bitte zeigen.
es betrifft übrigens in dem alle Arten von Felder. Datum, String, Numerisch, Checkbox

{ |x| IIf( x==NIL, DtoC(oVo:datumak) ,NIL) }}
Bitte zeige uns auch die XppError.log, was passiert übrigens ohne Debugger ?
Ohne Debugger ist das gleiche Problem, deshalb habe ich es ja über den Debugger der VX probiert um zu sehen, wo ich einen Fehler mache.
Ich habe die Felder in ein Array geschrieben und mache dann darauf ein Setdata. Wenn ich das Array im Debugger einzeln durchgehe, von Hand in der Command Zeile, ist es so, wie oben beschrieben.

Hier die Error.log

Code: Alles auswählen

Xbase++ Version     : Xbase++ (R) Version 1.90.331
Betriebssystem      : Windows XP 05.01 Build 02600 Service Pack 2
Station             : AMD2800
Programmversion     : Version: 2008.03.13
------------------------------------------------------------------------------
oError:args         :
          -> VALTYPE: O CLASS: XbpSLE
oError:canDefault   : N
oError:canRetry     : N
oError:canSubstitute: J
oError:cargo        : NIL
oError:description  : Parameter hat falschen Typ
oError:filename     : 
oError:genCode      :          2
oError:operation    : :setData
oError:osCode       :          0
oError:severity     :          2
oError:subCode      :       1025
oError:subSystem    : BASE
oError:thread       :          3
oError:tries        :          0
------------------------------------------------------------------------------
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
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
NIL darfst Du nicht an einen :EditBuffer übergeben!

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige 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

Beitrag von Manfred »

Hi Martin,

wenn Du das mit datalink meinst, dann muß ich zumindest vorab erstmal dementieren. Ich habe das auch an anderen Stellen und da klappt das.

aber ich werde es trotzdem einmal testen.
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
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

Beitrag von Manfred »

Hi Martin,

wie erwartet, das ist es nicht.

Außerdem stellt sich mir die Frage, wieso NIL, ich mache doch Setdata() und nicht getData() also wird doch eh auf das 1. Element zugegriffen und da steht ja DtoC(ovo:datumak) drin. Oder was meinst Du?
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
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Was steht denn in oVo:datumak drin zum Zeitpunkt des Initialisierens und Aufbau der Maske? Noch NIL?

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige 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

Beitrag von Manfred »

Hi Martin,

wenn ich das feld im Debugger aufrufe, dann ist es leer. Wenn ich es mit Dtoc(oVo:datumak) im Debugger aufrufe, dann ist ein leeres Datum drin. Es steht kein NIL drin. Was zum Zeitpunkt der Erzeugung drin steht weiß ich nicht, aber es wird vorher auf jeden Fall mit Werten beschickt, bevor ein setdata() gemacht wird. Wie gesagt, wenn einmal /enable/disable gemacht wird, klappt es. Warum? :dontknow:
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
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

Beitrag von Manfred »

Hi,

also, wie erwartet. Zur Zeit der Erzeugung des Objektes steht in ovo:datumak NIL. Dann werden Werte gelsen und dann ist es ein Datumsfeld. Dann wird im Datalink konvertiert (DtoC(oVo:datumak)). Das sollte doch dann richtig sein?

Ich habe übrigens die anderen geprüft, funktionierenden, OBjekte angesehen, da ist es dasselbe. Im Moment der Erzeugung steht in der Var Nil und kurz vor dem Setdata wird etwas in die Var geschrieben. Dort gibt es auch keine Fehler. Also irgendwas anderes blödes, was ich verzapft habe.
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:

Beitrag von brandelh »

Hallo Manfred,

ich verstehe nicht, wie du so seltsame codeblocks für den Datalink verwenden kannst. Die Vorgaben sehen anders aus und das aus einem bestimmten Grund. Die Abfrage ob x=NIL ist heißt normalerweise PCount()=0, also überhaupt kein Parameter übergeben !

Wenn du dann einen Parameter übergibtst, dann macht er NIL (2. Auswahl) im Codeblock, was soll er damit anfangen ?

Falls du NUR ein Anzeigefeld willst (also nie damit speichern), nimm diese Form:

Code: Alles auswählen

:datalink( {|| FeldTypNachChar(field->XYZ) } )
ansonsten frage mit PCount()=0 ab, ob ein Speichern gewünscht ist, aber immer daran denken, das letzte Ergebnis der Anweisung wird als Rückgabewert verwendet ! Sollte auch bei einer Speicherung der Puffer des SLE neu gesetzt werden - das weiß ich nicht - dann wäre es genau der Fall dass NIL in den Puffer geladen werden soll.

Code: Alles auswählen

:datalink( {|x| iif(PCount()=0,FeldTypNachChar(field->XYZ),;
                            field->XYZ := CharNachFeldTyp(x) } )
FeldTypNachChar() etc. stehen hier als Synonym für die richtigen Funktionen. VarToChar() etc. kann, muss aber nicht passen.
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

Beitrag von Manfred »

Hi Hubert,

warum? Nun, ich hatte anfangs dann wohl irgendwas falsch gemacht. Ich habe nur den Setdata() Bereich angegeben und da hat es geknallt. Danach kam ich darauf, dass man wohl im Zweifelsfalle NIL angibt. Das klappte dann direkt. Also gab es zu dem Zeitpunkt keine weitere Argumentation mehr, anders zu handeln.

Ich habe es gerade probiert, das war es auch 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:

Beitrag von brandelh »

Hi,

ich habe hier mal ein Testprogramm gemacht und siehe da, auch deine Codeblocks arbeiten bei :setData() einwandfrei. Disable() und EnAble() machen hier keinen Unterschied bei :setData() und :getData() - nur die Maus ...

Wenn ich nun mit SetData( NIL ) einen Fehler erzwinge,
steht in meiner XppError:
oError:args
-> VALTYPE: O CLASS: XbpSLE
-> VALTYPE: U VALUE: NIL
also zwei Parameterzeilen und ein NIL für das als NIL übergebene Feld.
Du hast oben nur eine Zeile und zwar das Objekt.
Irgendwas stimmt mit dem Aufruf dieser Methode und dem Objekt nicht, aber was ???
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

Beitrag von Manfred »

Hi Hubert,

ich denke mal, hier liegt der Futtsack. Hier der Code wie ich es löse

Code: Alles auswählen

METHOD vo:erzeugeArrayStatistikFelder(objekt,nStaticBreite, nStaticHoehe)
       MEMVAR oVo
       ::aFelderStatistikVo := {;
                                {"Datum Ankauf:"   ,{|| oVo:oDatumAk    := XbpSle():new(objekt:oRahmenStatistikVo     ,,,{nStaticBreite,nStaticHoehe})},;
                                                    {|| oVo:oDatumAk:datalink    := [color=red]{ || DtoC(oVo:datumak) }[/color]}},;
                                {"Datum erfasst:"  ,{|| oVo:oDatumEin   := XbpSle():new(objekt:oRahmenStatistikVo     ,,,{nStaticBreite,nStaticHoehe})},;
                                                    {|| oVo:oDatumEin:datalink   := [color=red]{ |x| IIf( x==NIL, DtoC(oVo:datumein)  ,NIL) }[/color]}},;
                                {"Datum Ausgang:"  ,{|| oVo:oDatumAus   := XbpSle():new(objekt:oRahmenStatistikVo     ,,,{nStaticBreite,nStaticHoehe})},;
                                                    {|| oVo:oDatumAus:datalink   := [color=red]{ |x| IIf( x==NIL, DtoC(oVo:datumaus)  ,NIL) }[/color]}},;
                                {"Datum Verleih:"  ,{|| oVo:oDatumLeih  := XbpSle():new(objekt:oRahmenStatistikVo     ,,,{nStaticBreite,nStaticHoehe})},;
                                                    {|| oVo:oDatumLeih:datalink  := [color=red]{ |x| IIf( x==NIL, DtoC(oVo:datumleih) ,NIL) }[/color]}},;
                                {"Datum zurück:"   ,{|| oVo:oDatumRueck := XbpSle():new(objekt:oRahmenStatistikVo     ,,,{nStaticBreite,nStaticHoehe})},;
                                                    {|| oVo:oDatumRueck:datalink := [color=red]{ |x| IIf( x==NIL, DtoC(oVo:datumrueck),NIL) }[/color]}},;
                                {"Datum verkauft:" ,{|| oVo:oDatumvk    := XbpSle():new(objekt:oRahmenStatistikVo     ,,,{nStaticBreite,nStaticHoehe})},;
                                                    {|| oVo:oDatumVk:datalink    := [color=red]{ |x| IIf( x==NIL, DtoC(oVo:datumvk)   ,NIL) }[/color]}},;
                                {"Lagertage:"      ,{|| oVo:oLagerTage  := XbpSle():new(objekt:oRahmenStatistikVo     ,,,{nStaticBreite,nStaticHoehe})},;
                                                    {|| oVo:oLagertage:datalink  := [color=red]{ |x| IIf( x==NIL, Str(oVo:lagertage)  ,NIL) }[/color]}},;
                                {"Internetverkauf:",{|| oVo:oInternetvk := XbpCheckBox():new(objekt:oRahmenStatistikVo,,,{nStaticBreite,nStaticHoehe})},;
                                                    {|| oVo:oInternetvk:datalink := [color=red]{ |x| IIf( x==NIL, oVo:internetvk      ,NIL) }[/color]}},;
                                {"Reserve:"        ,{|| oVo:oReserve    := XbpCheckBox():new(objekt:oRahmenStatistikVo,,,{nStaticBreite,nStaticHoehe})},;
                                                    {|| oVo:oReserve:datalink    := [color=red]{ |x| IIf( x==NIL, oVo:reserve         ,NIL) }[/color]}},;
                                {"Schrott:"        ,{|| oVo:oSchrott    := XbpCheckBox():new(objekt:oRahmenStatistikVo,,,{nStaticBreite,nStaticHoehe})},;
                                                    {|| oVo:oSchrott:datalink    := [color=red]{ |x| IIf( x==NIL, oVo:schrott         ,NIL) }[/color]}};
                               }
       ASort(::aFelderStatistikVo,,,{|aX,aY| aX[1] < aY[1]})
RETURN self


oVo:erzeugeArrayStatistikFelder(oVt,nStaticLaenge,nStaticHoehe-1)

         FOR nI := 1 TO Len(oVo:aFelderStatistikVo)
             oStatic := feldtexte():new(oVt:oRahmenStatistikVo,,{nX,nY},{nStaticLaenge,nStaticHoehe-1})
             oStatic:caption := oVo:aFelderStatistikVo[nI,1]
             oStatic:create()
             nXEingabe := nX + nXAbstand + oStatic:currentsize()[1]
             oTemp := Eval(oVo:aFelderStatistikVo[nI,2])
             oTemp:datalink := oVo:aFelderStatistikVo[nI,3]
             oTemp:create()
             oTemp:disable()
             oTemp:setPos({nXEingabe,nY})
             AAdd(oVo:aStatistikControls, oTemp)
             nY -= 20
             IF nY <= 0
                nY := oVt:oRahmenStatistikVo:currentSize()[2]-nYOrg
                nX := nX + nXAbstand + oTemp:currentpos()[1] + oTemp:currentSize()[1]
             ENDIF
         NEXT


          FOR nI := 1 TO Len(oVo:aStatistikControls)
              oVo:aStatistikControls[nI]:setData()
          NEXT

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
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Rolf Ramacher »

Hi Manfred,


versuch es mal so:

Code: Alles auswählen

{ |x| IIf( x==NIL, DtoC(oVo:datumak) ,"  .  .    ") }} 

Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
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:

Beitrag von brandelh »

Hallo Manfred,

deine Konstruktion macht die Fehlersuche nicht leichter ;-)
und der CallStack fehlt in der XppError.log auch ...

Was steht denn fest ?

1. Es ist ein XbpSLE Objekt vorhanden, sonst wäre der erste oError Argument anders.
2. Die Methode setData() wird aufgerufen, sonst würde diese unten nicht als Operation gemeldet.
3. Wenn du nun einen gültigen Parameter (2. Parameter in Errorlog)
übergeben hättest, wäre kein Fehler da
4. Wenn du NIL (oder einen ungültigen) Parameter übergeben hättest,
wäre eine 2. Zeile mit diesem ungültigen Parameter in der Errorlog.

Ich schließe daher daraus, dass der Parameter in :datalink zu dieser Zeit im Fehlerfall kein Codeblock ist ! Aber warum ???
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

Beitrag von Manfred »

Hi Hubert,

ich nehme es mal eben zur Probe aus der Schleife raus und mache es direkt. Mal sehen, was dann passiert
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:

Beitrag von brandelh »

Hallo Manfred,

ehrlich gesagt finde ich die ARRAY Methode mehr als unübersichtlich.
Ich kann kaum erkennen wo welcher Codeblock bzw. Array aufhört und das nächste anfängt.
Du solltest dringend über eine einfachere Umsetzung nachdenken.
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

Beitrag von Manfred »

Nee Hubert,

das liegt hier an der Formatierung. Das Code Feld formatiert anders als es bei mir aussieht. Ich wüßte nicht, ob man das hier breiter machen kann.

Und ohne Code Tags, da hast Du Dich ja schon mal beschwert, weil man dann auch nicht besser lesen kann. :wink:
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
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Ich habe jetzt die :datalink-Codeblöcke mal rot eingefärbt...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige 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

Beitrag von Manfred »

Hi Martin,

das ist nett. Aber irgendwer hat es doch mal geschafft ganz breit die Texte hinzubekommen.
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
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

Beitrag von Manfred »

Hm,

wenn ich es nicht in der Schleife mache, sondern zur Probe ein Objekt direkt erstelle, dann klappt es. Also liegt es an der Art, wie es gemacht wird. Ich werde es jetzt Schritt für Schritt zerpflücken.
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:

Beitrag von brandelh »

Hi,

ich habe die Fehlerursache gefunden !

Wenn man :setData() ohne Parameter aufruft UND datalink nichts zugewiesen bekommen hat (== NIL), dann erscheint genau dein Fehlerbild in der XppError.log

Irgendwie muss eines deiner Objekte ein SetData() ausführen, bevor der datalink gesetzt ist.
Zuletzt geändert von brandelh am Do, 13. Mär 2008 13:09, insgesamt 1-mal geändert.
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

Beitrag von Manfred »

Hi,

also ich weiß jetzt, wenn man den datalink nicht in der Schleife über oTemp:datalink(), sondern direkt in
oVo:oDatumak:datalink := ....

umwandelt, dann klappt es.

Code: Alles auswählen

FOR nI := 1 TO Len(oVo:aFelderStatistikVo)
             oStatic := feldtexte():new(oVt:oRahmenStatistikVo,,{nX,nY},{nStaticLaenge,nStaticHoehe-1})
             oStatic:caption := oVo:aFelderStatistikVo[nI,1]
             oStatic:create()
             nXEingabe := nX + nXAbstand + oStatic:currentsize()[1]
             oTemp := Eval(oVo:aFelderStatistikVo[nI,2])
             oTemp:datalink := oVo:aFelderStatistikVo[nI,3]
             IF nI = 1
                oVo:oDatumAk:datalink := { || DtoC(oVo:datumak) }
             ENDIF
             oTemp:create()
             oTemp:disable()
             oTemp:setPos({nXEingabe,nY})
             AAdd(oVo:aStatistikControls, oTemp)
             nY -= 20
             IF nY <= 0
                nY := oVt:oRahmenStatistikVo:currentSize()[2]-nYOrg
                nX := nX + nXAbstand + oTemp:currentpos()[1] + oTemp:currentSize()[1]
             ENDIF
         NEXT
Ich habe in den Objekten nachgesehen, es steht jeweils der Codeblock in dem Datalink drin. Oder was meinst Du jetzt Hubert?
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
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Hubert,
genau deshalb hatte ich ja vorhin auch gefragt, was in oVo:datumak zum Zeitpunkt des Aufbaus der Maske drin steht. Es wird ja beim Anzeigen der Maske ein implizites SetData() aufgerufen - sonst würde ja nirgendwo was angezeigt werden! Und wenn man seine Variablen nicht ordentlich initialisiert, knallt es halt.
Bei DBF-Dateien ist das unkritisch, da der Phantom-Datensatz ja ordentlich intialisiert (alle Felder sind halt - ihren jeweiligen Datentypen entsprechend - leer, aber eben nicht NIL).

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
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:

Beitrag von brandelh »

Hallo Manfred,

baue mal eine Prüfung in diese Schleife ein:

Code: Alles auswählen

FOR nI := 1 TO Len(oVo:aStatistikControls) 
       oVo:aStatistikControls[nI]:setData() 
NEXT 
denn hier ist der erste setData() Aufruf den ich sehe.

Code: Alles auswählen

FOR nI := 1 TO Len(oVo:aStatistikControls) 
[color=red]       if Valtype(oVo:aStatistikControls[nI]:datalink) # "B"
          msgbox(Var2Char(oVo:aStatistikControls[nI]:datalink),;
                       "Kein Codeblock  "+str(nI) )
       endif[/color]
       oVo:aStatistikControls[nI]:setData() 
NEXT 
So könnte man auch das Element finden, allerdings hast du ja Sortiert ... Asort bitte zum Test abschalten :D
Gruß
Hubert
Antworten