Seite 1 von 1

dcbrowse ...

Verfasst: Do, 30. Jun 2016 9:33
von XBaseAzubi
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

Re: dcbrowse ...

Verfasst: Do, 30. Jun 2016 9:36
von brandelh
bei normalen Browsern muss man leere Strings oder Zahlen angeben, NIL mag der gar nicht.

Re: dcbrowse ...

Verfasst: Do, 30. Jun 2016 9:56
von Tom
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.

Re: dcbrowse ...

Verfasst: Do, 30. Jun 2016 13:40
von Tom
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.