FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Nuevo ejemplo de HDO con RDL de SQLite
Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Nuevo ejemplo de HDO con RDL de SQLite
Posted: Wed Oct 05, 2016 03:17 PM
Aqui https://xa.yimg.com/df/HDO_Harbour/demo00_hdo.rar?token=IEq-M2jkNkiyDR0j7Myy3U6AGtMC7md3NCtS41Ad5WuHKHgssigZ4YWjMmTHFYWib4F4t4glpMPusAcWaU_eIVjLxG3ysVoep0S68Xw-658D0gPU9HA&type=download podeis descargar un ejemplo de HDO.
Ejemplo de HDO para migrar TEST.DBF de la carpeta de ejemplos de Harbour a SQLite.
Usa las técnicas de preparación de sentencias en el lado del servidor y transacciones. Esto hace que el proceso vaya muy rápido y evita la inyección de código sql (https://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL)

Para que funciones copiar test.dbf donde se vaya a ejecutar la demo...

Podéis comprobar la rapidez de la migración :-)
______________________________________________________________________________

Sevilla - Andalucía
Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: Nuevo ejemplo de HDO con RDL de SQLite
Posted: Thu Oct 06, 2016 03:55 PM
Hay que estar dado de alta en los grupos de yahoo...

El enlace de la carpeta es este: https://es.groups.yahoo.com/neo/groups/HDO_Harbour/files/Ejemplos/
______________________________________________________________________________

Sevilla - Andalucía
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Nuevo ejemplo de HDO con RDL de SQLite
Posted: Thu Oct 06, 2016 04:44 PM

Hola,

Si ya FWH trae MySQL nativo ademas de la clase Tdolphin, cual es el valor agregado o beneficio de tu clase?

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: Nuevo ejemplo de HDO con RDL de SQLite
Posted: Thu Oct 06, 2016 05:17 PM
En primer lugar no es una clase para acceder sólo a MySQL si no que además lo podrás hacer también a SQLite, Postgres, Firebird, Oracle y a otras muchas usando ODBC.
Todas ellas accediendo de manera nativa.
El 100% de las clases están hechas en lenguaje C por lo que son muy rápidas y robustas evitando la MV de Harbour.
Tienes la posibilidad usar sentencias preparadas en el lado del servidor por lo que el tráfico en la red es mínimo y, el que hay, será binario, imposible de inyectar código malicioso.
Además te garantizo que si usas SQL estándar podrás tener un mismo programa preparado para todas las bases de datos sólo cambiando una línea :-) , esta:
Code (fw): Select all Collapse
oDb := THDO():new( "sqlite" )

Cambiando "sqlite" por "mysql" tendrás un programa compatible con uno u otro gestor de bases de datos.
Y sobre todo he cuidado la velocidad, ¿has probado el programa que he puesto? los 500 registros los pasa instantáneamente el tiempo de retardo es el de repintado del contador!!!

Por si no te lo has descargado, este es el código para que veas lo fácil que es usarlo:
Code (fw): Select all Collapse
    
#include "hdo.ch"

//------------------------------------------------------------------------------
// Programa principal

procedure main()

    local oDb, e
    local cCreaTabla := ;
       "CREATE TABLE test ( "       + ;
       "idreg INTEGER PRIMARY KEY," + ;
       "first       TEXT,"          + ;
       "last        TEXT,"          + ;
       "street      TEXT,"          + ;
       "city        TEXT,"          + ;
       "state       TEXT,"          + ;
       "zip         TEXT,"          + ;
       "hiredate    TEXT,"          + ;
       "married     INTEGER,"       + ;
       "age         INTEGER,"       + ;
       "salary      REAL,"          + ;
       "notes       TEXT );"

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

    if oDb:connect( "demo.db" )

        msg( "demo.db abierta" )

        try
            oDb:exec( cCreaTabla )
            msg( "Traspaso de datos..." )
            traspasa( oDb )
        catch  e
            eval( errorblock(), e )
        end

    endif

    oDb:disconnect()
    msg( "demo.db cerrada" )

return

//------------------------------------------------------------------------------
// Usa sentencias preparadas en el lado del servidor y transacciones.

procedure traspasa( oDb )

    local n := 0
    local oInsert
    local first, last, street, city, state, zip, hiredate, married, age, salary, notes
    local cSentencia := "INSERT INTO test ( first, last, street, city, state, zip, " + ;
                            "hiredate, married, age, salary, notes ) "  + ;
                            "VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? );"

    if file( "test.dbf" )
        
        use test new
        
        oInsert := oDb:prepare( cSentencia ) // Crea el objeto y prepara la sentencia

        // Vincula las variables harbour con cada una de las "?" por su posicion
        oInsert:bindParam(  1, @first  )
        oInsert:bindParam(  2, @last  )
        oInsert:bindParam(  3, @street )
        oInsert:bindParam(  4, @city )
        oInsert:bindParam(  5, @state )
        oInsert:bindParam(  6, @zip )
        oInsert:bindParam(  7, @hiredate )
        oInsert:bindParam(  8, @married )
        oInsert:bindParam(  9, @age )
        oInsert:bindParam( 10, @salary )
        oInsert:bindParam( 11, @notes )
    
        oDb:beginTransaction()
    
        while test->( !eof() )
            first    := test->first
            last     := test->last
            street   := test->street
            city     := test->city
            state    := test->state
            zip      := test->zip
            hiredate := dtos( test->hiredate )
            married  := if( test->married, 1, 0 )
            age      := test->age
            salary   := test->salary
            notes    := test->notes
        
            oInsert:execute()
        
            @ 10, 10 say str( ++n )
        
            test->( dbskip( 1 ) )
        end
    
        oDb:commit()    
        oInsert:free()
    else
        msg( "Fichero no encontrado -> test.dbf" )
    endif

return

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


Cualquier duda estoy aquí para responder...
:-)
______________________________________________________________________________

Sevilla - Andalucía
Posts: 564
Joined: Thu Oct 13, 2005 09:23 AM
Re: Nuevo ejemplo de HDO con RDL de SQLite
Posted: Fri Nov 18, 2016 06:31 PM

Manu,
tengo mucho interes en probar HDO. Escribeme a joseluis.sncz@yahoo.es por favor y dime la manera de darme de alta en tu grupo de yahoo.

Saludos,
José Luis

Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: Nuevo ejemplo de HDO con RDL de SQLite
Posted: Fri Nov 18, 2016 09:14 PM
José Luis cuanto me alegra saber de ti... somos unos descastados!!!

Ahora mismo sólo está la RDL para SQLite y créeme que va como un tiro. Puedes comparar con cualquier cosa que se haya publicado. Toda la jerarquía de clases está hecha en lenguaje C ni siquiera usa la máquina virtual de harbour.
Quiero meter una nueva clase que llamaré RowSet (jaja qué imaginación!!!) para usar los cursores que genere el propio cliente de la base de datos como por ejemplo MySQL. Habrá otros clientes como SQLite que los fabricaré con arrays de lenguaje C...

Voy a ir poniendo un ejemplo cada semana en el foro yahoo de HDO https://es.groups.yahoo.com/neo/groups/HDO_Harbour/info

Te puedes dar de alta en el foro y yo te lo apruebo rápido :-) :-)
______________________________________________________________________________

Sevilla - Andalucía

Continue the discussion