Das Forentreffen 2018 findet am 20./21. April in Dresden statt. Weitere Infos hier
Anmeldungen zum Forentreffen 2018 sind auf der Anmeldeseite möglich
Zur Homepage des Deutschsprachige Xbase-Entwickler e. V.
Xbase++-Wiki des Deutschsprachige Xbase-Entwickler e. V.

dcbrowse ...

Moderator: Moderatoren

Antworten
XBaseAzubi
Rookie
Rookie
Beiträge: 10
Registriert: Fr, 13. Mai 2016 8:14
Wohnort: Tattendorf/Österreich

dcbrowse ...

Beitrag von XBaseAzubi » Do, 30. Jun 2016 9:33

Hallo!
Ich bekomme beim Öffnen der Anwendung die Fehlermeldung: "Fehler BASE/2266. Empfänger der Nachrichten ist kein Objekt. Operation: dataSource
Dabei soll nur unter anderem zu Beginn ein leeres Browse-Objekt angezeigt werden.

Code: Alles auswählen

CLASS Kassa
...   
   EXPORTED:
   VAR aKassa
   VAR oArtikel
...
ENDCLASS

method Kassa:show
   ::aKassa:={NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL}

...
@ 10,0 dcbrowse ::oArtikel DATA ::aKassa SIZE 99,25 TABSTOP OPTIMIZE
            dcbrowsecol DATA {||DC_GetColArray(1 ,::aKassa)} HEADER "KassenID" PARENT ::oArtikel PROTECT {||.t.}
...
return
Bitte wo habe ich den Denkfehler?

Danke
Martin

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13811
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: dcbrowse ...

Beitrag von brandelh » Do, 30. Jun 2016 9:36

bei normalen Browsern muss man leere Strings oder Zahlen angeben, NIL mag der gar nicht.
Gruß
Hubert

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 6828
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: dcbrowse ...

Beitrag von Tom » Do, 30. Jun 2016 9:56

Falsch ist der zweite Parameter von DC_GetColArray. Da muss das Browse-Objekt angegeben werden:

Code: Alles auswählen

DATA {||DC_GetColArray(1 ,::oArtikel)}
Ach so: DC_GetColArray() gibt bei leeren Arrays immer einen String zurück. Das ist gefährlich, wenn man Arrays browsen will, die spaltenweise andere Daten enthalten und dort anders formatieren. Dies nur als Hinweis. Man kann das so abfangen:

Code: Alles auswählen

DATA {||IF(Len(oBrowse:dataSource)>0,DC_GetColArray(1 ,oBrowse),0.00)} HEADER 'Preis'
Bei Strings ist das nicht nötig.
Herzlich,
Tom

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 6828
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: dcbrowse ...

Beitrag von Tom » Do, 30. Jun 2016 13:40

Ergänzung:

Das:

Code: Alles auswählen

::aKassa:={NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL}
ist ein eindimensionales Array. Das geht sowieso nicht (zu browsende Arrays müssen zweidimensional sein, es sei denn, man hat ziemlich komplexe DATA-Codeblöcke gebaut), ist aber nicht für den Fehler verantwortlich. Es müsste so aussehen:

Code: Alles auswählen

::aKassa:={{NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL}}
Eigentlich aber reicht das hier:

Code: Alles auswählen

::aKassa:={}
DCBROWSE kann das, wie gesagt, aber der Parameter in DC_GetColArray ist falsch.
Herzlich,
Tom

Antworten