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 _ en base a las columnas del cursor de mysql, y luego insertar las filas.
salu2
crear tabla con el api de harbour
- carlos vargas
- Posts: 1421
- Joined: Tue Oct 11, 2005 5:01 pm
- Location: Nicaragua
crear tabla con el api de harbour
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
Carlos Vargas
Desde Managua, Nicaragua (CA)
- carlos vargas
- Posts: 1421
- Joined: Tue Oct 11, 2005 5:01 pm
- Location: Nicaragua
Re: crear tabla con el api de harbour
Este codigo deseo pasarlo a C para optimizar velocidad!
Code: Select all
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)
Carlos Vargas
Desde Managua, Nicaragua (CA)
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: crear tabla con el api de harbour
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
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
Re: crear tabla con el api de harbour
Hola,
Lo que consume el tiempo es el bucle FOR, el copiado campo a campo. Recorrer UNO a UNO _ 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
Lo que consume el tiempo es el bucle FOR, el copiado campo a campo. Recorrer UNO a UNO _ 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
- nageswaragunupudi
- Posts: 8017
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Contact:
Re: crear tabla con el api de harbour
FWH's built-in MariaDB library has this method:
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: Select all
oCn:SaveToDBF( cSql, cDbfName, [lForUpdate = .f.] )
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: Select all
oCn := maria_Connect( oServer ) // oServer is TMySql connection
oCn:SaveToDBF( cSql, cDbfName )
oCn:Close()
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
Re: crear tabla con el api de harbour
Mira esta comparativa
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.
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.
- carlos vargas
- Posts: 1421
- Joined: Tue Oct 11, 2005 5:01 pm
- Location: Nicaragua
Re: crear tabla con el api de harbour
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
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)
Carlos Vargas
Desde Managua, Nicaragua (CA)
Re: crear tabla con el api de harbour
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.
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.
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.