FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Tabla MySql en Array y xBrowse (RESUELTO)
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Tabla MySql en Array y xBrowse (RESUELTO)
Posted: Mon Jun 05, 2017 01:38 PM

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

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 1816
Joined: Wed Oct 26, 2005 02:49 PM
Re: Tabla MySql en Array y xBrowse
Posted: Mon Jun 05, 2017 02:04 PM
Pues no se si necesitas pasarlo a un array.... pero este código muestra una consulta en un xbrowse directamente.
Code (fw): Select all Collapse
***********************
*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
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Tabla MySql en Array y xBrowse
Posted: Mon Jun 05, 2017 02:07 PM
Gracias Leandro,

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

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: Tabla MySql en Array y xBrowse
Posted: Mon Jun 05, 2017 03:16 PM
Saludos, para mayor rapidez usa FILLARRAY, aca te coloco las formas en que lo uso, saludos... :-)

Code (fw): Select all Collapse
 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()
Dios no está muerto...



Gracias a mi Dios ante todo!
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Tabla MySql en Array y xBrowse
Posted: Mon Jun 05, 2017 03:18 PM
joseluisysturiz wrote:Saludos, para mayor rapidez usa FILLARRAY, aca te coloco las formas en que lo uso, saludos... :-)

Code (fw): Select all Collapse
 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

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Tabla MySql en Array y xBrowse
Posted: Tue Jun 06, 2017 02:53 AM

No me queda muy claro como llenar el Array con una Tabla MySql

Alguien tendra un ejemplo de hacerlo ?

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: Tabla MySql en Array y xBrowse
Posted: Tue Jun 06, 2017 03:32 AM
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 (fw): Select all Collapse
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... :-)
Dios no está muerto...



Gracias a mi Dios ante todo!
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Tabla MySql en Array y xBrowse
Posted: Tue Jun 06, 2017 02:54 PM

Amigos del foro:

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

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

Saludos

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 1067
Joined: Wed Nov 09, 2005 02:17 AM
Re: Tabla MySql en Array y xBrowse
Posted: Tue Jun 06, 2017 06:51 PM
Friends,
IF you are using FWHMYSQL it´s easy:
Code (fw): Select all Collapse
      aDados := oCn:QueryResult("SELECT * FROM customers")
        ...
        ...
      oXbr:SetArray( aDados )
Sds,
Vilian F. Arraes
vilian@vfatec.com.br
Belém-Pa-Brazil
Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: Tabla MySql en Array y xBrowse
Posted: Tue Jun 06, 2017 08:35 PM
En Eagle v3.03 o sea de fecha 10/05/2005:
:-) :-) :-)
Code (fw): Select all Collapse
...
aDados := oCur:Cursor // oCur es un objeto de tipo TACursor
...

oXbr:SetArray( aDados )


o directamente

Code (fw): Select all Collapse
oXbr:SetArray( oCur:Cursor)
______________________________________________________________________________

Sevilla - Andalucía
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Tabla MySql en Array y xBrowse
Posted: Tue Jun 06, 2017 08:53 PM
xmanuel wrote:En Eagle v3.03 o sea de fecha 10/05/2005:
:-) :-) :-)
Code (fw): Select all Collapse
...
aDados := oCur:Cursor // oCur es un objeto de tipo TACursor
...

oXbr:SetArray( aDados )


o directamente

Code (fw): Select all Collapse
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

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: Tabla MySql en Array y xBrowse
Posted: Wed Jun 07, 2017 10:34 AM

Te falta la apertura:

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

______________________________________________________________________________

Sevilla - Andalucía
Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: Tabla MySql en Array y xBrowse
Posted: Wed Jun 07, 2017 10:35 AM
El código completo para que funcione:

Code (fw): Select all Collapse
#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 :-)
______________________________________________________________________________

Sevilla - Andalucía
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Tabla MySql en Array y xBrowse
Posted: Wed Jun 07, 2017 11:58 AM

xmanuel,

Muchas gracias

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Tabla MySql en Array y xBrowse
Posted: Wed Jun 07, 2017 04:32 PM
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




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

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

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity