Tabla MySql en Array y xBrowse (RESUELTO)

Tabla MySql en Array y xBrowse (RESUELTO)

Postby Compuin » Mon Jun 05, 2017 1: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
Last edited by Compuin on Wed Jun 07, 2017 4:35 pm, edited 1 time in total.
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1213
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Tabla MySql en Array y xBrowse

Postby leandro » Mon Jun 05, 2017 2:04 pm

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
 
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1480
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Tabla MySql en Array y xBrowse

Postby Compuin » Mon Jun 05, 2017 2:07 pm

Gracias Leandro,

Necesito pasarlo a un Array y utilizar en TxBrowse la funcion o metodo Setarray()
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1213
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Tabla MySql en Array y xBrowse

Postby joseluisysturiz » Mon Jun 05, 2017 3:16 pm

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()
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: Tabla MySql en Array y xBrowse

Postby Compuin » Mon Jun 05, 2017 3:18 pm

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
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1213
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Tabla MySql en Array y xBrowse

Postby Compuin » Tue Jun 06, 2017 2:53 am

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

Alguien tendra un ejemplo de hacerlo ?
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1213
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Tabla MySql en Array y xBrowse

Postby joseluisysturiz » Tue Jun 06, 2017 3: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: 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:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: Tabla MySql en Array y xBrowse

Postby Armando » Tue Jun 06, 2017 2: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
User avatar
Armando
 
Posts: 3055
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Tabla MySql en Array y xBrowse

Postby vilian » Tue Jun 06, 2017 6:51 pm

Friends,
IF you are using FWHMYSQL it´s easy:
Code: Select all  Expand view

      aDados := oCn:QueryResult("SELECT * FROM customers")
        ...
        ...
      oXbr:SetArray( aDados )
 
Sds,
Vilian F. Arraes
vilian@vfatec.com.br
Belém-Pa-Brazil
User avatar
vilian
 
Posts: 920
Joined: Wed Nov 09, 2005 2:17 am
Location: Brazil

Re: Tabla MySql en Array y xBrowse

Postby xmanuel » Tue Jun 06, 2017 8:35 pm

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)
 
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 756
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Tabla MySql en Array y xBrowse

Postby Compuin » Tue Jun 06, 2017 8:53 pm

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
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1213
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Tabla MySql en Array y xBrowse

Postby xmanuel » Wed Jun 07, 2017 10:34 am

Te falta la apertura:

oCursor := TMSACursor():New( oTb ) // Para la segunda
oCursor:open() // <------------------------------------------
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 756
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Tabla MySql en Array y xBrowse

Postby xmanuel » Wed Jun 07, 2017 10:35 am

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
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 756
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Tabla MySql en Array y xBrowse

Postby Compuin » Wed Jun 07, 2017 11:58 am

xmanuel,

Muchas gracias
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1213
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Tabla MySql en Array y xBrowse

Postby Compuin » Wed Jun 07, 2017 4: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


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

//----------------------------------------------------------------------------//
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1213
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 9 guests