FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour crear tabla con el api de harbour
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
crear tabla con el api de harbour
Posted: Tue Feb 23, 2021 06:25 PM

Amigos, uso desde hace mucho tiempo la clase tmysql, ahora tengo la necesidad de tomar el resultado y pasarlo a una tabla, con codigo prg no es muy complicado, pero me propuesto hacerlo usando el api de ahrbour, osea usar el rdd api.
alguien me podria dar una idea de como hacerlo, he revisado el contrib especificamente el sqlmix, pero no logro entenderlo, :-(
un ejemplo bastaria.

mi idea es hace: crear el area de trabajo, y definir los campos en base a las columnas del cursor de mysql, y luego insertar las filas.

salu2

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: crear tabla con el api de harbour
Posted: Tue Feb 23, 2021 07:32 PM
Este codigo deseo pasarlo a C para optimizar velocidad!

Code (fw): Select all Collapse
METHOD ToDbf( cTableName, cAlias, cRdd, lShared, lReadOnly ) CLASS TMySQLQuery
聽 聽LOCAL lCreated := FALSE, nRecNo, nField

聽 聽DEFAULT cRdd TO "DBFNTX", cAlias TO cTableName, lShared TO FALSE, lReadOnly TO FALSE

聽 聽 聽 IF !File( cTableName )
聽 聽 聽 TRY
聽 聽 聽 聽 聽dbCreate( cTableName, ::Struct(), cRdd )
聽 聽 聽 聽 聽lCreated := TRUE
聽 聽 聽 CATCH
聽 聽 聽 聽 聽RETURN lCreated
聽 聽 聽 END
聽 聽ENDIF

聽 聽IF lCreated .and. !Select( cAlias ) > 0
聽 聽 聽 dbUseArea( TRUE, cRdd, cTableName, cAlias, lShared, lReadOnly )
聽 聽 聽 IF NetErr()
聽 聽 聽 聽 聽RETURN lCreated
聽 聽 聽 ENDIF
聽 聽ENDIF

聽 聽IF (cAlias)->( RecCount() ) > 0
聽 聽 聽 (cAlias)->( __Zap() )
聽 聽ENDIF

聽 聽nRecNo := ::RecNo()
   ::GoTop()
聽 聽WHILE !::Eof()
聽 聽 聽 (cAlias)->( dbAppend() )
聽 聽 聽 FOR nField := 1 TO ::FCount()
聽 聽 聽 聽 聽(cAlias)->( FieldPut( nField, ::FieldGet( nField ) ) )
聽 聽 聽 NEXT
聽 聽 聽 ::Skip()
聽 聽ENDDO

聽 聽IF nRecNo > 0
聽 聽 聽 ::GoTo( nRecNo )
聽 聽ENDIF

聽 聽(cAlias)->( dbCommit(), dbGoTop() )

RETURN lCreated
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: crear tabla con el api de harbour
Posted: Wed Feb 24, 2021 08:03 AM

Carlos,

Creo que la principal optimizaci贸n ser铆a el bucle while ... end

en lo dem谩s no creo que vaya a haber diferencia de velocidad

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Re: crear tabla con el api de harbour
Posted: Wed Feb 24, 2021 11:08 AM

Hola,

Lo que consume el tiempo es el bucle FOR, el copiado campo a campo. Recorrer UNO a UNO los campos a grabar.
Habria que inventar algo para que se hiciera un traspaso en bloque... algo parecido a usar __dbTrans

Mientras, usar Local nFCount:= ::FCount() en FOR nField:= 1 TO nFCount, y similares variables, puede ayudar un poco... muy poco... La clave es el bucle FOR y el copiado campo a campo...

Saludos

Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: crear tabla con el api de harbour
Posted: Wed Feb 24, 2021 12:41 PM
FWH's built-in MariaDB library has this method:
Code (fw): Select all Collapse
oCn:SaveToDBF( cSql, cDbfName, [lForUpdate = .f.] )


This method uses RDD API at the level of "C" language.
Without waiting to read the result of cSql, this method keeps writing to DBF as and when each line is read from the server and is very fast.

FWH's built-in library comes for free and we do not have to link any 3rd party libraries.

We may be using TMySql or Dolphin or ADO for our main program. We can still use the bulit-in library along side without disturbing the main application.

For example, we are using TMySql for our main application and oServer is the connection object in TMySql.
We can do:
Code (fw): Select all Collapse
oCn := maria_Connect( oServer ) // oServer is TMySql connection
oCn:SaveToDBF( cSql, cDbfName )
oCn:Close()
Regards



G. N. Rao.

Hyderabad, India
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: crear tabla con el api de harbour
Posted: Wed Feb 24, 2021 04:04 PM
Mira esta comparativa

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
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: crear tabla con el api de harbour
Posted: Wed Feb 24, 2021 04:58 PM

Sip, se que la clase de fwh es muy potente, al igual que dolphin, y ado, pero es que le tengo mucho cari帽o a tmysql (con ella aprendi mucho de harbour, c, apis, etc. es invaluable lo que he aprendido con ella.) la tengo bastante optimizada y modificada, aparte que tengo los fuentes. :-)

casualmente lo que indica Rao es lo que yo deseo, hacer, una metodo directo que realize la consulta y lo pase a dbf. para ellos debere pasar el metodo a tmysqlsrv en lugar de tmysqlqry .En sqlrdd existe una funcion igualmente y es muy rapido.
Usualmente inicio con algo simple que funciona y luego ya lo voy optimizando. como en este caso.
deseo aprender un poco del api de rdd. (seria como dos pajaron con un solo tiro)

Cristobal, ese programa de prueba de velocidad esta en fwh? si no es asi puedes compratirlo.

salu2
Gracias

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: crear tabla con el api de harbour
Posted: Wed Feb 24, 2021 07:08 PM

Ok Carlos, pero como bien sabes, en el uso de Mysql y estos temas no s贸lo hay que tener en cuenta la velocidad de la "herramienta" que usemos.

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

Continue the discussion