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
Manu Exposito
Posts: 110
Joined: Wed Feb 08, 2006 4:41 pm

HDO acceso a bases de datos SQLite - Betatesters

Postby Manu Exposito » Tue Mar 15, 2016 9:22 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: Select all

/*
 * 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
User avatar
bingen
Posts: 397
Joined: Mon Jul 07, 2014 8:17 pm
Location: Bilbao
Contact:

Re: HDO acceso a bases de datos SQLite - Betatesters

Postby bingen » Wed Mar 16, 2016 9:27 am

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
Posts: 110
Joined: Wed Feb 08, 2006 4:41 pm

Re: HDO acceso a bases de datos SQLite - Betatesters

Postby Manu Exposito » Thu Mar 17, 2016 1:18 am

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
User avatar
bingen
Posts: 397
Joined: Mon Jul 07, 2014 8:17 pm
Location: Bilbao
Contact:

Re: HDO acceso a bases de datos SQLite - Betatesters

Postby bingen » Sat Mar 19, 2016 8:39 am

Gracias Manu esperamos noticias tuyas.

Salu2.
BiSoft Desarrollo de software profesional
http://www.bisoft.es
User avatar
Carlos Ortiz
Posts: 846
Joined: Wed Jul 01, 2009 5:44 pm
Location: Argentina - Córdoba
Contact:

Re: HDO acceso a bases de datos SQLite - Betatesters

Postby Carlos Ortiz » Thu Mar 24, 2016 7:17 am

Tienen pensado incluir algo para Postgres?

Saludos.
@dbfarma
www.dbfarma.com.ar
Manu Exposito
Posts: 110
Joined: Wed Feb 08, 2006 4:41 pm

Re: HDO acceso a bases de datos SQLite - Betatesters

Postby Manu Exposito » Wed Mar 30, 2016 7:16 pm

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 :)
User avatar
Carlos Ortiz
Posts: 846
Joined: Wed Jul 01, 2009 5:44 pm
Location: Argentina - Córdoba
Contact:

Re: HDO acceso a bases de datos SQLite - Betatesters

Postby Carlos Ortiz » Sat Apr 02, 2016 7:31 am

Gracias Manu estaremos atentos!
@dbfarma
www.dbfarma.com.ar

Return to “Spanish”