HDO una imagen vale más que...

HDO una imagen vale más que...

Postby xmanuel » Mon May 04, 2015 8:33 pm

A ver si alguien adivina que es esto? :D
Image

Y un ejemplo en PRG
Code: Select all  Expand view

/*******************************************************************************
 * Proyecto: Harbour Data Objects hdo
 * Fichero: demo01.prg
 * Descripcion: Demo con el RDL SQLite
 * Autor: Manu Exposito
 * Fecha: 04/05/2015
 ******************************************************************************/


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

#include "hdo.ch"

//------------------------------------------------------------------------------
// Funcion principal

procedure main()

    local i := 0
    local oCur, aCur, e
/**/
    local oHdo
    local cCrea := "CREATE TABLE socio " + ;
                        "( clavesocio INTEGER PRIMARY KEY," + ;
                           "socio TEXT,"                    + ;
                           "direccion TEXT,"                + ;
                           "telefono TEXT,"                 + ;
                           "categoria TEXT );"

    local cIns :=   "INSERT INTO socio ( clavesocio, socio, direccion, telefono, categoria ) "      + ;
                             "VALUES (1, 'Paula', 'California, 34', '955667788', 'de primera' ); "  + ;
                    "INSERT INTO socio ( clavesocio, socio, direccion, telefono, categoria ) "      + ;
                             "VALUES (2, 'Manuel', 'Formentera, 44', '955127756', 'de segunda' ); " + ;
                    "INSERT INTO socio ( clavesocio, socio, direccion, telefono, categoria ) "      + ;
                             "VALUES (3, 'Carmen', 'Tinto, 33', '932667778', 'de quinta' ); "       + ;
                    "INSERT INTO socio ( clavesocio, socio, direccion, telefono, categoria ) "      + ;
                             "VALUES (4, 'Isabel', 'El Cano, 4', '923667745', 'de segunda' ); "     + ;
                    "INSERT INTO socio ( clavesocio, socio, direccion, telefono, categoria ) "      + ;
                             "VALUES (5, 'Adrian', 'Octavio Paz, 2', '955333788', 'de primera' ); " + ;
                    "INSERT INTO socio ( clavesocio, socio, direccion, telefono, categoria ) "      + ;
                             "VALUES (6, 'Lorenzo', 'Alvareda, 9', '955222288', 'de cuarta' ); "

    cls

    oHdo := THDo():new( "SQLITE" )

    muestra( oHdo:getObjDriver():listDrivers(), "Drivers" )

    // Todas las sentencias que se envian al servidor deberian ir envueltas
    // en un TRY - CATCH
    TRY
        oHdo:connect( "agenda.db" )

        msg( oHdo:getHost() + ";" + oHdo:getDbName() + ";" + ;
             oHdo:getUser() + ";" + oHdo:getPasswd() + ";" + ;
             oHdo:getDrvName(), "Datos conexion" )

        muestra( oHdo:driverInfo(), "Datos del driver" )

        TRY
            oHdo:exec( cCrea )
        CATCH  e
            muestra( e:SubSystem +";" + padl( e:SubCode, 4 ) + ";" + ;
                     e:Operation + ";" + e:Description, "Error desde Harbour" )
            muestra( oHdo:errorInfo(), "Error desde rdl:errorInfo()" )
        END

        TRY
            if oHdo:inTransaction()
                msg( "1 Esta en una trasaccion" )
            else
                msg( "1 No esta en una trasaccion" )
            endif
            oHdo:beginTransaction()
            if oHdo:inTransaction()
                msg( "2 Esta en una trasaccion" )
            else
                msg( "2 No esta en una trasaccion" )
            endif
            i := oHdo:exec( cIns )
            oHdo:commit()
        CATCH
            muestra( oHdo:errorInfo(), "Datos del error" )
            oHdo:rollBack()
        END

        msg( AllTrim( Str( i ) ) + " - " + AllTrim( Str( oHdo:lastInsertId() ) ) , "Columnas afectadas y rowid" )

        TRY
            oHdo:exec( "SELECT * FROM socio WHERE clavesocioX = 1;" )
            muestra( oHdo:errorInfo(), "Datos del error" )
        CATCH
            muestra( oHdo:errorInfo(), "Datos del error" )
        END

        msg( oHdo:escapeStr( "Manuel's kely \todo mi\o" ) )

    CATCH
        muestra( oHdo:errorInfo(), "Conexion" )
    FINALLY
        oHdo:disconnect()
    END

    msg( ";;;;ESTO ES TODO!!!;;;;;" )

return
 
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 756
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: HDO una imagen vale más que...

Postby ruben Dario » Mon May 04, 2015 11:49 pm

Es una clase en C para accesar base de datos SQLITE y creo que sirve para Paradox.

Interesante...
Last edited by ruben Dario on Wed May 06, 2015 5:22 pm, edited 1 time in total.
Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
User avatar
ruben Dario
 
Posts: 1061
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Re: HDO una imagen vale más que...

Postby wmormar » Tue May 05, 2015 6:04 am

Amigo Manu,

Muy interesante.

Podra ser usado solo desde [x]Harbour ?
William, Morales
Saludos

méxico.sureste
User avatar
wmormar
 
Posts: 1073
Joined: Fri Oct 07, 2005 10:41 pm
Location: México

Re: HDO una imagen vale más que...

Postby xmanuel » Tue May 05, 2015 4:33 pm

Es un sistema que he creado para hacer clases de harbour pero codificadas en lenguaje C, esto hace que nos saltemos la vm con lo que la velocidad mejora notablemente y sin renunciar las bondades del paradigma de la POO.

En principio uso la API del motor de objetos de harbour por lo que puede diferir de el de xharbour.

Los usuarios de TDbf pro ya lo conocen.

Ejemplo del constructor de la clase principal:
Code: Select all  Expand view


HB_METHOD( THDO_NEW )
{
    PHB_ITEM pSelf = hb_pSelf();

    if( pSelf )
    {
        HDOP hdo = (HDOP) hb_xgrab( sizeof( HDO ) );

        if( hdo )
        {
            hdo->sp_vMethods = dfGetMethod(); // Ojo: Carga los supermetodos

            if( SPHDO_INIT( hdo, hb_param( 2, HB_IT_OBJECT ) ) == HB_SUCCESS )
            {
                PHB_ITEM pDrvName = hb_param( 1, HB_IT_STRING );

                if( pDrvName )
                {
                    HB_SIZE uiLen = hb_itemGetCLen( pDrvName );
                    PHB_ITEM pName = hb_itemNew( NULL );
                    PFGETMETHOD pFGetMth;

                    hdo->szDrvName = ( char * ) hb_xgrab( uiLen + 1 );

                    hb_strncpyUpperTrim( hdo->szDrvName, hb_itemGetCPtr( pDrvName ), uiLen );

                    // Envio al objeto hbdriver
                    hb_itemPutC( pName, hdo->szDrvName );
                    hb_objSendMsg( hdo->pDriver, "getPFuncByName", 1, pName );
                    hb_itemRelease( pName );

                    // el resultado se obtiene desde la pila
                    pFGetMth = hb_itemGetPtr( hb_stackReturnItem() );

                    if( pFGetMth )
                    {
                        hdo->vMethods = pFGetMth();
                    }
                    else
                    {
                        hdo->szDrvName = (char * ) hb_xrealloc( hdo->szDrvName, 7 );
                        strcpy( hdo->szDrvName, "DEFSQL" );
                        hdo->vMethods = dfGetMethod();
                    }
                }
                else
                {
                    hdo->szDrvName = hb_strdup( "DEFSQL" );
                    hdo->vMethods = dfGetMethod();
                }

                hdo_inheritMethods( hdo->vMethods, hdo->sp_vMethods );
            }
        }
        // MUY IMPORTANTE: Asigna la estructura recien creada a la clase
        hb_arraySetPtr( pSelf, IVAR_HDO, hdo );
    }
    // Un constructor siempre devuelve SELF
    hb_itemReturnRelease( pSelf );
}

 

:D
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 756
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: HDO una imagen vale más que...

Postby elvira » Tue May 05, 2015 7:30 pm

Hola Manuel,

¿Tienes comparativas de rendimiento de usar clases directas en vez de ADO?.

En nuestro caso, lo que prima es la reutilización del código, de ahí que ADORDD nos parece una muy buena idea.

Pero reescribir una aplicación de 15 años es una locura :cry:
elvira
 
Posts: 515
Joined: Fri Jun 29, 2012 12:49 pm

Re: HDO una imagen vale más que...

Postby Baxajaun » Wed May 06, 2015 9:21 am

Grande Manu !!!
User avatar
Baxajaun
 
Posts: 961
Joined: Wed Oct 19, 2005 2:17 pm
Location: Gatika. Bizkaia

Re: HDO una imagen vale más que...

Postby cnavarro » Wed May 06, 2015 10:30 am

Manu, ++++++1
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: HDO una imagen vale más que...

Postby xmanuel » Wed May 06, 2015 2:20 pm

Cristobal y Felix, vosotros sois viejos amigos así que no sé si contaros... jeje

Elvira, en cuanto esté terminado el RDL (Replaceable Data Link, Enlace de Datos Reemplazable) de SQLite podemos hacer una prueba.
Haremos un programa identico para ADO y HDO...


PD: El primer RDL va a ser SQLite pero, cual quereis que sea el siguiente?
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 756
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: HDO una imagen vale más que...

Postby elvira » Wed May 06, 2015 2:45 pm

Manuel,

Muy agradecida. ¿Podría ser Access o MySQL?.

:D
elvira
 
Posts: 515
Joined: Fri Jun 29, 2012 12:49 pm

Re: HDO una imagen vale más que...

Postby cnavarro » Wed May 06, 2015 2:46 pm

Creo que MySql, no?
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: HDO una imagen vale más que...

Postby xmanuel » Wed May 06, 2015 2:51 pm

Elvira el problema de los viejos grandes proyectos es precisamente ese... que son viejos y grandes.
Mentener algo que se ha quedado viejo al final resulta costoso, mucho más que hacer algo nuevo.

Se debería empezar de una vez por todas a usar los patrones de arquitectura de software, que están super depurados por todos los programadores y que se basan en la experiencia de todos...
Por ejemplo el MVC (Modelo-Vista-Controlador) que separa los datos y la lógica de negocio de una aplicación (modelo) de la interfaz de usuario (vista) y el módulo encargado de gestionar los eventos y las comunicaciones (controlador).
Esto hubiera hecho que el cambio necesario para pasar de las obsoletas DBF (RDD) a SQL se tornara fácil ya que sólo habría que tocar una parte muy definida del PRG (afectaría al módulo del modelo).
O pasar del modo texto a FiveWin (afectaría al módulo de la vista)

Hay muchos patrones en los que inspirarnos para hacer nuestros programas:
Factoria, DAO o Adaptador por decir los que casi todo el mundo ha usado incluso sin saberlo...
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 756
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: HDO una imagen vale más que...

Postby xmanuel » Wed May 06, 2015 2:54 pm

Jaja ese era mi orden.
Pensaba que Felix querría Oracle (OCILIB) :-)
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 756
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: HDO una imagen vale más que...

Postby Carlos Mora » Wed May 06, 2015 3:24 pm

xmanuel wrote:Elvira el problema de los viejos grandes proyectos es precisamente ese... que son viejos y grandes.
Mentener algo que se ha quedado viejo al final resulta costoso, mucho más que hacer algo nuevo.

Se debería empezar de una vez por todas a usar los patrones de arquitectura de software, que están super depurados por todos los programadores y que se basan en la experiencia de todos...
Por ejemplo el MVC (Modelo-Vista-Controlador) que separa los datos y la lógica de negocio de una aplicación (modelo) de la interfaz de usuario (vista) y el módulo encargado de gestionar los eventos y las comunicaciones (controlador).
Esto hubiera hecho que el cambio necesario para pasar de las obsoletas DBF (RDD) a SQL se tornara fácil ya que sólo habría que tocar una parte muy definida del PRG (afectaría al módulo del modelo).
O pasar del modo texto a FiveWin (afectaría al módulo de la vista)

Hay muchos patrones en los que inspirarnos para hacer nuestros programas:
Factoria, DAO o Adaptador por decir los que casi todo el mundo ha usado incluso sin saberlo...

Amén!
El cambio es grande, pero el esfuerzo vale la pena. Los veteranos de guerra, entre los que me incluyo, hemos pasado de DOS a Windows, de Windows a Win32, pronto a Win64/RTL o sabediosqué...
y esto es en definitiva otro cambio más.
Last edited by Carlos Mora on Wed May 06, 2015 3:27 pm, edited 1 time in total.
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Carlos Mora
 
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Re: HDO una imagen vale más que...

Postby Baxajaun » Wed May 06, 2015 3:25 pm

Joder !!! Manu como me conoces ....
User avatar
Baxajaun
 
Posts: 961
Joined: Wed Oct 19, 2005 2:17 pm
Location: Gatika. Bizkaia

Re: HDO una imagen vale más que...

Postby xmanuel » Fri May 08, 2015 2:34 pm

:D
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 756
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 78 guests