dcbrowse mit filter und color [erledigt]

Moderator: Moderatoren

Antworten
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

dcbrowse mit filter und color [erledigt]

Beitrag von Ewald »

Guten Tag zusammen,
ich kämpfe mit diesen 5 Zeilen. Und da genau mit dem Filter und der Colorzeile.
Das Array alofind hat 8 Elemente, wird in einer Funktion gefüllt und dann an das Hauptprogramm mit dem Browse zurückgegeben. Da gibt es keine Schwierigkeiten.
Wenn ich im Browse die letzte Zeile mit dem Color rausnehme, funktioniert alles wie geschmiert. Der gewünschte Filter wird gesetzt. Es werden nur Zeilen angezeigt, wenn in Spalte 5 ein Wert steht.
Wenn ich den Filter rausnehme (auskommentiere), funktioniert die Zeile mit dem Color wie geschmiert. Wenn in der Zeile das alofind[nkey,1] angeklickt wird erscheint das X und die Zeile wird rot.
Nur beides zusammen will nicht. Wenn ich den Code so wie oben lasse und das Programm starte füllt sich das Array alofind und danach knallt das Programm mit der Fehlermeldung ab.
Ich könnte gut ohne die color-Zeile leben oder ein Workarround dengeln - aber wie das so ist, ich wüsste gerne warum beides zusammen nicht geht.
Hat wohl jemand einschlägige Erfahrungen ? Schwere Kost könnte ich mir vorstellen.
Gruß
Ewald

Das geht so nicht

Code: Alles auswählen

bfilter={|a|if(vlonull="B",!empty(a[5]),1=1)}

@ 07,00 dcbrowse ob1 data alofind size 105,20 FILTER bfilter  ; 
        pointer nkey  ;
        itemselected {||alofind[nkey,1]:=if(alofind[nkey,1]="X"," ","X"),ob1:refreshcurrent()}  ;
        color {||if((!empty(alofind) .and. alofind[nkey,1]="X"),{GRA_CLR_RED,NIL},{NIL,NIL})}
Das funktioniert

Code: Alles auswählen

bfilter={|a|if(vlonull="B",!empty(a[5]),1=1)}

@ 07,00 dcbrowse ob1 data alofind size 105,20 ; // FILTER bfilter  ; 
        pointer nkey  ;
        itemselected {||alofind[nkey,1]:=if(alofind[nkey,1]="X"," ","X"),ob1:refreshcurrent()}  ;
        color {||if((!empty(alofind) .and. alofind[nkey,1]="X"),{GRA_CLR_RED,NIL},{NIL,NIL})}
Und das funktioniert auch

Code: Alles auswählen

bfilter={|a|if(vlonull="B",!empty(a[5]),1=1)}

@ 07,00 dcbrowse ob1 data alofind size 105,20 FILTER bfilter  ; 
        pointer nkey  ;
        itemselected {||alofind[nkey,1]:=if(alofind[nkey,1]="X"," ","X"),ob1:refreshcurrent()} // ;
       * color {||if((!empty(alofind) .and. alofind[nkey,1]="X"),{GRA_CLR_RED,NIL},{NIL,NIL})}

Code: Alles auswählen

oError:canDefault   : N
oError:canRetry     : N
oError:canSubstitute: Y
oError:cargo        : NIL
oError:description  : Error in array index
oError:filename     : 
oError:genCode      :          4
oError:operation    : <A of 16877>[<0>]
oError:osCode       :          0
oError:severity     :          2
oError:subCode      :       1012
oError:subSystem    : BASE
oError:thread       :          1
oError:tries        :          0
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Called from (B)MAIN(57)
Called from (B)DC_XBPCOLUMN:INIT(3202)
Called from XBPCOLUMN:DRAWROW(709)
Called from DC_XBPCOLUMN:DRAWROW(3885)
Called from (B)XBPBROWSE:DRAWROW(2170)
Called from XBPBROWSE:DRAWROW(2170)
Called from XBPBROWSE:FORCESTABLE(1154)
Called from DC_XBPBROWSE:FORCESTABLE(1427)
Called from XBPBROWSE:HANDLEEVENT(1536)
Called from DC_XBPBROWSE:HANDLEEVENT(1175)
Called from XBPBROWSE:REFRESHROWS(2381)
Called from XBPBROWSE:REFRESHALL(2305)
Called from DC_XBPBROWSE:REFRESHALL(1374)
Called from FLORTSUCH(188)
Called from (B)MAIN(33)
Called from DC_XBPPUSHBUTTON:ACTION(2464)
Called from (B)DC_XBPPUSHBUTTON:INIT(2006)
Called from XBPPUSHBUTTON:HANDLEEVENT(987)
Called from DC_GETLIST:EVENTLOOP(4651)
Called from DC_GETLIST:READGUI(3832)
Called from DC_READGUI(111)
Called from MAIN(100)
Zuletzt geändert von Ewald am Do, 23. Jul 2015 12:40, insgesamt 1-mal geändert.
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: dcbrowse mit filter und color

Beitrag von Rudolf »

Hallo,
immer drauf achten dass der Pointer nicht 0 ist bei jeder Abfrage, dann klappt es, also if(nkey>0...
Grüße
Rudolf
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: dcbrowse mit filter und color

Beitrag von Ewald »

Hallo Rudolf,
danke für die Lösung. So funktioniert es.

Code: Alles auswählen

color {||if((!empty(nkey) .and. !empty(alofind) .and. alofind[nkey,1]="X"),{GRA_CLR_RED,NIL},{NIL,NIL})}
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: dcbrowse mit filter und color [erledigt]

Beitrag von Martin Altmann »

Ewald,
so kann es nicht funktionieren, da immer der komplette Ausdruck evaluiert wird (zumindest, wenn nicht SET OPTIMIZE eingeschaltet ist)!
Wenn nkey = 0 ist, wird folgendes geprüft:

Code: Alles auswählen

if((!empty(0) .and. !empty(alofind) .and. alofind[0,1]="X")
damit knallt es im dritten Teile deiner Prüfung!
Du musst also anders schachteln:

Code: Alles auswählen

color {||iif((!empty(nkey) .and. !empty(alofind), iif( alofind[nkey,1]="X",{GRA_CLR_RED,NIL},{NIL,NIL}),{NIL,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.
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: dcbrowse mit filter und color [erledigt]

Beitrag von Ewald »

Hallo Martin,
du musst jetzt ganz stark sein :D
Aber genau so wie ich es beschrieben habe funktioniert es und ist auch schon im Einsatz.
Gruß
Ewald

Code: Alles auswählen

color {||if((!empty(nkey) .and. !empty(alofind) .and. alofind[nkey,1]="X"),{GRA_CLR_RED,NIL},{NIL,NIL})}
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: dcbrowse mit filter und color [erledigt]

Beitrag von Martin Altmann »

Ewald,
dann wird bei Dir wohl der Optimizer eingeschaltet sein.
Keine Sorge - ich muss nicht stark sein. Ich kann das verkraften.
Du musst nur an meine Worte denken, wenn es auf einmal nicht mehr geht ;-)

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.
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: dcbrowse mit filter und color [erledigt]

Beitrag von Ewald »

Hallo Martin,
komisch, ich muss mich immer erneut aufrichten und ganz stark sein sonst breche ich 5 mal am Tag in Tränen aus. Eigentlich fast nach jedem Kontakt mit Usern :D
Ich habe das mit dem Optimizer mal geprüft.
Nichts in meinen Anwendungen geht in diese Richtung. Will sagen, das ich da nicht dran geschraubt habe.
Also gehe ich mal davon aus, das der Optimizer per default eingeschaltet ist ?
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: dcbrowse mit filter und color [erledigt]

Beitrag von Martin Altmann »

Ewald,
der ist standardmässig eingeschaltet, ja.

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.
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: dcbrowse mit filter und color [erledigt]

Beitrag von Ewald »

Hallo Martin,
leicht verunsichert habe ich der Reihe nach folgendes probiert.

set optimize on
set optimize off
set rushmore on
set rushmore off

hat auf die Funktionsfähigkeit diese Codes keine Einfluss gezeigt.
Gibt es noch einen Optimizer der da Einfluss haben könnte ?

Code: Alles auswählen

bfilter={|a|if(vlonull="B",!empty(a[5]),1=1)}
bsortcol := {|a,n,o| _sort(alofind,n,getlist) }                             

@ 07,00 dcbrowse ob1 data alofind size 105,20 FILTER bfilter  ; // {|a|if(!empty(alofind),a[5]=0,1=1)} ;
        pointer nkey  ;
        itemselected {||alofind[nkey,1]:=if(alofind[nkey,1]="X"," ","X"),ob1:refreshcurrent()}  ;
        color {||if((!empty(nkey) .and. !empty(alofind) .and. alofind[nkey,1]="X"),{GRA_CLR_RED,NIL},{NIL,NIL})}
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: dcbrowse mit filter und color [erledigt]

Beitrag von Martin Altmann »

Moin Ewald,
keine weiteren bekannt, außer den beiden von Dir genannten.

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.
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: dcbrowse mit filter und color [erledigt]

Beitrag von Ewald »

@Martin,
ich möchte da doch noch eine kurze Bemerkung dranhängen, nachdem ich mich noch mal eingehend damit beschäftigt habe.
Du hast natürlich recht das es nach logischen Ermessen in der dritten Abfrage knallen muss wenn nkey 0 ist. Wie gesagt, das tut es aber nicht. Sieht so aus, als ob er überhaupt nicht bei der 3. Bedingung landet, wenn z.B. die 2. schon .f. meldet.
Ich habe mich auf die sichere Seite begeben und wie von dir vorgeschlagen geschachtelt.
Danke noch mal und schönes WE zusammen
Ewald
Antworten