Seite 1 von 1

XbpBrowse,,Nur ein Teil der Basis

Verfasst: Di, 19. Apr 2016 11:15
von mladendv
Hallo,

Wie nur bestimmte Datensätze aus einer Datei mit dem Befehl XbpBrowse angezeigt werden oder nur diejenigen, die eine bestimmte Bedingung erfüllen?

Zum Beispiel löste das Clipper Programm, das ich es so aus:

    DECLARE Felder [2], siehe [2], tekstic [2]

    Felder [1] = "IIF (Lager VRSI + = + lag+ VRS, Rehnung, SPACE (6))"
    Felder [2] = "IIF (Lager VRSI + = + lag+ VRS, Name, SPACE (10))"

    tekstic [1] = "Nummerierungs --->"
    tekstic [2] = "Datum"

DBEdit (5,2,21,77, DB1 "funcnaO" -Display, tekstic, CHR (205))

Danke

Re: XbpBrowse,,Nur ein Teil der Basis

Verfasst: Di, 19. Apr 2016 11:28
von Manfred
Hi, bestimmte Spalten, oder bestimmte Datensätze?

Bei Datensätzen entweder mit Filter, oder Scopes und Filter. Oder vorher über einen Export. Je nach Wunsch und Bedürfnis.

Re: XbpBrowse,,Nur ein Teil der Basis

Verfasst: Di, 19. Apr 2016 11:53
von georg
Hallo,


also das XbpColumn-Objekt hat einen :dataLink-Slot, der bestimmt, welche Daten angezeigt werden.

Was Du im Clipper-Code gemacht hast, kannst Du ja auch in einem Codeblock abbilden, den Du im XbpColumn:dataLink speicherst.

Re: XbpBrowse,,Nur ein Teil der Basis

Verfasst: Di, 19. Apr 2016 14:43
von mladendv
Manfred hat geschrieben:Hi, bestimmte Spalten, oder bestimmte Datensätze?

Bei Datensätzen entweder mit Filter, oder Scopes und Filter. Oder vorher über einen Export. Je nach Wunsch und Bedürfnis.
Grüße,
bestimmte Datensätze (records). Mittel aus einer Datenbank, die mehr Speicher angezeigt werden nur ein Lager hat. Der Klipper Programm konnte ich mit der oben genannten Reihenfolge (IIf (lager = lag, rehnung, blank)) und die Funktion innerhalb des Arbeitssteuerbefehl DBEdit diese Ansichten Silben. So zeigt die Datensätze nur von einem Lager.

schönen gruß

Re: XbpBrowse,,Nur ein Teil der Basis

Verfasst: Di, 19. Apr 2016 16:32
von mladendv
georg hat geschrieben:Hallo,


also das XbpColumn-Objekt hat einen :dataLink-Slot, der bestimmt, welche Daten angezeigt werden.

Was Du im Clipper-Code gemacht hast, kannst Du ja auch in einem Codeblock abbilden, den Du im XbpColumn:dataLink speicherst.
Hallo,
können Sie ein kleines Beispiel schreiben!

vielen Dank

Re: XbpBrowse,,Nur ein Teil der Basis

Verfasst: Di, 19. Apr 2016 18:40
von georg
Hallo,


ausgehend vom Titel "XbpBrowse..." wäre das so:

Code: Alles auswählen

oCol := XbpColumn():new(oBro)
oCol:dataLink := {|| IIF (Lager VRSI + = + lag+ VRS, Rehnung, SPACE (6))}
oCol:create()

Re: XbpBrowse,,Nur ein Teil der Basis

Verfasst: Mi, 20. Apr 2016 4:42
von AUGE_OHR
hi

DbEdit() wird in Xbase++ als Tbrowse() nachgebildet.
siehe c:\ALASKA\XPPW32\SOURCE\SYS\dbedit.prg

Beispiele für XbpBrowse() findest du unter c:\ALASKA\XPPW32\SOURCE\samples\basics\GuiBrow\

Ein XbpBrowse() benötigt Column.

Code: Alles auswählen

   // Für alle Felder Spalten erzeugen
   imax    := FCount()
   aStruct := DbStruct()
   FOR i:=1 TO imax
      IF .NOT. aStruct[i,2] $ "BOVTXY"
         oBrowse:addColumn( FieldBlockTrimmed(aStruct[i,1], aStruct[i,2]), , aStruct[i,1] )
      ENDIF
   NEXT
hier wird mit o:addColumn() gearbeitet. Die FUNCTION FieldBlockTrimmed() zeigt dir wie man den Codeblock zusammenbaut.

Code: Alles auswählen

FUNCTION FieldBlockTrimmed( cFieldName, cType )
   LOCAL bBlock
   IF FieldPos( cFieldName ) <> 0
      IF ! "->" $ cFieldName
         cFieldName := "FIELD->"+cFieldName
      ENDIF
      IF cType = "C"
         bBlock := &( "{|x| IIf(x==NIL,RTrim("+cFieldName+"),"+cFieldName+":=x) }" )
      ELSE
         bBlock := &( "{|x| IIf(x==NIL,"+cFieldName+","+cFieldName+":=x) }" )
      ENDIF
   ENDIF
RETURN bBlock
wenn du "mehr" willst brauchst du die Presentation Parameter

Code: Alles auswählen

LOCAL aPP := { { XBP_PP_COL_HA_CAPTION          , " "              }, ;
               { XBP_PP_COL_HA_BGCLR            , XBPSYSCLR_3DFACE }, ;
               { XBP_PP_COL_HA_FGCLR            , GRA_CLR_BLACK    }, ;
               { XBP_PP_COL_DA_BGCLR            , GRA_CLR_WHITE    }, ;
               { XBP_PP_COL_DA_FGCLR            , GRA_CLR_BLACK    }, ;
               { XBP_PP_COL_DA_HILITE_FGCLR     , XBPSYSCLR_HILITEFOREGROUND }, ;
               { XBP_PP_COL_DA_HILITE_BGCLR     , XBPSYSCLR_HILITEBACKGROUND }, ;
               { XBP_PP_COL_DA_CHARWIDTH        , 1                }, ;
               { XBP_PP_COL_DA_CELLALIGNMENT    , XBPALIGN_LEFT    }, ;
               { XBP_PP_COL_DA_FRAMELAYOUT      , XBPFRAME_NONE    }, ;
               { XBP_PP_COL_DA_HILITEFRAMELAYOUT, XBPFRAME_NONE    }, ;
               { XBP_PP_COL_DA_CELLFRAMELAYOUT  , XBPFRAME_BOX + XBPFRAME_RAISED } }

   FOR i:=1 TO imax
      aPP[1,2]      := aStruct[i,1]
      aPP[8,2]      := aStruct[i,3]*Faktor
      oCol          := XbpColumn():new(oBrowse,,,, app)
      oCol:dataLink := {|| FIELD->aStruct[i,1] }
*     oCol:colorBlock :=   {|xValue| IIf( <lExpression>, {<nColorFG1>,<nColorBG1>}, ; 
*                                                        {<nColorFG2>,<nColorBG2>}  ) 
      oCol:create()
      oBrowse:addColumn(oCol)
   NEXT

Re: XbpBrowse,,Nur ein Teil der Basis

Verfasst: Mi, 20. Apr 2016 13:33
von mladendv
AUGE_OHR hat geschrieben:hi

DbEdit() wird in Xbase++ als Tbrowse() nachgebildet.
siehe c:\ALASKA\XPPW32\SOURCE\SYS\dbedit.prg

Beispiele für XbpBrowse() findest du unter c:\ALASKA\XPPW32\SOURCE\samples\basics\GuiBrow\

Ein XbpBrowse() benötigt Column.

Code: Alles auswählen

   // Für alle Felder Spalten erzeugen
   imax    := FCount()
   aStruct := DbStruct()
   FOR i:=1 TO imax
      IF .NOT. aStruct[i,2] $ "BOVTXY"
         oBrowse:addColumn( FieldBlockTrimmed(aStruct[i,1], aStruct[i,2]), , aStruct[i,1] )
      ENDIF
   NEXT
hier wird mit o:addColumn() gearbeitet. Die FUNCTION FieldBlockTrimmed() zeigt dir wie man den Codeblock zusammenbaut.

Code: Alles auswählen

FUNCTION FieldBlockTrimmed( cFieldName, cType )
   LOCAL bBlock
   IF FieldPos( cFieldName ) <> 0
      IF ! "->" $ cFieldName
         cFieldName := "FIELD->"+cFieldName
      ENDIF
      IF cType = "C"
         bBlock := &( "{|x| IIf(x==NIL,RTrim("+cFieldName+"),"+cFieldName+":=x) }" )
      ELSE
         bBlock := &( "{|x| IIf(x==NIL,"+cFieldName+","+cFieldName+":=x) }" )
      ENDIF
   ENDIF
RETURN bBlock
wenn du "mehr" willst brauchst du die Presentation Parameter

Code: Alles auswählen

LOCAL aPP := { { XBP_PP_COL_HA_CAPTION          , " "              }, ;
               { XBP_PP_COL_HA_BGCLR            , XBPSYSCLR_3DFACE }, ;
               { XBP_PP_COL_HA_FGCLR            , GRA_CLR_BLACK    }, ;
               { XBP_PP_COL_DA_BGCLR            , GRA_CLR_WHITE    }, ;
               { XBP_PP_COL_DA_FGCLR            , GRA_CLR_BLACK    }, ;
               { XBP_PP_COL_DA_HILITE_FGCLR     , XBPSYSCLR_HILITEFOREGROUND }, ;
               { XBP_PP_COL_DA_HILITE_BGCLR     , XBPSYSCLR_HILITEBACKGROUND }, ;
               { XBP_PP_COL_DA_CHARWIDTH        , 1                }, ;
               { XBP_PP_COL_DA_CELLALIGNMENT    , XBPALIGN_LEFT    }, ;
               { XBP_PP_COL_DA_FRAMELAYOUT      , XBPFRAME_NONE    }, ;
               { XBP_PP_COL_DA_HILITEFRAMELAYOUT, XBPFRAME_NONE    }, ;
               { XBP_PP_COL_DA_CELLFRAMELAYOUT  , XBPFRAME_BOX + XBPFRAME_RAISED } }

   FOR i:=1 TO imax
      aPP[1,2]      := aStruct[i,1]
      aPP[8,2]      := aStruct[i,3]*Faktor
      oCol          := XbpColumn():new(oBrowse,,,, app)
      oCol:dataLink := {|| FIELD->aStruct[i,1] }
*     oCol:colorBlock :=   {|xValue| IIf( <lExpression>, {<nColorFG1>,<nColorBG1>}, ; 
*                                                        {<nColorFG2>,<nColorBG2>}  ) 
      oCol:create()
      oBrowse:addColumn(oCol)
   NEXT
Hallo,
danke für das Beispiel, aber dies ist im Zusammenhang mit der Bildung Spalte und ich möchte aus der Datenbank nur die Datensätze angezeigt werden, die eine bestimmte Bedingung erfüllen.

beispielsweise verwendet werden raubend Befehl oder die Zeit zu filtrieren.
Daher frage ich angeben, dass XbpBrowse nur einige Datensätze zuordnen.

Es bedeutet, dass aus der Datenbank werden nur jene gezeigt, dass die Anforderung zu erfüllen.

Beispiel für ein Lager, die Prüfung und die andere zu gelangen, die in der Datenbank vorhanden sind, die nicht sichtbar sind.

schönen gruß

Re: XbpBrowse,,Nur ein Teil der Basis

Verfasst: Mi, 20. Apr 2016 13:40
von Manfred
wie schon oben erwähnt, dann bleiben nur Scopes und/oder Filter. Oder Du exportierst vorher die gewünschten Daten in eine temporäre Datei und zeigst diese im Browse an. Oder Du schreibst die Daten in ein Array und zeigst das an. Beim Filter immer darauf achten, es kann dauern wenn die Datei zu groß ist und bei den Scopes muß ein entsprechender Index gesetzt sein.

Re: XbpBrowse,,Nur ein Teil der Basis

Verfasst: Mi, 20. Apr 2016 14:01
von georg
Hallo,


neben Scope oder Filter kann man auch die Skipper-Funktion verwenden, die ein Browse benötigt, um sich durch die Datei zu bewegen.

Der Browse teilt der Skipper-Funktion mit, wieviele Datensätze übersprungen ("geskippt") werden sollen. Die Skipper-Funktion führt das aus und meldet zurück, wieviele Sätze möglich waren. Wenn die Datei nur vier Sätze hat, und fünf Sätze gesprungen werden sollen, geht das nicht, da nach dem vierten Satz EOF() erreicht wird, dann gibt die Skipper-Funktion den Wert 4 zurück.

Wenn Du in der Skipper-Funktion prüfst, ob der Datensatz im Browse angezeigt werden soll oder nicht, kannst Du nicht gewollte Sätze ausfiltern, indem Du solche Sätze nicht zählst.

Dieses Verfahren ist bei kleinen Dateien akzeptabel, bei ganz grossen Dateien kann es dazu führen, dass die Darstellung des Browse ziemlich langsam wird.


P.S.: was ist Deine Muttersprache?

Re: XbpBrowse,,Nur ein Teil der Basis

Verfasst: Mi, 20. Apr 2016 14:07
von mladendv
Manfred hat geschrieben:wie schon oben erwähnt, dann bleiben nur Scopes und/oder Filter. Oder Du exportierst vorher die gewünschten Daten in eine temporäre Datei und zeigst diese im Browse an. Oder Du schreibst die Daten in ein Array und zeigst das an. Beim Filter immer darauf achten, es kann dauern wenn die Datei zu groß ist und bei den Scopes muß ein entsprechender Index gesetzt sein.
Dank der Filter arbeitete,
aber ich würde die clipper definiriat Felder mögen und die IIF angeben, die Show aufzeichnet

Re: XbpBrowse,,Nur ein Teil der Basis

Verfasst: Mi, 20. Apr 2016 14:18
von georg
Hallo,


Dein Code erzeugt m.E. einen Browse mit leeren Zeilen, d.h. wenn die IIF()-Bedingung nicht zutrifft, wird Space(6) bzw. Space(10) angezeigt, ist das korrekt?

Re: XbpBrowse,,Nur ein Teil der Basis

Verfasst: Do, 21. Apr 2016 11:42
von mladendv
georg hat geschrieben:Hallo,


Dein Code erzeugt m.E. einen Browse mit leeren Zeilen, d.h. wenn die IIF()-Bedingung nicht zutrifft, wird Space(6) bzw. Space(10) angezeigt, ist das korrekt?
hallo,
ist richtig.