XbpBrowse,,Nur ein Teil der Basis

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
mladendv
Rookie
Rookie
Beiträge: 9
Registriert: Di, 31. Mai 2011 12:52

XbpBrowse,,Nur ein Teil der Basis

Beitrag 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
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

Re: XbpBrowse,,Nur ein Teil der Basis

Beitrag 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.
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!!
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: XbpBrowse,,Nur ein Teil der Basis

Beitrag 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.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
mladendv
Rookie
Rookie
Beiträge: 9
Registriert: Di, 31. Mai 2011 12:52

Re: XbpBrowse,,Nur ein Teil der Basis

Beitrag 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ß
mladendv
Rookie
Rookie
Beiträge: 9
Registriert: Di, 31. Mai 2011 12:52

Re: XbpBrowse,,Nur ein Teil der Basis

Beitrag 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
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: XbpBrowse,,Nur ein Teil der Basis

Beitrag 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()
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: XbpBrowse,,Nur ein Teil der Basis

Beitrag 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
gruss by OHR
Jimmy
mladendv
Rookie
Rookie
Beiträge: 9
Registriert: Di, 31. Mai 2011 12:52

Re: XbpBrowse,,Nur ein Teil der Basis

Beitrag 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ß
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

Re: XbpBrowse,,Nur ein Teil der Basis

Beitrag 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.
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!!
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: XbpBrowse,,Nur ein Teil der Basis

Beitrag 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?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
mladendv
Rookie
Rookie
Beiträge: 9
Registriert: Di, 31. Mai 2011 12:52

Re: XbpBrowse,,Nur ein Teil der Basis

Beitrag 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
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: XbpBrowse,,Nur ein Teil der Basis

Beitrag 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?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
mladendv
Rookie
Rookie
Beiträge: 9
Registriert: Di, 31. Mai 2011 12:52

Re: XbpBrowse,,Nur ein Teil der Basis

Beitrag 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.
Antworten