Page 1 of 1

Creation an array Multiple on Horizontal on Xbrowse - RESOLV

PostPosted: Mon Sep 26, 2022 9:00 am
by Silvio.Falconi
I would like to create a horizontal array that is, I'll explain
for an extraction I create an array like this

Image

Code: Select all  Expand view


   static function  Build_Array(oDbf,nRecord,oBrw)
   local aTemp:= {}
   local aRuote  := {"Bari","Cagliari","Firenze","Genova",;
                   "Milano","Napoli","Palermo","Roma","Torino",;
                   "Venezia","Nazionale"}

   local cTitle:= oDbf:data

  IF !oDbf:eof()
    oDbf:goto(nRecord)
    AaDd(aTemp,{ aRuote[1],   oDbf:ba1,oDbf:ba2,oDbf:ba3,oDbf:ba4,oDbf:ba5})
    AaDd(aTemp,{ aRuote[2],   oDbf:ca1,oDbf:ca2,oDbf:ca3,oDbf:ca4,oDbf:ca5 })
    AaDd(aTemp,{ aRuote[3],   oDbf:fi1,oDbf:fi2,oDbf:fi3,oDbf:fi4,oDbf:fi5 })
    AaDd(aTemp,{ aRuote[4],   oDbf:ge1,oDbf:ge2,oDbf:ge3,oDbf:ge4,oDbf:ge5 })
    AaDd(aTemp,{ aRuote[5],   oDbf:mi1,oDbf:mi2,oDbf:mi3,oDbf:mi4,oDbf:mi5 })
    AaDd(aTemp,{ aRuote[6],   oDbf:na1,oDbf:na2,oDbf:na3,oDbf:na4,oDbf:na5 })
    AaDd(aTemp,{ aRuote[7],   oDbf:pa1,oDbf:pa2,oDbf:pa3,oDbf:pa4,oDbf:pa5 })
    AaDd(aTemp,{ aRuote[8],   oDbf:rm1,oDbf:rm2,oDbf:rm3,oDbf:rm4,oDbf:rm5 })
    AaDd(aTemp,{ aRuote[9],   oDbf:to1,oDbf:to2,oDbf:to3,oDbf:to4,oDbf:to5 })
    AaDd(aTemp,{ aRuote[10],  oDbf:ve1,oDbf:ve2,oDbf:ve3,oDbf:ve4,oDbf:ve5 })
    AaDd(aTemp,{ aRuote[11],  oDbf:nz1,oDbf:nz2,oDbf:nz3,oDbf:nz4,oDbf:na5 })
    oBrw:setarray(aTemp)
 AEval( oBrw:aCols, { |o| o:cGrpHdr := cf(cTitle)   }, 2, 6 )
 Endif
RETURN NIL
 


and having as group header the data of the extraction

now I would like to create a hypothetically infinite array like this, command by final user (until 10 records)
( I draw it)

Image

obviously changing the dates for each record


How I can make it , any help pls

Re: Creation an array Multiple on Horizontal on Xbrowse

PostPosted: Tue Sep 27, 2022 9:21 am
by Antonio Linares
Do you mean that each group browses a different array ??

Re: Creation an array Multiple on Horizontal on Xbrowse

PostPosted: Tue Sep 27, 2022 9:54 am
by Silvio.Falconi
Antonio Linares wrote:Do you mean that each group browses a different array ??


No they must be displayed vertically in the same way as I created the first one



AaDd(aTemp,{ aRuote[1], oDbf:ba1,oDbf:ba2,oDbf:ba3,oDbf:ba4,oDbf:ba5 })




for example for the first line the first column remains unchanged (name of the wheel) at the end of odbf: Ba5 the procedure must select the new record and restart from oDbf: ba1

aRuote[1], oDbf:ba1,oDbf:ba2,oDbf:ba3,oDbf:ba4,oDbf:ba5 SKIP RECORD Dbf:ba1,oDbf:ba2,oDbf:ba3,oDbf:ba4,oDbf:ba5 SKIP RECORD Dbf:ba1,oDbf:ba2,oDbf:ba3,oDbf:ba4,oDbf:ba5

Re: Creation an array Multiple on Horizontal on Xbrowse

PostPosted: Tue Sep 27, 2022 12:17 pm
by cmsoft
Silvio, creo que debería ser así:
Yo lo hago con MySql, pero creo que haciendolo con dbf no debería ser muy distinto
Code: Select all  Expand view

#include "fivewin.ch"
function Main()

   local oQry, oCn, aArray := {}
   local cServer := 'localhost', cUser := 'root', cPassword := 'secret', cDBName := 'test', nPort := "3306"
   local oDlg,  oBrw
   FWCONNECT oCn HOST cServer USER cUser PASSWORD cPassword DATABASE cDBName PORT VAL(nPort)
   oQry := oCn:Query("SELECT * FROM silvio ORDER BY data ")

   DEFINE DIALOG oDlg SIZE 980,300 PIXEL ;
      TITLE "INFINITE XBROWSE"
   aArray := Build_Array(oQry)
   @ 30,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
      ARRAY aArray AUTOCOLS  ;
      CELL LINES FOOTERS NOBORDER
   
   WITH OBJECT oBrw
      :CreateFromCode()
   END
   oBrw:aCols[1]:cHeader := "Ruote"
   Build_Title(oQry,oBrw)  
   ACTIVATE DIALOG oDlg CENTERED

return NIL  

static function  Build_Array(oDbf)
   local aTemp:= {}, i, nIni
   local aRuote  := {"Bari","Cagliari","Firenze","Genova",;
                   "Milano","Napoli","Palermo","Roma","Torino",;
                   "Venezia","Nazionale"}

   local cTitle
  FOR i:= 1 TO 11
      AaDd(aTemp, {aRuote[i]})
  NEXT i  
  oDbf:GoTop()  
  do while !oDbf:Eof
    AaDd(aTemp[1],oDbf:ba1)
    AaDd(aTemp[1],oDbf:ba2)
    AaDd(aTemp[1],oDbf:ba3)
    AaDd(aTemp[1],oDbf:ba4)
    AaDd(aTemp[1],oDbf:ba5)
    AaDd(aTemp[2],oDbf:ca1)
    AaDd(aTemp[2],oDbf:ca2)
    AaDd(aTemp[2],oDbf:ca3)
    AaDd(aTemp[2],oDbf:ca4)
    AaDd(aTemp[2],oDbf:ca5)
    AaDd(aTemp[3],oDbf:fi1)
    AaDd(aTemp[3],oDbf:fi2)
    AaDd(aTemp[3],oDbf:fi3)
    AaDd(aTemp[3],oDbf:fi4)
    AaDd(aTemp[3],oDbf:fi5)
    AaDd(aTemp[4],oDbf:ge1)
    AaDd(aTemp[4],oDbf:ge2)
    AaDd(aTemp[4],oDbf:ge3)
    AaDd(aTemp[4],oDbf:ge4)
    AaDd(aTemp[4],oDbf:ge5)
    AaDd(aTemp[5],oDbf:mi1)
    AaDd(aTemp[5],oDbf:mi2)
    AaDd(aTemp[5],oDbf:mi3)
    AaDd(aTemp[5],oDbf:mi4)
    AaDd(aTemp[5],oDbf:mi5)    
    AaDd(aTemp[6],oDbf:na1)
    AaDd(aTemp[6],oDbf:na2)
    AaDd(aTemp[6],oDbf:na3)
    AaDd(aTemp[6],oDbf:na4)
    AaDd(aTemp[6],oDbf:na5)    
    AaDd(aTemp[7],oDbf:pa1)
    AaDd(aTemp[7],oDbf:pa2)
    AaDd(aTemp[7],oDbf:pa3)
    AaDd(aTemp[7],oDbf:pa4)
    AaDd(aTemp[7],oDbf:pa5)    
    AaDd(aTemp[8],oDbf:rm1)
    AaDd(aTemp[8],oDbf:rm2)
    AaDd(aTemp[8],oDbf:rm3)
    AaDd(aTemp[8],oDbf:rm4)
    AaDd(aTemp[8],oDbf:rm5)
    AaDd(aTemp[9],oDbf:to1)
    AaDd(aTemp[9],oDbf:to2)
    AaDd(aTemp[9],oDbf:to3)
    AaDd(aTemp[9],oDbf:to4)
    AaDd(aTemp[9],oDbf:to5)
    AaDd(aTemp[10],oDbf:ve1)
    AaDd(aTemp[10],oDbf:ve2)
    AaDd(aTemp[10],oDbf:ve3)
    AaDd(aTemp[10],oDbf:ve4)
    AaDd(aTemp[10],oDbf:ve5)
    AaDd(aTemp[11],oDbf:nz1)
    AaDd(aTemp[11],oDbf:nz2)
    AaDd(aTemp[11],oDbf:nz3)
    AaDd(aTemp[11],oDbf:nz4)
    AaDd(aTemp[11],oDbf:nz5)                
    oDbf:Skip()        
  enddo  
   
  //oBrw:setarray(aTemp)
 
RETURN aTemp

static function  Build_Title(oDbf,oBrw)
   local nIni := 2    
   local cTitle
   oDbf:GoTop()
  do while !oDbf:Eof
    oBrw:aCols[nIni]:cHeader := "A"
    oBrw:aCols[nIni+1]:cHeader := "B"
    oBrw:aCols[nIni+2]:cHeader := "C"
    oBrw:aCols[nIni+3]:cHeader := "D"
    oBrw:aCols[nIni+4]:cHeader := "E"
    cTitle:= dtoc(oDbf:data)
    oBrw:SetGroupHeader( cTitle, nIni, nIni+4 )
    oDbf:Skip()        
    nIni := nIni +5
  enddo  
RETURN NIL
 

Espero te sirva

Re: Creation an array Multiple on Horizontal on Xbrowse

PostPosted: Tue Sep 27, 2022 8:15 pm
by Silvio.Falconi
cmsoft wrote:Silvio, creo que debería ser así:
Yo lo hago con MySql, pero creo que haciendolo con dbf no debería ser muy distinto
Code: Select all  Expand view

#include "fivewin.ch"
function Main()

   local oQry, oCn, aArray := {}
   local cServer := 'localhost', cUser := 'root', cPassword := 'secret', cDBName := 'test', nPort := "3306"
   local oDlg,  oBrw
   FWCONNECT oCn HOST cServer USER cUser PASSWORD cPassword DATABASE cDBName PORT VAL(nPort)
   oQry := oCn:Query("SELECT * FROM silvio ORDER BY data ")

   DEFINE DIALOG oDlg SIZE 980,300 PIXEL ;
      TITLE "INFINITE XBROWSE"
   aArray := Build_Array(oQry)
   @ 30,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
      ARRAY aArray AUTOCOLS  ;
      CELL LINES FOOTERS NOBORDER
   
   WITH OBJECT oBrw
      :CreateFromCode()
   END
   oBrw:aCols[1]:cHeader := "Ruote"
   Build_Title(oQry,oBrw)  
   ACTIVATE DIALOG oDlg CENTERED

return NIL  

static function  Build_Array(oDbf)
   local aTemp:= {}, i, nIni
   local aRuote  := {"Bari","Cagliari","Firenze","Genova",;
                   "Milano","Napoli","Palermo","Roma","Torino",;
                   "Venezia","Nazionale"}

   local cTitle
  FOR i:= 1 TO 11
      AaDd(aTemp, {aRuote[i]})
  NEXT i  
  oDbf:GoTop()  
  do while !oDbf:Eof
    AaDd(aTemp[1],oDbf:ba1)
    AaDd(aTemp[1],oDbf:ba2)
    AaDd(aTemp[1],oDbf:ba3)
    AaDd(aTemp[1],oDbf:ba4)
    AaDd(aTemp[1],oDbf:ba5)
    AaDd(aTemp[2],oDbf:ca1)
    AaDd(aTemp[2],oDbf:ca2)
    AaDd(aTemp[2],oDbf:ca3)
    AaDd(aTemp[2],oDbf:ca4)
    AaDd(aTemp[2],oDbf:ca5)
    AaDd(aTemp[3],oDbf:fi1)
    AaDd(aTemp[3],oDbf:fi2)
    AaDd(aTemp[3],oDbf:fi3)
    AaDd(aTemp[3],oDbf:fi4)
    AaDd(aTemp[3],oDbf:fi5)
    AaDd(aTemp[4],oDbf:ge1)
    AaDd(aTemp[4],oDbf:ge2)
    AaDd(aTemp[4],oDbf:ge3)
    AaDd(aTemp[4],oDbf:ge4)
    AaDd(aTemp[4],oDbf:ge5)
    AaDd(aTemp[5],oDbf:mi1)
    AaDd(aTemp[5],oDbf:mi2)
    AaDd(aTemp[5],oDbf:mi3)
    AaDd(aTemp[5],oDbf:mi4)
    AaDd(aTemp[5],oDbf:mi5)    
    AaDd(aTemp[6],oDbf:na1)
    AaDd(aTemp[6],oDbf:na2)
    AaDd(aTemp[6],oDbf:na3)
    AaDd(aTemp[6],oDbf:na4)
    AaDd(aTemp[6],oDbf:na5)    
    AaDd(aTemp[7],oDbf:pa1)
    AaDd(aTemp[7],oDbf:pa2)
    AaDd(aTemp[7],oDbf:pa3)
    AaDd(aTemp[7],oDbf:pa4)
    AaDd(aTemp[7],oDbf:pa5)    
    AaDd(aTemp[8],oDbf:rm1)
    AaDd(aTemp[8],oDbf:rm2)
    AaDd(aTemp[8],oDbf:rm3)
    AaDd(aTemp[8],oDbf:rm4)
    AaDd(aTemp[8],oDbf:rm5)
    AaDd(aTemp[9],oDbf:to1)
    AaDd(aTemp[9],oDbf:to2)
    AaDd(aTemp[9],oDbf:to3)
    AaDd(aTemp[9],oDbf:to4)
    AaDd(aTemp[9],oDbf:to5)
    AaDd(aTemp[10],oDbf:ve1)
    AaDd(aTemp[10],oDbf:ve2)
    AaDd(aTemp[10],oDbf:ve3)
    AaDd(aTemp[10],oDbf:ve4)
    AaDd(aTemp[10],oDbf:ve5)
    AaDd(aTemp[11],oDbf:nz1)
    AaDd(aTemp[11],oDbf:nz2)
    AaDd(aTemp[11],oDbf:nz3)
    AaDd(aTemp[11],oDbf:nz4)
    AaDd(aTemp[11],oDbf:nz5)                
    oDbf:Skip()        
  enddo  
   
  //oBrw:setarray(aTemp)
 
RETURN aTemp

static function  Build_Title(oDbf,oBrw)
   local nIni := 2    
   local cTitle
   oDbf:GoTop()
  do while !oDbf:Eof
    oBrw:aCols[nIni]:cHeader := "A"
    oBrw:aCols[nIni+1]:cHeader := "B"
    oBrw:aCols[nIni+2]:cHeader := "C"
    oBrw:aCols[nIni+3]:cHeader := "D"
    oBrw:aCols[nIni+4]:cHeader := "E"
    cTitle:= dtoc(oDbf:data)
    oBrw:SetGroupHeader( cTitle, nIni, nIni+4 )
    oDbf:Skip()        
    nIni := nIni +5
  enddo  
RETURN NIL
 

Espero te sirva



I tested the your test but not see the array

Image

I add a variable ( nRecords) because I wish show 10,20,30,50,100,200,300,500 records but this is selected by final user and the user want select also the year
to test I try with 10 records

for a sample : the last 10 records of 2022 year

If not insert this the xbrowse is infinite and the records now are 10136

I use tdatabase
Code: Select all  Expand view

#include "fivewin.ch"


function Main()

   local oQry, oCn, aArray := {}
  * local cServer := 'localhost', cUser := 'root', cPassword := 'secret', cDBName := 'test', nPort := "3306"
   local oDlg,  oBrw
  * FWCONNECT oCn HOST cServer USER cUser PASSWORD cPassword DATABASE cDBName PORT VAL(nPort)
  * oQry := oCn:Query("SELECT * FROM silvio ORDER BY data ")
    local cdbfPath :=".\data\"
    oQry := TDatabase():Open( , cdbfPath+"
LOTTO", "DBFCDX", .T. )
    oQry:setorder(1)  //data


   DEFINE DIALOG oDlg SIZE 980,300 PIXEL ;
      TITLE "
INFINITE XBROWSE"

   aArray := Build_Array(oQry)

   @ 30,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
      ARRAY aArray AUTOCOLS  ;
      CELL LINES FOOTERS NOBORDER

   WITH OBJECT oBrw
      :CreateFromCode()
   END

   oBrw:aCols[1]:cHeader := "
Ruote"

   Build_Title(oQry,oBrw)

   ACTIVATE DIALOG oDlg CENTERED

return NIL

static function  Build_Array(oDbf)
   local aTemp:= {}, i, nIni
   local aRuote  := {"
Bari","Cagliari","Firenze","Genova",;
                   "
Milano","Napoli","Palermo","Roma","Torino",;
                   "
Venezia","Nazionale"}

   local cTitle
   local nrecords:= 0

  FOR i:= 1 TO 11
      AaDd(aTemp, {aRuote[i]})
  NEXT i  
  oDbf:GoTop()


  do while !oDbf:Eof  .and. nrecords = 10
    AaDd(aTemp[1],oDbf:ba1)
    AaDd(aTemp[1],oDbf:ba2)
    AaDd(aTemp[1],oDbf:ba3)
    AaDd(aTemp[1],oDbf:ba4)
    AaDd(aTemp[1],oDbf:ba5)
    AaDd(aTemp[2],oDbf:ca1)
    AaDd(aTemp[2],oDbf:ca2)
    AaDd(aTemp[2],oDbf:ca3)
    AaDd(aTemp[2],oDbf:ca4)
    AaDd(aTemp[2],oDbf:ca5)
    AaDd(aTemp[3],oDbf:fi1)
    AaDd(aTemp[3],oDbf:fi2)
    AaDd(aTemp[3],oDbf:fi3)
    AaDd(aTemp[3],oDbf:fi4)
    AaDd(aTemp[3],oDbf:fi5)
    AaDd(aTemp[4],oDbf:ge1)
    AaDd(aTemp[4],oDbf:ge2)
    AaDd(aTemp[4],oDbf:ge3)
    AaDd(aTemp[4],oDbf:ge4)
    AaDd(aTemp[4],oDbf:ge5)
    AaDd(aTemp[5],oDbf:mi1)
    AaDd(aTemp[5],oDbf:mi2)
    AaDd(aTemp[5],oDbf:mi3)
    AaDd(aTemp[5],oDbf:mi4)
    AaDd(aTemp[5],oDbf:mi5)
    AaDd(aTemp[6],oDbf:na1)
    AaDd(aTemp[6],oDbf:na2)
    AaDd(aTemp[6],oDbf:na3)
    AaDd(aTemp[6],oDbf:na4)
    AaDd(aTemp[6],oDbf:na5)
    AaDd(aTemp[7],oDbf:pa1)
    AaDd(aTemp[7],oDbf:pa2)
    AaDd(aTemp[7],oDbf:pa3)
    AaDd(aTemp[7],oDbf:pa4)
    AaDd(aTemp[7],oDbf:pa5)    
    AaDd(aTemp[8],oDbf:rm1)
    AaDd(aTemp[8],oDbf:rm2)
    AaDd(aTemp[8],oDbf:rm3)
    AaDd(aTemp[8],oDbf:rm4)
    AaDd(aTemp[8],oDbf:rm5)
    AaDd(aTemp[9],oDbf:to1)
    AaDd(aTemp[9],oDbf:to2)
    AaDd(aTemp[9],oDbf:to3)
    AaDd(aTemp[9],oDbf:to4)
    AaDd(aTemp[9],oDbf:to5)
    AaDd(aTemp[10],oDbf:ve1)
    AaDd(aTemp[10],oDbf:ve2)
    AaDd(aTemp[10],oDbf:ve3)
    AaDd(aTemp[10],oDbf:ve4)
    AaDd(aTemp[10],oDbf:ve5)
    AaDd(aTemp[11],oDbf:nz1)
    AaDd(aTemp[11],oDbf:nz2)
    AaDd(aTemp[11],oDbf:nz3)
    AaDd(aTemp[11],oDbf:nz4)
    AaDd(aTemp[11],oDbf:nz5)
    oDbf:Skip()
    nrecords++
  enddo

  //oBrw:setarray(aTemp)
 
RETURN aTemp

static function  Build_Title(oDbf,oBrw)
   local nIni := 2    
   local cTitle
   local nrecords:= 0
   oDbf:GoTop()
  do while !oDbf:Eof    .and. nrecords = 10
    oBrw:aCols[nIni]:cHeader := "
A"
    oBrw:aCols[nIni+1]:cHeader := "
B"
    oBrw:aCols[nIni+2]:cHeader := "
C"
    oBrw:aCols[nIni+3]:cHeader := "
D"
    oBrw:aCols[nIni+4]:cHeader := "
E"
    cTitle:= dtoc(oDbf:data)
    oBrw:SetGroupHeader( cTitle, nIni, nIni+4 )
    oDbf:Skip()
     nrecords++
    nIni := nIni +5
  enddo  
RETURN NIL

Re: Creation an array Multiple on Horizontal on Xbrowse

PostPosted: Tue Sep 27, 2022 8:38 pm
by Silvio.Falconi
Now I make another test
filter on only 2022 year and I have this result


Image

Code: Select all  Expand view

#include "fivewin.ch"


function Main()

   local oQry, oCn, aArray := {}
  * local cServer := 'localhost', cUser := 'root', cPassword := 'secret', cDBName := 'test', nPort := "3306"
   local oDlg,  oBrw
  * FWCONNECT oCn HOST cServer USER cUser PASSWORD cPassword DATABASE cDBName PORT VAL(nPort)
  * oQry := oCn:Query("SELECT * FROM silvio ORDER BY data ")
    local cdbfPath :=".\data\"
    local nyear:="
2022"
    local cfilter

    oQry := TDatabase():Open( , cdbfPath+"
LOTTO", "DBFCDX", .T. )
    oQry:setorder(1)  //data


     cFilter:= "
LTRIM(STR(YEAR(FIELD->DATA)))= '" + nyear + "'"
        oQry:SetFilter(cFilter)
        oQry:GoTop()



   DEFINE DIALOG oDlg SIZE 980,400 PIXEL ;
      TITLE "
INFINITE XBROWSE"

   aArray := Build_Array(oQry)


   @ 30,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
      ARRAY aArray AUTOCOLS  ;
      CELL LINES FOOTERS NOBORDER

   WITH OBJECT oBrw

                      :nRowHeight    := 30
                      :nClrBorder := CLR_GRAY
                      :nMarqueeStyle       := MARQSTYLE_HIGHLROWMS
                      :lHscroll            := .t.
                      :l2007               := .F.
                      :l2015               := .T.
                     // :nStretchCol         := STRETCHCOL_WIDEST
                      :lAllowRowSizing     := .F.
                      :lAllowColSwapping   := .F.
                      :lAllowColHiding     := .F.
                      :lRecordSelector     := .F.
                      :nColDividerStyle    := LINESTYLE_LIGHTGRAY
                      :nRowDividerStyle    := LINESTYLE_LIGHTGRAY



      FOR i := 2 TO LEN(:aCols)
         oCol := :aCols[ i ]
         oCol:nWidth   := 17
      NEXT

     :CreateFromCode()
   END
   oBrw:aCols[1]:cHeader := "
Ruote"

   Build_Title(oQry,oBrw)

   ACTIVATE DIALOG oDlg CENTERED

return NIL

static function  Build_Array(oDbf)
   local aTemp:= {}, i, nIni
   local aRuote  := {"
Bari","Cagliari","Firenze","Genova",;
                   "
Milano","Napoli","Palermo","Roma","Torino",;
                   "
Venezia","Nazionale"}

   local cTitle


  FOR i:= 1 TO 11
      AaDd(aTemp, {aRuote[i]})
  NEXT i
  oDbf:GoTop()


  do while !oDbf:Eof
    AaDd(aTemp[1],oDbf:ba1)
    AaDd(aTemp[1],oDbf:ba2)
    AaDd(aTemp[1],oDbf:ba3)
    AaDd(aTemp[1],oDbf:ba4)
    AaDd(aTemp[1],oDbf:ba5)
    AaDd(aTemp[2],oDbf:ca1)
    AaDd(aTemp[2],oDbf:ca2)
    AaDd(aTemp[2],oDbf:ca3)
    AaDd(aTemp[2],oDbf:ca4)
    AaDd(aTemp[2],oDbf:ca5)
    AaDd(aTemp[3],oDbf:fi1)
    AaDd(aTemp[3],oDbf:fi2)
    AaDd(aTemp[3],oDbf:fi3)
    AaDd(aTemp[3],oDbf:fi4)
    AaDd(aTemp[3],oDbf:fi5)
    AaDd(aTemp[4],oDbf:ge1)
    AaDd(aTemp[4],oDbf:ge2)
    AaDd(aTemp[4],oDbf:ge3)
    AaDd(aTemp[4],oDbf:ge4)
    AaDd(aTemp[4],oDbf:ge5)
    AaDd(aTemp[5],oDbf:mi1)
    AaDd(aTemp[5],oDbf:mi2)
    AaDd(aTemp[5],oDbf:mi3)
    AaDd(aTemp[5],oDbf:mi4)
    AaDd(aTemp[5],oDbf:mi5)
    AaDd(aTemp[6],oDbf:na1)
    AaDd(aTemp[6],oDbf:na2)
    AaDd(aTemp[6],oDbf:na3)
    AaDd(aTemp[6],oDbf:na4)
    AaDd(aTemp[6],oDbf:na5)
    AaDd(aTemp[7],oDbf:pa1)
    AaDd(aTemp[7],oDbf:pa2)
    AaDd(aTemp[7],oDbf:pa3)
    AaDd(aTemp[7],oDbf:pa4)
    AaDd(aTemp[7],oDbf:pa5)
    AaDd(aTemp[8],oDbf:rm1)
    AaDd(aTemp[8],oDbf:rm2)
    AaDd(aTemp[8],oDbf:rm3)
    AaDd(aTemp[8],oDbf:rm4)
    AaDd(aTemp[8],oDbf:rm5)
    AaDd(aTemp[9],oDbf:to1)
    AaDd(aTemp[9],oDbf:to2)
    AaDd(aTemp[9],oDbf:to3)
    AaDd(aTemp[9],oDbf:to4)
    AaDd(aTemp[9],oDbf:to5)
    AaDd(aTemp[10],oDbf:ve1)
    AaDd(aTemp[10],oDbf:ve2)
    AaDd(aTemp[10],oDbf:ve3)
    AaDd(aTemp[10],oDbf:ve4)
    AaDd(aTemp[10],oDbf:ve5)
    AaDd(aTemp[11],oDbf:nz1)
    AaDd(aTemp[11],oDbf:nz2)
    AaDd(aTemp[11],oDbf:nz3)
    AaDd(aTemp[11],oDbf:nz4)
    AaDd(aTemp[11],oDbf:nz5)
    oDbf:Skip()
  enddo

  //oBrw:setarray(aTemp)

RETURN aTemp
//-----------------------------------------------------------//
static function  Build_Title(oDbf,oBrw)
   local nIni := 2    
   local cTitle

   oDbf:GoTop()
  do while !oDbf:Eof
    oBrw:aCols[nIni]:cHeader := "
1"
    oBrw:aCols[nIni+1]:cHeader := "
2"
    oBrw:aCols[nIni+2]:cHeader := "
3"
    oBrw:aCols[nIni+3]:cHeader := "
4"
    oBrw:aCols[nIni+4]:cHeader := "
5"
    cTitle:= dtoc(oDbf:data)
    oBrw:SetGroupHeader( cTitle, nIni, nIni+4 )
    oDbf:Skip()

    nIni := nIni +5
  enddo  
RETURN NIL



Thanks Mr Cesar Gomez now run ok

Image

Re: Creation an array Multiple on Horizontal on Xbrowse

PostPosted: Tue Sep 27, 2022 8:45 pm
by Silvio.Falconi
Cesar,
to select 2022 year I made

cFilter:= "LTRIM(STR(YEAR(FIELD->DATA)))= '" + nyear + "'"
oQry:SetFilter(cFilter)
oQry:GoTop()

and run ok


I f the user want show only ( 10,20,30,40,50,100,200,300,500) records How I must set the filter ?

I try with

nCount is the number selected by final user

IF nCount > 0
nInit:=oDbf:lastrec()-nCount
nEnd:= oDbf:lastrec()
ENDIF



cFilter:= "LTRIM(STR(YEAR(FIELD->DATA)))= '" + nyear + "' .and. '"+;
nInit + "' <= Ltrim(str(FIELD->RECNO())) .and. '"+;
nEnd + "' => Ltrim(str(FIELD->RECNO())) + "'"

but it make error on cfilter

Re: Creation an array Multiple on Horizontal on Xbrowse

PostPosted: Tue Sep 27, 2022 10:04 pm
by cmsoft
Hola Silvio, me alegro que te haya dado una idea de como solucionar el problema.
No soy muy hábil con dbfs, si lo tuviese que hacer con MySql usaría LIMIT n