HDO una imagen vale más que...

xmanuel
Posts: 613
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

HDO una imagen vale más que...

Post by xmanuel »

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

Y un ejemplo en PRG

Code: Select all

/*******************************************************************************
 * 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
User avatar
ruben Dario
Posts: 986
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

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

Post by ruben Dario »

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
wmormar
Posts: 1050
Joined: Fri Oct 07, 2005 10:41 pm
Location: México
Contact:

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

Post by wmormar »

Amigo Manu,

Muy interesante.

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

méxico.sureste
xmanuel
Posts: 613
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

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

Post by xmanuel »

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


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
elvira
Posts: 462
Joined: Fri Jun 29, 2012 12:49 pm

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

Post by elvira »

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:
User avatar
Baxajaun
Posts: 853
Joined: Wed Oct 19, 2005 2:17 pm
Location: Gatika. Bizkaia

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

Post by Baxajaun »

Grande Manu !!!
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

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

Post by cnavarro »

Manu, ++++++1
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
xmanuel
Posts: 613
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

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

Post by xmanuel »

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
elvira
Posts: 462
Joined: Fri Jun 29, 2012 12:49 pm

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

Post by elvira »

Manuel,

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

:D
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

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

Post by cnavarro »

Creo que MySql, no?
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
xmanuel
Posts: 613
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

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

Post by xmanuel »

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: 613
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

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

Post by xmanuel »

Jaja ese era mi orden.
Pensaba que Felix querría Oracle (OCILIB) :-)
______________________________________________________________________________
Sevilla - Andalucía
Carlos Mora
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

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

Post by Carlos Mora »

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"
User avatar
Baxajaun
Posts: 853
Joined: Wed Oct 19, 2005 2:17 pm
Location: Gatika. Bizkaia

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

Post by Baxajaun »

Joder !!! Manu como me conoces ....
xmanuel
Posts: 613
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

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

Post by xmanuel »

:D
______________________________________________________________________________
Sevilla - Andalucía
Post Reply