Page 1 of 2

eagle fw + mysql

PostPosted: Fri May 31, 2013 9:28 am
by juan carlos bellucci
Buen día Foro.... hace un tiempo había una forma de acceder a una bases de datos de mysql y era a través de EAGLE. mi pregunta es si alguien tiene un pedacito de código par acceder desde fivewin sin necesidad de usar otras librerías a las tablas de mysql.

Les cuento tengo un desarrollo hecho con php y funciona muy bien. pero en ciertos lugares y dada la comodidad de programar en fw me gustaría hacer pequeños módulos para la actualización de las tablas.

Por ahí lo que busco no existe y desde ya muchas gracias.


Posdata: yo tengo el código Eagle pero con las nueva versión de harbour y fivewin no puedo crear el ejecutable me da varios errores.

Re: eagle fw + mysql

PostPosted: Fri May 31, 2013 9:41 am
by cnavarro
Buenos dias
Quizás este post te de alguna idea de como poder hacerlo

http://forums.fivetechsupport.com/viewtopic.php?f=6&t=26230#p144355

Saludos

Re: eagle fw + mysql

PostPosted: Mon Jun 03, 2013 1:53 pm
by MarioG
Juan:
El siguiente es un sample que Manu entrega con la lib Eagle
Code: Select all  Expand view
//---------------------------------------------------------------------------//
//  AUTOR.....: Manuel Expósito Suárez   Soft4U 2002-2009                    //
//  eMail.....: messoft@gmail.com                                            //
//  CLASE.....: TMyTable                                                     //
//  FECHA MOD.: 11/01/2009                                                   //
//  VERSION...: 6.00                                                         //
//  PROPOSITO.: Ejemplo uso Egle1 + FW con Browse de FW                      //
//---------------------------------------------------------------------------//

#include "Eagle1.ch"
#include "FiveWin.ch"
#include "dtpicker.ch"
#include "calendar.ch"

//---------------------------------------------------------------------------//
// Son estaticas para que sean visibles desde todo el PRG, por comodidad.

static oConnect     // Objeto conexion
static oDS          // Objeto DataSet

static oWnd         // Objetos de FWH

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

function main()

    local cTypeConn

    SET DATE FORMAT TO "DD/MM/YYYY"

    if AbrirTodo( @cTypeConn )

        DEFINE WINDOW oWnd FROM 4, 4 TO 40, 120 ;
            TITLE "Ejemplo de manteniento de una tabla con" + ;
                  " Eagle1 y FWH - " + cTypeConn;
            MENU BuildMenu()

            SET MESSAGE OF oWnd NOINSET;
                TO oDS:cVersion + " por " + oDS:cAuthor CLOCK DATE

        ACTIVATE WINDOW oWnd

    else

        Salir()

    endif

return( nil )

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

function BuildMenu()

   local oMenu

   MENU oMenu

      MENUITEM "&Mantenimiento" ACTION Mantenimiento()

      MENUITEM "&Utilities"
      MENU
         MENUITEM "&Calculadora" ACTION WinExec( "Calc" ) ;
            MESSAGE "Lamando a la calculadora de Windows"

         SEPARATOR

         MENUITEM "&Escribir"    ACTION WinExec( "Write" ) ;
            MESSAGE "Llamando a Write de Windows"
      ENDMENU

      MENUITEM "&Salir"
      MENU
         MENUITEM "&Acerca de..." ;
            ACTION MsgAbout( oDS:cAuthor, oDS:cVersion ) ;
            MESSAGE "Informa sobre la versión de Eagle1"
         SEPARATOR
         MENUITEM "&Salir";
            ACTION Salir();
            MESSAGE "Salir del ejemplo de Eagle1 y FWH"
      ENDMENU


   ENDMENU

return oMenu

//----------------------------------------------------------------------------//
// Crea el objeto conexion y abre la tabla

static function AbrirTodo( cTConn )

    local cDbName :=    "E1Prueba            "
    local cTabla := "Test"
    local lRet

// Con sistema empotrado:
#ifdef E1_EMBEDDED

    local aOptions := { "Prueba E1 con FWH", "--defaults-file=./test.cnf" }
    local aGroup := { "op_servidor", "op_cliente" }

    oConnect := TMSEConnect():New( )
    lRet := oConnect:Connect(  aOptions, aGroup, AllTrim( cDbName ) )

    cTConn := "Sistema Empotrado"

// Con sistema cliente/servidor:
#else

    local cHost :=      "127.0.0.1           "
    local cUser :=      "root                "
    local cPassword :=  ""
    local oDlg

    DEFINE DIALOG oDlg FROM 2, 2 TO 14, 35;
        TITLE "Datos de conexión" ;
        STYLE nOr( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, 4 )

        @ 01, 01 SAY "Host:" OF oDlg
        @ 01, 05 GET cHost PICTURE "@K" UPDATE OF oDlg

        @ 1.8, 01 SAY "Usuario:" OF oDlg
        @ 02, 05 GET cUser PICTURE "@K" UPDATE OF oDlg

        @ 2.6, 01 SAY "Password:" OF oDlg
        @ 03, 05 GET cPassword PICTURE "@K" UPDATE OF oDlg

        @ 3.4, 01 SAY "Base datos:" OF oDlg
        @ 04, 05 GET cDbName PICTURE "@K" UPDATE OF oDlg

        @ 4, 7 BUTTON "&Acptar" ACTION oDlg:End() OF oDlg

    ACTIVATE DIALOG oDlg CENTERED

    cHost := trim( cHost )
    cUser := trim( cUser )
    cPassword := trim( cPassword )
    cDbName := trim( cDbName )

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

    // Nos conectamos al servidor
    lRet := oConnect:Connect( cHost, cUser, cPassword, cDbName )

    cTConn := "Sistema Clente/Sevidor"

#endif

// Comun para cualquier sistema:
    if !lRet
        MsgInfo( "No hay conexión con el servidor", "Operación Cancelada" )
    else
        oDS := TMyTable():New( oConnect, cTabla )
        oDS:SetReadPADAll( .t. )
        oDS:SetTinyAsLogical( .t. )

// Todas las siguientes solo muestran Tablas
// (2) Con TMSQuery
//    oDS := TMSQuery():New( oConnect, "SELECT Id, First, Last, Street, City, State, Zip, Hiredate, Married FROM " + cTabla )
//        oDS:SetReadPADAll( .t. )
//        oDS:SetTinyAsLogical( .t. )

// (3) Con TMSACursor
//    oDS := TMSACursor():New( oConnect, "SELECT Id, First, Last, Street, City, State, Zip, Hiredate, Married FROM " + cTabla )

// (4) Con TMSDbfCursor
//    oDS := TMSDbfCursor():New( oConnect, "SELECT Id, First, Last, Street, City, State, Zip, Hiredate, Married FROM " + cTabla )

// Con esta sentencia hacemos que se tengan en cuenta los espacios en blanco
// de momento no esta implemetado en Cursores locales basados en Array y Dbf
//    if oDS:ClassName() $ "TMSQUERY TMSTABLE"
//        oDS:SetReadPADAll( .t. )
//    endif

        // Abrimos la tabla, traemos el resultado a nuestro cliente
        lRet := oDS:Open()
        if !lRet
            MsgInfo( "No se puede abrir la tabla: " + cTabla, "Operación Cancelada" )
        endif
    endif

return( lRet )

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

static procedure Salir()

    if ValType( oDS ) == "O"
        oDS:Free()
    endif

    if ValType( oConnect ) == "O"
        oConnect:Free()
    endif

    if ValType( oWnd ) == "O"
        oWnd:End()
    endif

return

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

static procedure Mantenimiento()

    local oDlg, oBrw, oCol

    DEFINE DIALOG oDlg FROM 3, 3 TO 40, 100 TITLE "Mantenimiento tabla TEST"

        @ 00, 01 SAY " &Datos tabla..."  OF oDlg

        oBrw := TXBrowse():New( oDlg )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || hb_ValToStr( oDS:FieldGet( 1 ) ) }
        oCol:cHeader   := oDS:FieldName( 1 )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || oDS:FieldGet( 2 ) }
        oCol:cHeader   := oDS:FieldName( 2 )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || oDS:FieldGet( 3 ) }
        oCol:cHeader   := oDS:FieldName( 3 )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || oDS:FieldGet( 4 ) }
        oCol:cHeader   := oDS:FieldName( 4 )
        oCol := oBrw:AddCol()
        oCol:bStrData  := { || oDS:FieldGet( 5 ) }
        oCol:cHeader   := oDS:FieldName( 5 )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || oDS:FieldGet( 6 ) }
        oCol:cHeader   := oDS:FieldName( 6 )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || oDS:FieldGet( 7 ) }
        oCol:cHeader   := oDS:FieldName( 7 )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || DToC( oDS:FieldGet( 8 ) ) }
        oCol:cHeader   := oDS:FieldName( 8 )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || hb_ValToStr( oDS:FieldGet( 9 ) ) }
        oCol:cHeader   := oDS:FieldName( 9 )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || hb_ValToStr( oDS:FieldGet( 10 ) ) }
        oCol:cHeader   := oDS:FieldName( 10 )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || hb_ValToStr( oDS:FieldGet( 11 ) ) }
        oCol:cHeader   := oDS:FieldName( 11 )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || oDS:FieldGet( 12 ) }
        oCol:cHeader   := oDS:FieldName( 12 )

        WITH OBJECT oBrw
            :nTop      := 10
            :nLeft     := 10
            :nBottom   := 240
            :nRight    := 370
            :nColDividerStyle := 2
            :SetMySql( oDS, .f. )
            :bSkip := { | n | oBrw:oMysql:Skipper( n ) }
            :CreateFromCode()
        END

        @ 14, 01 BUTTON "&Añadir"       OF oDlg SIZE 35, 12;
                    ACTION CtrDatos( oBrw, .t. )
        @ 14, 08 BUTTON "&Modificar"    OF oDlg SIZE 35, 12;
                    ACTION CtrDatos( oBrw, .f. )
        @ 14, 15 BUTTON "&Borrar"       OF oDlg SIZE 35, 12;
                    ACTION Borrar( oBrw )
        @ 14, 22 BUTTON "&Ordenar"      OF oDlg SIZE 35, 12;
                    ACTION Ordernar( oBrw )
        @ 14, 29 BUTTON "B&uscar"       OF oDlg SIZE 35, 12;
                    ACTION Buscar( oBrw )
        @ 14, 36 BUTTON "Listar"        OF oDlg SIZE 35, 12;
                    ACTION ( oBrw:Report( "Listado de la tabla", .t. ), oDS:GoTop() )
        @ 14, 57 BUTTON "&Salir"        OF oDlg ;
                    ACTION oDlg:End() SIZE 35, 12

   ACTIVATE DIALOG oDlg CENTERED

return

//----------------------------------------------------------------------------//
// Borra la fila actual

static procedure Borrar( oBrw )

    local nRecNo := oDS:RecNo()

    if MsgYesNo( "Realmente quiere borrar el registro " + StrNum( oDS:RecNo() ) + "?" )
        if oDS:Delete( , 1 )
            MyMsgInfo( "Borrado en el servidor" )
            if MsgYesNo( "Refresca la lista?" )
                oDS:Refresh()
                oDS:GoTo( nRecNo )
                oBrw:Refresh()
            endif
        endif
    else
        MyMsgInfo( "No se ha borrado..." )
    endif

return

//----------------------------------------------------------------------------//
// Establece un nuevo orden de visualizacion

static procedure Ordernar( oLbxPrincipal )

    local oDlg, oLbx
    local i := oDS:FieldCount()
    local aFld := Array( i )
    local n, cValue

    FOR n := 1 TO i
        aFld[ n ] := oDS:FieldName( n )
    NEXT

    n := 0

    DEFINE DIALOG oDlg FROM 2, 2 TO 18, 30;
        TITLE "Eagle1, FW y ListBox" ;
        STYLE nOr( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, 4 )

    @ 01,02 LISTBOX oLbx;
            VAR cValue;
            ITEMS aFld;
            SIZE 80, 70;
            OF oDlg

    @ 5, 02 BUTTON "&Seleccionar";
            OF oDlg;
            SIZE 40, 12;
            DEFAULT;
            ACTION ( MyMsgInfo( "Orden: " + Str( n := oLbx:GetPos() ) + ;
                                 + CRLF + "Nombre del campo: " + cValue, "Has elegido" ), ;
                     oDlg:End() )

    @ 5, 10 BUTTON "&Salir";
            OF oDlg;
            SIZE 40, 12;
            ACTION oDlg:End()

    ACTIVATE DIALOG oDlg CENTERED

    if n != 0 .and. oDS:SetOrderBy( n,, .t. )
        oLbxPrincipal:GoTop()
        oLbxPrincipal:Refresh()
    else
        MyMsgInfo( "No se ha establacido otro orden..." )
    endif

return

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

static procedure Buscar( oLb )

    local oDlg
    local i := oDS:FieldCount()
    local n := 1
    local oSay, cSay := "&Valor campo "
    local oGet, uVal

    DEFINE DIALOG oDlg FROM 2, 2 TO 12, 70;
        TITLE "Búsqueda de valores en el DataSet" ;
        STYLE nOr( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, 4 )

        @ 01, 01 SAY "&Numero de columna ( 1 - " + StrNum( i ) + " ):" OF oDlg
        @ 01, 10 GET n PICTURE "999" ;
                 VALID ( uVal := oDS:FieldGet( n ), oGet:Refresh(), ;
                 oSay:SetText( cSay + AllTrim( oDS:FieldName( n ) ) ), n > 0 .and. n <= i ) ;
                 OF oDlg

        @ 02, 01 SAY oSay VAR cSay OF oDlg
        @ 02, 10 GET oGet VAR uVal SIZE 160, 13 OF oDlg


    @ 3, 02 BUTTON "&Buscar";
            OF oDlg;
            SIZE 40, 12;
            ACTION ( if( oDS:Find( n, uVal, .t. ), ;
                        MyMsgInfo( "Valor encontrado" ), ;
                        MyMsgInfo( "Valor no encontrado" ) ), oLb:Refresh() )

    @ 3, 10 BUTTON "S&iguiente";
            OF oDlg;
            SIZE 40, 12;
            ACTION ( if( !oDS:FindNext(), MyMsgInfo( "No hay más. Se llegó al final" ), ), ;
                     oLb:Refresh() )

    @ 3, 18 BUTTON "&Salir";
            OF oDlg;
            SIZE 40, 12;
            ACTION oDlg:End()

    ACTIVATE DIALOG oDlg

return

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

static procedure CtrDatos( oLb, lNuevo )

    local oDlg
    local cQueHago
    local nRec := oDS:RecNo()

    if lNuevo
        cQueHago := "Altas"
        oDS:Blank()
    else
        cQueHago := "Modificación"
        oDS:Load()
    endif

    DEFINE DIALOG oDlg FROM 2, 2 TO 30, 77;
        TITLE "Mantenimiento de la tabla Test - " + cQueHago;
        STYLE nOr( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, 4 )

        @ 01, 02 SAY "First"        OF oDlg
        @ 02, 1.5 GET oDS:First     PICTURE "@K" UPDATE OF oDlg

        @ 01, 26.6 SAY "Last"         OF oDlg
        @ 02, 20 GET oDS:Last       PICTURE "@K" UPDATE OF oDlg

        @ 2.8, 02 SAY "Street"      OF oDlg
        @ 4, 1.5 GET oDS:Street     PICTURE "@K" UPDATE OF oDlg

        @ 2.8, 26.6 SAY "City"        OF oDlg
        @ 4, 20 GET oDS:City       PICTURE "@K" UPDATE OF oDlg

        @ 4.6, 02 SAY "State"       OF oDlg
        @ 6, 1.5 GET oDS:State      PICTURE "@K XX" UPDATE OF oDlg

        @ 4.6, 5.5 SAY "Zip"         OF oDlg
        @ 6, 4 GET oDS:Zip        PICTURE "@K 99999-9999" UPDATE OF oDlg

        @ 4.6, 13.9 SAY "Hiredate"    OF oDlg
        @ 78, 83 DTPICKER oDS:Hiredate UPDATE  PIXEL SIZE 50, 11 OF oDlg

        @ 5.7, 22 CHECKBOX oDS:Married PROMPT "Married"  UPDATE OF oDlg

        @ 4.6, 33 SAY "Age"         OF oDlg
        @ 6, 24.5 GET oDS:Age PICTURE "@K 999"        UPDATE OF oDlg

        @ 4.6, 37.5 SAY "Salary"      OF oDlg
        @ 6, 28 GET oDS:Salary  PICTURE "@KE 9,999,999.999"   UPDATE OF oDlg

//..................... El campo MEMO...............................................
        @ 6.4, 02 SAY "Notes"       OF oDlg
        @ 8.1, 1.5 GET oDS:Notes      MEMO         UPDATE OF oDlg SIZE 270, 65
//..................................................................................

        @ 10.5, 02 BUTTON "&Guardar";
                 OF oDlg;
                 SIZE 40, 12;
                 ACTION ( FuncVale( lNuevo ), oLb:Refresh(), oDlg:End() )

        @ 10.5, 10 BUTTON "&Cancelar";
                 OF oDlg;
                 SIZE 40, 12;
                 ACTION ( if( lNuevo, oDS:Blank(), oDS:Load() ), oDlg:Update() )

        @ 10.5, 18 BUTTON "&Salir";
                 OF oDlg;
                 SIZE 40, 12;
                 ACTION oDlg:End()

    ACTIVATE DIALOG oDlg

return

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

static procedure FuncVale( lNuevo )

    local nRec

    if lNuevo
        oDS:insert( .t. )
        oDS:GoBottom()
    else
        nRec := oDS:RecNo()
        oDS:Update( .t. )
        oDS:GoTo( nRec )
    endif

return

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

Saludos

Re: eagle fw + mysql

PostPosted: Mon Jun 10, 2013 11:31 am
by juan carlos bellucci
Gracias Mario....te cuento. donde estoy hay un sistema realizado en php y mysql, funciona muy bien para realizar consultas o visualizar datos pero a la hora de realizar alguna tarea donde hay que buscar datos de otras tablas se pone medio pesadito el tema ya que hay que guardar todas las variables y reembiarlas para que cuando se cargue nuevamente la pagina tenga esos datos y la verdad me gusta mas hacerlo con fw... yo compre la versión 12.8 y no tengo ni el Eagle ni el TMysql... ja si por favor me podes decir donde adquirirlos o si FW tiene alguna forma de leer desde Localhost una base mysql y realizar alguna tarea sin usar php te lo voy agradecer y mucho ya ya tengo 62 años y me actualice con php mysql pero ya estoy tan metido con clipper y fw que la verdad me cuesta cambiarme hermano.

desde escobar donde se hace la fiesta de la flor te mando un abrazo y quedo a la espera de alguna novedad tuya... mi correo privado es juanca252@yahoo.com.ar desde ya un abrazo a la distancia.

Re: eagle fw + mysql

PostPosted: Mon Jun 10, 2013 12:06 pm
by MarioG
Juan Carlos;
La clase TMySQL esta en las contribs de xHarbour y Harbour: http://code.google.com/p/fivewin-contributions/downloads/list
tambien tenes la clase TDolphin, en el blog de Daniel (TDolphin) hay varios ejemplos y el enlace para descargarla: http://tdolphin.blogspot.com/
Eagle, es de pago y fue creada por Manu Exposito: manuexposito@terra.es, messoft@gmail.com

Obviamente todas conectan mediante localhost

Saludos

Re: eagle fw + mysql

PostPosted: Mon Sep 15, 2014 3:39 pm
by cnavarro
Manu, te envié hace tiempo varios correos para actualizarme, pero no obtuve respuesta
Estuve bastante tiempo apartado de este tema y ya no me acordaba ni del mail que tenía en yahoo ni id, ni na de na :D
Me quedé en
Fecha.....: 12/03/2005
Version...: 3.02

Aunque pone 3.03

Bueno, aún tengo esto que me fue de gran ayuda en su momento y que de he retomar de nuevo para ponerme al dia :) :P

Image

Image

Re: eagle fw + mysql

PostPosted: Mon Sep 15, 2014 4:41 pm
by xmanuel
Cristóbal, escríbeme a mi correo xmessoft de gmail o llámame por teléfono y te paso lo ultimísimo ;-)

Vamos que no me entere yo que tú te quedas sin tu Eagle1!!!!

:D

Re: eagle fw + mysql

PostPosted: Mon Sep 15, 2014 4:54 pm
by cnavarro
xmanuel wrote:Cristóbal, escríbeme a mi correo xmessoft de gmail o llámame por teléfono y te paso lo ultimísimo ;-)

Vamos que no me entere yo que tú te quedas sin tu Eagle1!!!!

:D


Manu, gracias por tu ofrecimiento
De momento, no lo necesito ya que estoy en otras cosas :D y no voy a tener el tiempo que requiere volver a ello, pero ten por seguro que me pondré en contacto contigo o te pondré un mensaje en el foro para solicitártelo.
Gracias de nuevo y me alegro haberte visto de nuevo por aqui

Re: eagle fw + mysql

PostPosted: Fri Oct 03, 2014 6:10 pm
by cnavarro
Manu, te envié un correo el 17 de Septiembre
Cuando puedas dime algo

-------------------------- EDITADO -------------------
Reenviado

Re: eagle fw + mysql

PostPosted: Fri Oct 03, 2014 6:15 pm
by xmanuel
Cristobal, vuelve a enviármelo, he tenido problemas y puede que se haya perdido :-(

Re: eagle fw + mysql

PostPosted: Mon Jun 06, 2016 3:00 am
by ruben Dario
cnavarro wrote:Manu, te envié hace tiempo varios correos para actualizarme, pero no obtuve respuesta
Estuve bastante tiempo apartado de este tema y ya no me acordaba ni del mail que tenía en yahoo ni id, ni na de na :D
Me quedé en
Fecha.....: 12/03/2005
Version...: 3.02

Aunque pone 3.03

Bueno, aún tengo esto que me fue de gran ayuda en su momento y que de he retomar de nuevo para ponerme al dia :) :P

Image

Image



SAludos Al forum

Alguien tiene esta guia alguien me la podria facilitar

Re: eagle fw + mysql

PostPosted: Mon Jun 06, 2016 8:42 am
by cnavarro
Rubén, yo lo tengo, evidentemente, pero no lo tengo en formato digital
Tampoco sé si podría/debería digitalizarlo y publicarlo sin el explícito permiso de su autor
Son de estas muchas cosas que he guardado para cuando creen de una vez el Premio Nobel a los desarrollos en "XBase", creo que hay mucha gente que se lo han ganado :D :D :D

Saludos

Re: eagle fw + mysql

PostPosted: Mon Jun 06, 2016 2:05 pm
by Compuin
TMysql no aparece en esas contiribs?

Donde mas se puede conseguir?

Re: eagle fw + mysql

PostPosted: Mon Jun 06, 2016 6:42 pm
by ruben Dario
cnavarro wrote:Rubén, yo lo tengo, evidentemente, pero no lo tengo en formato digital
Tampoco sé si podría/debería digitalizarlo y publicarlo sin el explícito permiso de su autor
Son de estas muchas cosas que he guardado para cuando creen de una vez el Premio Nobel a los desarrollos en "XBase", creo que hay mucha gente que se lo han ganado :D :D :D

Saludos


Gracias.
Tu has llegado a crear la libreria de Eagle

Re: eagle fw + mysql

PostPosted: Mon Jun 06, 2016 7:54 pm
by cnavarro
Compuin wrote:TMysql no aparece en esas contiribs?

Donde mas se puede conseguir?


Si está
..\contrib\hbmysql