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.