FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour HDO acceso a bases de datos SQLite - Betatesters
Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
HDO acceso a bases de datos SQLite - Betatesters
Posted: Tue Mar 15, 2016 08:14 PM
Hola a todos Harbour Data Objects HDO pretende ser una manera universal para acceder a cualquier base de datos con unos drivers que yo llamo Replaceable Data Link RDL muy parecidos a a los actuales RDD de las DBF pero para SQL.
Algunas caracteristicas de la libreria son:

- Está hecha al 100*100 en Lenguaje C (tanto las clases como las funciones) por lo que la velocidad está muy por encima de lo que se conoce hasta ahora.
- Es 100*100 POO. Se puede heredar de ellas en PRG para hacer clases más especializadas.
- Está formadas por varias clases muy faciles de usar:
* THDO: encargada de establecer la conexión con la base de datos y hacer el mantenimiento de la misma además de controlar las transacciones, y obtener objetos para la gestión de consulta y demás sentencias SQL. También se pueden ejecutar sentencias directamente y establecer atributos y controlar las excepciones.
* THDOStatetent: encargada de las sentencias de todo tipo que se le pueden enviar al servidor. Estas sentencias pueden ser directas o preparadas. Las sentencias preparadas son mucho más eficientes y evitan la inyección de codigo malintencionado en el servidor. La novedad de las sentencias preparadas en el lado del servidor es que se pueden usar BIND en los parametros y en los resultados de tal manera que esos BIND se pueden asociar a variables de Harbour y se actualizarán automaticamente sin tener que asignarlas "a mano". En el caso de un BIND de parametro cada vez que se le asigna un valor a la variable enlazada y se envía el metodo execute esta quedará actualizada y respondera como es debido. He aquí un ejemplo:
Code (fw): Select all Collapse
/*
 * Proyecto: hdo
 * Fichero: ej07.prg
 * Descripcion: Uso de sentencias compiladas con variables vinculadas. Consultas
 * Autor: Manu Exposito 2015-16
 * Fecha: 21/08/2015
 */

#include "hdo.ch"

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

procedure main07b()

    local oDb, oStmt, oCur, e
    local nSocIni := 0, nSocFin := 999999, getlist := {}
    local cDb := "agenda.db"
    local cTabla := "socios"
    local cSql := "SELECT * FROM " + cTabla + " WHERE clavesocio BETWEEN ? AND ? ;"

    cls

    oDb := THDO():new( "sqlite" )

    oDb:setAttribute( ATTR_ERRMODE, .t. )

    if oDb:connect( cDb )
        TRY
            oStmt := oDb:prepare( cSql )  // Prepara la sentencia y crea el objeto oStmt

            oStmt:bindParam( 1, @nSocIni ) // Asocia variables PRG
            oStmt:bindParam( 2, @nSocFin )

            @ MaxRow(), 00 SAY "Presiona <INTRO> para selecionar rangos o <ESC> para salir..."

            while Inkey( 0 ) != 27

                cls

                @ 02, 02 SAY "Entrada de datos:"
                @ 04, 02 SAY "Entre rango inicial:" get nSocIni PICTURE "@K"
                @ 05, 02 SAY "Entre rango final..:" get nSocFin PICTURE "@K" VALID validaRango( nSocIni, nSocFin )
                READ

                oStmt:execute() // Ejecuta la sentencia
                /*
                for e := 1 to 6
                    muestra( oStmt:GETCOLUMNMETA( e ) )
                next
                */
                // Creamos un cursor local (navigator) como un hash table
                oCur := THashCursor():new( oStmt:fetchAll( FETCH_HASH ) )

                cls

                @ 00, 00 SAY "Resultado de la consulta -> " + hb_ntos( oStmt:rowCount() ) + " registros:" COLOR "W+/R"
                @ MaxRow(), 00 SAY "<ESC> para volver al menu..." COLOR "W+/R"

                if oCur:recCount() > 0
                    miBrwCursor( oCur, 1, 0, MaxRow() - 1, MaxCol() )
                else
                    msg( "No hay registros en ese rango" )
                endif

                oCur:free()

                cls
                @ MaxRow(), 00 SAY "Presiona <INTRO> para selecionar rangos o <ESC> para salir..."
            end
        CATCH e
            Eval( ErrorBlock(), e )
        FINALLY
            if oStmt:className() == "THDOSTATEMENT"
                oStmt:free()
            endif
            msg( "Se acabo" )
        END

    endif

    oDb:disconnect()

return

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

static function validaRango( r1, r2 )

    local lRet := ( r1 > r2 )

    if lRet
         msg( "Priemero mayor que segundo: "  + ;
                hb_ntos( r1 ) + " > " + ;
                hb_ntos( r2 ), "Error en rangos" )
    endif

return !lRet


* THashCursor y TMemCursor: clases para manejar el resultado de una sentencia SQL que devuelva un conjunto de datos. La primera basada en tablas hash y la segunda en array.

Ya se puede usar Harbour Data Objects HDO para SQLite.

Voy a necesitar varios betatester, si hay alguien interesado puede ponerse en contacto conmigo :-)

Saludos de vuestro vecino Manu Expósito
______________________________________________________________________________

Sevilla - Andalucía
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Re: HDO acceso a bases de datos SQLite - Betatesters
Posted: Tue Mar 15, 2016 08:21 PM

Manú, Me interesaría probar tu clase. Hay algún repositorio donde pueda obtenerla.

Saludos

Posts: 990
Joined: Wed Oct 19, 2005 02:17 PM
Re: HDO acceso a bases de datos SQLite - Betatesters
Posted: Wed Mar 16, 2016 02:14 PM

Manu,

añádeme a la lista.

Tenemos que hablar.

Un abrazo,

Posts: 1078
Joined: Thu Sep 27, 2007 03:47 PM
Re: HDO acceso a bases de datos SQLite - Betatesters
Posted: Fri Mar 18, 2016 07:33 PM

Saludos

ME uno a tu lista.

Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
Posts: 1816
Joined: Wed Oct 26, 2005 02:49 PM
Re: HDO acceso a bases de datos SQLite - Betatesters
Posted: Fri Mar 18, 2016 08:51 PM

Que bien :)
Me uno :mrgreen:

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: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: HDO acceso a bases de datos SQLite - Betatesters
Posted: Tue Mar 22, 2016 08:23 PM

Proto tendreis noticias...

:D

______________________________________________________________________________

Sevilla - Andalucía

Continue the discussion