HDO. Fuente de la clase que gestiona las RDL...

User avatar
Willi Quintana
Posts: 859
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú
Contact:

Re: HDO. Fuente de la clase que gestiona las RDL...

Post by Willi Quintana »

Hola xManuel,
Me interesa la nueva clase y unos requerimientos adicionales... (tu email personal??)
El tema de las fuentes y costos seria de manifestarlo..
Salu2
Willi
xmanuel
Posts: 613
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

Re: HDO. Fuente de la clase que gestiona las RDL...

Post by xmanuel »

:D :D :D :D
Tienes razón Lucas, al final no he dicho nada de lo que importa, que es si voy a pedir algo por ese trabajo o no... :mrgreen:
Aunque no lo creas no lo tengo decidido.
Posiblemente sí que cobre algo, pero poco :oops: y en ese cobro irá el mantenimiento y el soporte en el foro de HDO. Garanrizo que esa pequeña donación servirá para mejorar el proyecto. Y por ejemplo crear una RDD que funcione con HDO y por tanto con todas las RDL y sea lo más compatible posible con las DBF.
Con la experiencia que me ha dado Eagle1 intentaré que el soporte y el manteniento sean mejor.
De cuelquier modo pondré la LIB para que la podais probar a fondo. Si hay interés general continuaré con el proyecto y crearé nuevas utilidades que mejoren el uso de HDO.
Haré un ABM en FiveWin con varias tablas para que sirva de ejmplo de uso.
Seguro que los Fuentes de HDO hechos en lenguaje C irán incluidos. Y para aquellos que decidais adquirirla les haré un regalito que será TDbfPRO hecha también hecha completamente en lenguaje C.

Bueno, sigan atentos a la pantalla...

PD: Willi, antes de nada me gustaría que la probaras y la compares con otras LIB, pronto la pondré en el foro de HDO. Y si finalmente decides usarla para tus proyectos hablamos, pero no será superior a 50 euros.
Yo soy Manu Expósito, creo que tienes mi correo...
______________________________________________________________________________
Sevilla - Andalucía
User avatar
lucasdebeltran
Posts: 1303
Joined: Tue Jul 21, 2009 8:12 am
Contact:

Re: HDO. Fuente de la clase que gestiona las RDL...

Post by lucasdebeltran »

Hola Manuel,

Lo del RDD sería muy útil. Yo colaboré con Antonio en ADORDD, que sí funciona como los DBFS.

Aquí tienes el código fuente:

https://github.com/AHFERREIRA/adordd/bl ... adordd.prg

El léeme, en Inglés:

https://github.com/AHFERREIRA/adordd/bl ... README.pdf

Yo hice uno en castellano pero no he tenido tiempo de actualizarlo.

Y un ejemplito:

Code: Select all

//2015 AHF - Antonio H. Ferreira <disal.antonio.ferreira@gmail.com>
//check 01_readme.pdf before using adordd
//any application should work by setting these SETS and
//uploading tables

//ATTENTION BESIDES ACCESS ADORDD DOESNT CREATE THE DATABASE

#include "adordd.ch"
#ifndef __XHARBOUR__
#include "hbcompat.ch"  //27.10.15 jose quintas advise
#endif

 FUNCTION Main()
 LOCAL cSql :=""

    RddRegister("ADORDD",1)
    RddSetDefault("ADORDD")

    //index related sets
    SET ADODBF TABLES INDEX LIST TO {  {"TABLE1",{"FIRST","FIRST"} }, {"TABLE2" ,{"CODID","CODID"}} }

    //if engine does not support logical fields indicate tehm here
    //SET ADO TABLES LOGICAL FIELDS LIST TO  { { "TABLE1", { "SOMEFIELD" } }}

    // IF ENGINE DOES NTO SUPPORT PRECCISE INDICATION OF DECIMALS LIKNE MONEY, ETC PUT THEM HERE
    //SET ADO TABLES DECIMAL FIELDS LIST TO  { { "TABLE1", { "SOMEFIELD",4,"ANOTHERFILED", 6 } }}

    // defining numeric field len used in index expressions WITHOUT PRECISE LEN NOTATION IN SQL TABEL
    //SET ADODBF INDEX LIST FIELDTYPE NUMBER TO


    SET ADO TEMPORAY NAMES INDEX LIST TO {"TMP","TEMP"}

    //these should be considered as UDF as they must either be evaluated in clipper way or
    //change the value of the uderlying data
    SET ADO INDEX UDFS TO {"IF","&","SUBSTR","=="}

    //field recno and deleted related sets
    SET ADO DEFAULT RECNO FIELD TO "HBRECNO"

    //only needed for tables with diferent from the default
    //SET ADO FIELDRECNO TABLES LIST TO {{"TABLE1","????"},{"TABLE2","????"}}
    SET ADO DEFAULT DELETED FIELD TO "HBDELETE"

    //only needed for tables with diferent from the default
    //SET ADO FIELDDELETED TABLES LIST TO {{"TABLE1","?????"},{"TABLE2","???"} }

    //LOCK RELATED SETS
    //CONTROL LOCKING IN ADORDD FOR BOTH TABLE AND RECORD DONT PUT FINAL "\"
    //uncomenet a place folder if lock set on
    //SET ADO LOCK CONTROL SHAREPATH TO  "C:\TEMP" RDD TO "DBFCDX"

    SET ADO FORCE LOCK OFF

    //TABLE NAMES RELATED SETS
    //table names with or without path ex. cpath_tablename or tbalename
    //tables must be created or imported with the same set
    SET ADO TABLENAME WITH PATH OFF
    //if this set is on we need a path
    //SET PATH TO "C:\WHATEVER"

    //SET ADO ROOT PATH TO "actual path" INSTEAD OF "uploaded path"

    //COnNECTION RELATED SETS
    //need to include complete path
    SET ADO DEFAULT DATABASE TO "D:\WHATEVER\TESTADORDD.MDB" SERVER TO "ACCESS" ENGINE TO "ACCESS" USER TO "" PASSWORD TO ""

    // FOR BIG TABLES TRY DIFERENT OPTIONS
    SET ADO CACHESIZE TO 50 ASYNC ON ASYNCNOWAIT ON

    //TABLES PRE OPEN WITH RECORDS >= DURING APP INITIALIZATION TO BE VERY FAST DURING RUNTIME
    // AND WITH VALUES OF MASK IN TABLENAME IF DEFINED
    SET ADO PRE OPEN THRESHOLD TO 500 MASK {"ENC"}

    SET AUTOPEN ON //might be OFF if you wish
    SET AUTORDER TO 1 // first index opened can be other

/*
IF YOU WANT TO TEST IT WITH YOUR OWN TABLES COMMENT THE CODE BELOW AND DO:
 hb_AdoUpload( "YOUR DRIVE WITH PATH FINISHING WITH \", "DBFCDX", "ACCESS OR MYSQL OR OTHER", oOverWrite .F. )
AND WRITE YOUR OWN TESTING ROUTINES
*/

//THIS IS AN IDEA IT HAS NOT BEEN TESTED BUT IT SHOULD WORK

   IF !hb_adoRddExistsTable( ,"table1")
      //need to include complete path defaults to SET ADO DEFAULT DATABA
      DbCreate("table1", ;
                                { { "CODID",   "C", 10, 0  },;
                                  { "FIRST",   "C", 30, 0  },;
                                  { "LAST",    "C", 30, 0  },;
                                  { "AGE",     "N",  8, 0  },;
                                  { "HBRECNO", "+", 11, 0  } ,;
                                  { "HBDELETE",  "L", 1,0  } }, "ADORDD" )
    ENDIF
    IF !hb_adoRddExistsTable( ,"table2")
      //need to include complete path defaults to SET ADO DEFAULT DATABA
      DbCreate( "table2", ;
                                { { "CODID",    "C", 10, 0 },;
                                  { "ADDRESS",  "C", 30, 0 },;
                                  { "PHONE",    "C", 30, 0 },;
                                  { "EMAIL",    "C", 100,0 },;
                                  { "HBRECNO",  "+", 11,0  },;
                                  { "HBDELETE",  "L", 1,0  }}, "ADORDD" )

    ENDIF

     SELE 0
     USE table1 ALIAS "TEST1"

     APPEND BLANK
     test1->First   := "HOMER si no Homer"
     test1->Last    := "Simpson"
     test1->Age     := 45
     test1->codid   := "0001"

     APPEND BLANK
     test1->First   := "Lara"
     test1->Last    := "Croft si no"
     test1->Age     := 32
     test1->codid   := "0002"
     test1->(dbcommit())

     SELE 0
     USE table2 ALIAS "TEST2"

     APPEND BLANK
     test2->address := "742 Evergreen Terrace"
     test2->phone   := "01 2920002"
     test2->email   := "homer@homersimpson.com"
     test2->codid   := "0001"

     APPEND BLANK
     test2->address := "Raymond Street"
     test2->phone   := "0039 29933003"
     test2->email   := "lara@laracroft.com"
     test2->codid   := "0002"
     test2->(dbcommit())

     CLOSE ALL


   SELE 0
   USE table1 ALIAS "TEST1"
   SELE 0
   USE table2 ALIAS "TEST2"

   //LOCKING TRIAL
   GOTO 1

   IF DBRLOCK(1)
      MSGINFO("TABLE 2 RECORD 1 LOCKED! START ANOTHER "+;
              "INSTANCE OF APP BEFORE CLOSING THIS MESSAGE"+;
              " CHECK LOCK!")
      UNLOCK

   ELSE
      MSGINFO("TABLE 2 COULD NOT LOCK RECORD 1")

   ENDIF

   GO TOP

   SELE TEST1
   GO TOP
   MSGINFO("BROWSE DEFAULT ORDER TABLE1")
   Browse()

   SELE TEST2
   GO TOP
   MSGINFO("BROWSE DEFAULT ORDER TABLE2")
   Browse()

   SELE TEST1
   SET RELATION TO CODID INTO TEST2
   MSGINFO("SET RELATION TO CODID FROM TABLE1 TO TABLE2")
   GO TOP
   DO WHILE !EOF()
      MSGINFO("Name "+TEST1->FIRST+" Address "+TEST2->ADDRESS)
      DBSKIP()
   ENDDO

   MSGINFO("BROWSE TABLE1")
   BROWSE()

   MSGINFO("CHANGE ORDER CREATE INDEX ON LAST TABLE1")
   INDEX ON LAST TO TMP
   SET INDEX TO TMP

   BROWSE()

   cSql := "CREATE VIEW CONTACTS AS SELECT TABLE1.FIRST, TABLE1.LAST,"+;
           "TABLE1.AGE, TABLE2.ADDRESS, TABLE2.EMAIL, TABLE1.HBRECNO, TABLE1.HBDELETE "+;
           "FROM TABLE1 LEFT OUTER JOIN TABLE2 ON TABLE1.CODID = TABLE2.CODID"
   MSGINFO("RUNING SQL "+cSql)

   TRY
      hb_GetAdoConnection():EXECUTE(cSql)
   CATCH
      ADOSHOWERROR( hb_GetAdoConnection())
   END

   SELE 0
   USE CONTACTS
   MSGINFO("BROWSING VIEW CONTACTS")
   BROWSE()
   INDEX ON ADDRESS TO TMP2
   SET INDEX TO TMP2
   MSGINFO("INDEXED BY ADRESS")
   BROWSE()

   //WORKING DIRECTLY WITH RECORDSET IN ANOTHER AREA
   MSGINFO("GET RECORDSET FOR TABLE TEST1 "+STR(SELECT("TEST1")) )

   oRs := hb_adoRddGetRecordSet(SELECT("TEST1"))

   oRs:close()
   aa := "SELECT * FROM "+hb_adoRddGetTableName( SELECT("TEST1") )+ " WHERE FIRST = 'Lara'"

   MSGINFO("NEW SELECT FOR RECORDSET TEST1 "+AA)
   oRs:open(aa,hb_adoRddGetConnection(SELECT("TEST1")))

   MSGINFO("CURRENT WORKAREA "+ALIAS())

   MSGINFO("BROWSE RECORDSET ALIAS TEST1")
   TEST1->(BROWSE())

   MSGINFO("DOES TABLE1 EXISTS ON DB ?"+CVALTOCHAR(hb_adoRddExistsTable( ,"Table1") ))
   MSGINFO("DOES TABLE3 EXISTS ON DB ?"+CVALTOCHAR(hb_adoRddExistsTable( ,"Table3") ))
   DbCloseAll()

RETURN nil


 

Un saludo
Muchas gracias. Many thanks.

Un saludo, Best regards,

Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]

Implementando MSVC 2010, FWH64 y ADO.

Abandonando uso xHarbour y SQLRDD.
xmanuel
Posts: 613
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

Re: HDO. Fuente de la clase que gestiona las RDL...

Post by xmanuel »

Gracias Lucas, conozco el trabajo de Antonio de primera mano, hace unos meses nos vimos en Portugal en Sintra.
Él también tuvo la oportunidad de ver los inicios de HDO en directo :D
______________________________________________________________________________
Sevilla - Andalucía
Post Reply