Nuevo ejemplo de HDO con RDL de SQLite

Nuevo ejemplo de HDO con RDL de SQLite

Postby xmanuel » Wed Oct 05, 2016 3: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 :D
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 756
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Nuevo ejemplo de HDO con RDL de SQLite

Postby xmanuel » Thu Oct 06, 2016 3: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
xmanuel
 
Posts: 756
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Nuevo ejemplo de HDO con RDL de SQLite

Postby Compuin » Thu Oct 06, 2016 4: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 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1213
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Nuevo ejemplo de HDO con RDL de SQLite

Postby xmanuel » Thu Oct 06, 2016 5: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 :P , esta:
Code: Select all  Expand view
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: Select all  Expand view
   
#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...
:D
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 756
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Nuevo ejemplo de HDO con RDL de SQLite

Postby José Luis Sánchez » Fri Nov 18, 2016 6: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
User avatar
José Luis Sánchez
 
Posts: 539
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España

Re: Nuevo ejemplo de HDO con RDL de SQLite

Postby xmanuel » Fri Nov 18, 2016 9: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 :D :roll:
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 756
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 85 guests