Page 1 of 2

Tabla MySql en Array y xBrowse (RESUELTO)

PostPosted: Mon Jun 05, 2017 1:38 pm
by Compuin
Buenas foro,

Alguien podria indicarme como abrir una tabla Mysql y llevarlo a un array para luego usarlo con la funcion o metdo setarray de xBrowse ?

Atento a sus comentarios

Re: Tabla MySql en Array y xBrowse

PostPosted: Mon Jun 05, 2017 2:04 pm
by leandro
Pues no se si necesitas pasarlo a un array.... pero este código muestra una consulta en un xbrowse directamente.
Code: Select all  Expand view

***********************
*Catalogo de Documentos
***********************
PROC pDocFactu()

LOCAL aCol:={0,0,0},oCuadro,nWidth:=0
oC1vg1:=space(100)
vOrden:="ee_codigo"
oTimpr:=1


oVar   := "SELECT * from lyma_docontrol ORDER BY "+alltrim(vOrden)
TRY
  oRsDocfac:=tOleAuto():New("ADODB.RecordSet")
CATCH oError
  FW_ShowAdoError(oLamcla:oCon)
END

oRsDocfac:CursorLocation  := adUseClient //adUseServer
oRsDocfac:LockType        := adLockOptimistic
oRsDocfac:CursorType      := adOpenKeyset
oRsDocfac:Source          := oVar
//oRsDocfac:ActiveConnection( oLamcla:oCon )
TRY
  oRsDocfac:Open(oRsDocfac:Source,oLamcla:oCon)
CATCH oError
 FW_ShowAdoError(oLamcla:oCon)
END

DEFINE BRUSH oFondo FILE ".\res\res_403.BMP"
DEFINE DIALOG oCuadro RESOURCE "orMedida" ICON "#8001" TRANSPARENT BRUSH oFondo

  REDEFINE BUTTONBMP Btn_Limp ID 4003 OF oCuadro BITMAP "Blimpi2" TOOLTIP oLamcla:mTfil ACTION pBusDfa(oC1vg1:=space(100))
  REDEFINE GET oC1og1 VAR oC1vg1 ID 4002 OF oCuadro UPDATE VALID(pBusDfa(),.T.)


//  Btn_Limp= { cTexto, cTitulo, nClrTexto, nClrFondo }
 // Btn_Limp:aTooltip = { "prueba jejeje", "Titulo", oLamcla:cClr2, oLamcla:cClr1 }

  oBrwDofa := TXBrowse():New( oCuadro )
  oBrwDofa:nMarqueeStyle       := MARQSTYLE_HIGHLWIN7
  oBrwDofa:nColDividerStyle    := LINESTYLE_LIGHTGRAY
  oBrwDofa:nHeaderLines        := 1
  oBrwDofa:lColDividerComplete := .t.
  oBrwDofa:lRecordSelector     := .t.
  oBrwDofa:bClrSel         := {|| { CLR_BLACK,oLamcla:cClr7 } }
  oBrwDofa:bClrStd         := {|| IF( (oRsDocfac:AbsolutePosition()%2)==0,{CLR_BLACK,oLamcla:cClr2},{CLR_BLACK,oLamcla:cClr1} ) }
  oBrwDofa:bClrSelFocus        := {|| { CLR_WHITE,oLamcla:cClr8 } }
  oBrwDofa:nStretchCol         := STRETCHCOL_LAST

  aCol[ 1]                   := oBrwDofa:AddCol()
  aCol[ 1]:bStrData          := { || If( oRsDocfac:Eof, Space( nWidth ), cValtoChar( oRsDocfac:Fields( "ee_codigo" ):Value ) ) }
  aCol[ 1]:cHeader            := "Codigo"
  aCol[ 1]:nHeadStrAlign     := AL_LEFT
  aCol[ 1]:nDataStrAlign     := AL_LEFT
  aCol[ 1]:nWidth            := 80

  aCol[ 2]                   := oBrwDofa:AddCol()
  aCol[ 2]:bStrData          := { || If( oRsDocfac:Eof, Space( nWidth ), cValtoChar( oRsDocfac:Fields( "ee_nombre" ):Value ) ) }
  aCol[ 2]:cHeader            := "Nombre"
  aCol[ 2]:nHeadStrAlign     := AL_LEFT
  aCol[ 2]:nDataStrAlign     := AL_LEFT
  aCol[ 2]:nWidth            := 225

  oBrwDofa:SetADO( oRsDocfac )
  oBrwDofa:CreateFromResource( 102 )

  oCuadro:cTitle := "Tabla Control Documentos"
  oCuadro:bKeyDown := {|nKey|iif(nKey == 114,(vgraba:=.t.,oLamcla:autoriza(108)),(iif(nKey == 115,(vgraba:=.f.,oLamcla:autoriza(109)),(iif(nKey == 116,(oLamcla:autoriza(110)),(""))))))}

ACTIVATE DIALOG oCuadro NOWAIT On Init (Centra( oCuadro ),oCuadro:refresh(),BarraDofa( oCuadro )) VALID (oRsDocfac:Close(),.t.) CENTERED
 

Re: Tabla MySql en Array y xBrowse

PostPosted: Mon Jun 05, 2017 2:07 pm
by Compuin
Gracias Leandro,

Necesito pasarlo a un Array y utilizar en TxBrowse la funcion o metodo Setarray()

Re: Tabla MySql en Array y xBrowse

PostPosted: Mon Jun 05, 2017 3:16 pm
by joseluisysturiz
Saludos, para mayor rapidez usa FILLARRAY, aca te coloco las formas en que lo uso, saludos... :shock:

Code: Select all  Expand view

 oQryVende:FillArray( {| aRow | AAdd( oBrwASi:aArrayData, { aRow[2], aRow[4] } ) } ) // CON POSICION CAMPO

oBrwASi:aArrayData := oQryVende:FillArray( , { "vende_cedula", "vendeapellidos" } ) // CON NOMBRE DE CAMPOS DE LA TABLA

oQry:FillArray( {| aRow | ( AAdd( Array1, cValToChar( aRow[1] ) ) ,; // PARA LOS COMBOBOX CON QRY
                              AAdd( Array2, aRow[2]) ) }, )
 


luego haces tu oBr:SetArray(nue_array); oBrw:Refresh()

Re: Tabla MySql en Array y xBrowse

PostPosted: Mon Jun 05, 2017 3:18 pm
by Compuin
joseluisysturiz wrote:Saludos, para mayor rapidez usa FILLARRAY, aca te coloco las formas en que lo uso, saludos... :shock:

Code: Select all  Expand view

 oQryVende:FillArray( {| aRow | AAdd( oBrwASi:aArrayData, { aRow[2], aRow[4] } ) } ) // CON POSICION CAMPO

oBrwASi:aArrayData := oQryVende:FillArray( , { "vende_cedula", "vendeapellidos" } ) // CON NOMBRE DE CAMPOS DE LA TABLA

oQry:FillArray( {| aRow | ( AAdd( Array1, cValToChar( aRow[1] ) ) ,; // PARA LOS COMBOBOX CON QRY
                              AAdd( Array2, aRow[2]) ) }, )
 


luego haces tu oBr:SetArray(nue_array); oBrw:Refresh()



Jose Luis,

Gracas. Probare

Re: Tabla MySql en Array y xBrowse

PostPosted: Tue Jun 06, 2017 2:53 am
by Compuin
No me queda muy claro como llenar el Array con una Tabla MySql

Alguien tendra un ejemplo de hacerlo ?

Re: Tabla MySql en Array y xBrowse

PostPosted: Tue Jun 06, 2017 3:32 am
by joseluisysturiz
Compuin wrote:No me queda muy claro como llenar el Array con una Tabla MySql

Alguien tendra un ejemplo de hacerlo ?


Coloque 3 formas de como lo hago y que es lo que se carga y como...que es lo que no entiendes..?

1- debes crear tu consulta con los campos que quieras alimenten el array, llamese una o varias tablas relacionadas.

2- dicha consulta lo asignas a un oQry.

3- usas en este oQry el methodo FillArray de la forma que te coloque, como es para un solo array, te recomiendo el que dice con los nombres de los campos, estos deben ir en el orden que quieres se llene tu ARRAY el cual debe estar previamente creado.

Code: Select all  Expand view

tu_array := oQry:FillArray( , { "campo1", "campo2", etc } ) // CON NOMBRE DE CAMPOS DE LA TABLA
 


4.- luego usas oBrw:SetArray(tu_array_usado_en_fillarray) y oBrw:Refresh()

y listo...espero haber aclarado algunas dudas, si no, di claramente que es lo que no entiendes para tratar ayudarte, gracias, saludos... :shock:

Re: Tabla MySql en Array y xBrowse

PostPosted: Tue Jun 06, 2017 2:54 pm
by Armando
Amigos del foro:

Podría servirles el método GetRows()?

array := recordset.GetRows(Rows, Start, Fields )

Saludos

Re: Tabla MySql en Array y xBrowse

PostPosted: Tue Jun 06, 2017 6:51 pm
by vilian
Friends,
IF you are using FWHMYSQL it´s easy:
Code: Select all  Expand view

      aDados := oCn:QueryResult("SELECT * FROM customers")
        ...
        ...
      oXbr:SetArray( aDados )
 

Re: Tabla MySql en Array y xBrowse

PostPosted: Tue Jun 06, 2017 8:35 pm
by xmanuel
En Eagle v3.03 o sea de fecha 10/05/2005:
:D :twisted: :roll:
Code: Select all  Expand view

...
aDados := oCur:Cursor // oCur es un objeto de tipo TACursor
...

oXbr:SetArray( aDados )
 


o directamente

Code: Select all  Expand view

oXbr:SetArray( oCur:Cursor)
 

Re: Tabla MySql en Array y xBrowse

PostPosted: Tue Jun 06, 2017 8:53 pm
by Compuin
xmanuel wrote:En Eagle v3.03 o sea de fecha 10/05/2005:
:D :twisted: :roll:
Code: Select all  Expand view

...
aDados := oCur:Cursor // oCur es un objeto de tipo TACursor
...

oXbr:SetArray( aDados )
 


o directamente

Code: Select all  Expand view

oXbr:SetArray( oCur:Cursor)
 



Lo estoy haciendo asi

LOCAL aFields:={}

aFields:=oCursor


obrw := TXBrowse():New( ownd )

obrw:SetArray( aFields, .t. )


oCursor lo llamo asi

oTb := TMsTable( cTabla ):New( oDatabase, cTabla )

// Abrimos la tabla, traemos el resultado a nuestro cliente
if !oTb:Open()
MsgInfo( "No se puede abrir la tabla: " + cTabla, "Operacin Cancelada" )
endif

oCursor := TMSACursor():New( oTb ) // Para la segunda


El error que me lanza es

Time from start: 0 hours 0 mins 1 secs
Error occurred at: 06/06/2017, 16:51:42
Error description: Error BASE/1068 Error de argumento: acceso al array
Args:
[ 1] = A { ... } length: 3
[ 2] = U

Re: Tabla MySql en Array y xBrowse

PostPosted: Wed Jun 07, 2017 10:34 am
by xmanuel
Te falta la apertura:

oCursor := TMSACursor():New( oTb ) // Para la segunda
oCursor:open() // <------------------------------------------

Re: Tabla MySql en Array y xBrowse

PostPosted: Wed Jun 07, 2017 10:35 am
by xmanuel
El código completo para que funcione:

Code: Select all  Expand view


#include "xbrowse.ch"
#include "fivewin.ch"

PROCEDURE main()

    local oWnd, oBrw, oCol
    local oCon, oTb, oCur, oDataBase // Objetos de Eagle1
    local cHost := "127.0.0.1"
    local cUser := "root"
    local cPassword := "root"
    local cDbName := "PRUEBA"
    local cTabla := "test"
    local n, aCabecera := {}

    // Creamos el objeto "connexion"
    oCon := TMSConnect():New()
    // Nos conectamos al servidor
    if !oCon:Connect( cHost, cUser, cPassword )
        MsgInfo( "No hay conexion con el servidor", "Operacin Cancelada" )
        oCon:Free()
        return
    endif
    // Creamos un objeto DataBase y lo ponemos en uso
    oDataBase := TMSDataBase():New( oCon, cDbName, .t. )
    // Interrogamos si se logr poner la DataBase por defecto en el sistema
    if !oDataBase:Used()
        MsgInfo( "No se puede conectar a la BD: " + cDbName, "Operacin Cancelada" )
        oCon:Free()
        return
    endif
    // Creamos un objeto Table con DataFields
    oTb := TMsTable( cTabla ):New( oDataBase, cTabla )
    // Abrimos la tabla, traemos el resultado a nuestro cliente
    if !oTb:Open()
        MsgInfo( "No se puede abrir la tabla: " + cTabla, "Operacin Cancelada" )
        return
    endif
   
    oCur := TMSACursor():new( oTb )  // Creo el cursor basado en ARRAY 
    oCur:open() // Abro el cursor
   
    DEFINE WINDOW oWnd TITLE "Testing Eagle1 - Fivewin"

        oBrw := TXBrowse():New( oWnd )  // Creamos xbrowse
       
        oBrw:nRowHeight := 35
        oBrw:nColDividerStyle   := LINESTYLE_BLACK
        oBrw:nRowDividerStyle   := LINESTYLE_BLACK
        oBrw:nMarqueeStyle := 6
        oBrw:nStretchCol  := STRETCHCOL_LAST
   
        oBrw:SetArray( oCur:cursor )
        // Ponemos los nombre a las columnas
        AEval( oBrw:aCols, {| oCol, i | oCol:cHeader := oCur:fieldName( i ), ;
                                        oCol:nHeadStrAlign := AL_CENTER } )

        oBrw:CreateFromCode()
   
        oWnd:oClient = oBrw
   
    ACTIVATE WINDOW oWnd   MAXIMIZED

    oCur:free()
    oTb:Free()
    oCon:Free()

return

//----------------------------------------------------------------------------//

 


Comprobado :D

Re: Tabla MySql en Array y xBrowse

PostPosted: Wed Jun 07, 2017 11:58 am
by Compuin
xmanuel,

Muchas gracias

Re: Tabla MySql en Array y xBrowse

PostPosted: Wed Jun 07, 2017 4:32 pm
by Compuin
Ya funciona...probado con Harbour 3.2 / BCC 7.00 y va de muy bien

Excelente aporte de Manu con la migracion de Eagle1 a estas versiones mas actualizadas


Image

//----------------------------------------------------------------------------//
// Soft4U Manu Exposito //
// Eagle1 Clases para manejo de MySQL desde xBase //
// //
// Tutor18 : Uso de Cursores locales / basados en MySQL y Array //
//----------------------------------------------------------------------------//

#include "xbrowse.ch"
#include "fivewin.ch"

PROCEDURE main()

local oWnd, oBrw, oCol
local oCon, oTb, oCur, oDataBase // Objetos de Eagle1
local cHost := "127.0.0.1"
local cUser := "root"
local cPassword := ""
local cDbName := "PRUEBA"
local cTabla := "test"
local n, aCabecera := {}

// Creamos el objeto "connexion"
oCon := TMSConnect():New()

// Nos conectamos al servidor
if !oCon:Connect( cHost, cUser, cPassword )
MsgInfo( "No hay conexion con el servidor", "Operacin Cancelada" )
oCon:Free()
return
endif

// Creamos un objeto DataBase y lo ponemos en uso
oDataBase := TMSDataBase():New( oCon, cDbName, .t. )

// Interrogamos si se logr poner la DataBase por defecto en el sistema
if !oDataBase:Used()
MsgInfo( "No se puede conectar a la BD: " + cDbName, "Operacin Cancelada" )
oCon:Free()
return
endif

// Creamos un objeto Table con DataFields
oTb := TMsTable( cTabla ):New( oDataBase, cTabla )

// Abrimos la tabla, traemos el resultado a nuestro cliente
if !oTb:Open()
MsgInfo( "No se puede abrir la tabla: " + cTabla, "Operacin Cancelada" )
return
endif

// Creo el cursor basado en ARRAY
oCur := TMSACursor():new( oTb )

// Abro el cursor
oCur:open()

DEFINE WINDOW oWnd FROM 1, 1 TO 32, 145 TITLE "Testing Eagle1 v303 para Harbour 3.2 y Borland BCC 7.00 for Win32 - Fivewin"

// Creamos xbrowse
oBrw := TXBrowse():New( oWnd )
oBrw:SetArray( oCur:cursor, .T. )

oBrw:lHeader :=.T.
oBrw:l2007 :=.F.
oBrw:lFooter :=.F.
oBrw:lHScroll :=.T.

//Aqui el Efecto Pijama
oBrw:bClrStd := { || If( oBrw:KeyNo() % 2 == 0, ;
{ CLR_BLACK, RGB( 224, 236, 255 ) }, ;
{ CLR_BLACK, RGB( 189, 211, 253 ) } ) }

// Ponemos los nombre a las columnas
AEval( oBrw:aCols, {| oCol, i | oCol:cHeader := oCur:fieldName( i ), oCol:nHeadStrAlign := AL_CENTER } )

oBrw:bClrHeader := {|| {0,14671839 }}

oBrw:CreateFromCode()

oWnd:oClient = oBrw

ACTIVATE WINDOW oWnd CENTERED

oCur:free()
oTb:Free()
oCon:Free()

return

//----------------------------------------------------------------------------//