In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

HDO acceso a bases de datos SQLite - Betatesters

Foro público de Xailer en español
Responder
Manu Exposito
Mensajes: 116
Registrado: Mié Feb 08, 2006 4:41 pm

HDO acceso a bases de datos SQLite - Betatesters

Mensaje por Manu Exposito »

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:

Código: Seleccionar todo

/*
 * 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 :D

Saludos de vuestro vecino Manu Expósito
Avatar de Usuario
bingen
Mensajes: 565
Registrado: Lun Jul 07, 2014 8:17 pm
Ubicación: Bilbao
Contactar:

Re: HDO acceso a bases de datos SQLite - Betatesters

Mensaje por bingen »

Buenas Manu, cuanto tiempo....

Trabajamos exclusivamente con MySql/MariaDB y hace tiempo que desistimos de SQLite puesto que nuestras aplicaciones trabajan en entornos de muchos usuarios y bases de datos mas bien grandes.

Si tienes algo para MySql/MariaDB nos gustaría probarlo y evaluarlo.

Salu2.
BiSoft Desarrollo de software profesional
http://www.bisoft.es
Manu Exposito
Mensajes: 116
Registrado: Mié Feb 08, 2006 4:41 pm

Re: HDO acceso a bases de datos SQLite - Betatesters

Mensaje por Manu Exposito »

Jajaja si que hace tiempo...

Ya te aviso cuando tenga el RDL para MariaDB y MySQL.
La idea es que el mismo programa sin cambiar nada funcione con cualquier base de datos.
En mi proyecto entra hacer esa RDL en segundo lugar... :P
Avatar de Usuario
bingen
Mensajes: 565
Registrado: Lun Jul 07, 2014 8:17 pm
Ubicación: Bilbao
Contactar:

Re: HDO acceso a bases de datos SQLite - Betatesters

Mensaje por bingen »

Gracias Manu esperamos noticias tuyas.

Salu2.
BiSoft Desarrollo de software profesional
http://www.bisoft.es
Avatar de Usuario
Carlos Ortiz
Mensajes: 872
Registrado: Mié Jul 01, 2009 5:44 pm
Ubicación: Argentina - Córdoba
Contactar:

Re: HDO acceso a bases de datos SQLite - Betatesters

Mensaje por Carlos Ortiz »

Tienen pensado incluir algo para Postgres?

Saludos.
Manu Exposito
Mensajes: 116
Registrado: Mié Feb 08, 2006 4:41 pm

Re: HDO acceso a bases de datos SQLite - Betatesters

Mensaje por Manu Exposito »

Sí, así es.
El orden de creacion sera el siguiente:
1.- SQLite (Fase beta)
2.- MySQL/MariaDB
3.- Postgres
4.- Firebird
5.- ODBC
Y estas de pago y otras que los usuarios propongan:
6.- Oracle mediante OCI Lib
7.- MS Server mediante DB Lib y ODBC

Muchas gracias por tu interés Carlos :)
Avatar de Usuario
Carlos Ortiz
Mensajes: 872
Registrado: Mié Jul 01, 2009 5:44 pm
Ubicación: Argentina - Córdoba
Contactar:

Re: HDO acceso a bases de datos SQLite - Betatesters

Mensaje por Carlos Ortiz »

Gracias Manu estaremos atentos!
Responder