FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Actualizar datos en MySql con TDolphin
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Actualizar datos en MySql con TDolphin
Posted: Wed Sep 17, 2014 06:07 PM
Amigos

Necesito actualizar los datos de una tabla de 1300 registros y mucho tarda, antes lo hacia con REPLACE con DBF y es r谩pido
Ahora lo hago asi:
Code (fw): Select all Collapse
  
 oDATA:=oServer:Query( "SELECT * FROM DATPER ORDER BY CODIGO FOR UPDATE")

   Do While !oDATA:Eof()
      Vacacion() //Obtengo los valores
      nPend:=nTiene-nTomodas
       oDATA:TIENE:=nTiene;oDATA:TOMADAS:=nTomadas;oDATA:PEND:=nPend
       oDATA:Save()
      oDATA:Skip()
   Enddo


He encontrado un ejemplo de Daniel usando UPDATE pero le pone el mismo valor a todos los registros y tambi茅n tarda, lo hago asi
Code (fw): Select all Collapse
    oDATA:=oServer:Query( "SELECT * FROM DATPER ORDER BY CODIGO FOR UPDATE")

  Do While !oDATA:Eof()
      Vacacion() //Obtengo los valores
      nPend:=nTiene-nTomodas
       cQry:="UPDATE datper SET TIENE = " + ClipValue2SQL(nTiene) + "TOMADAS = " + ClipValue2SQL(nTomadas) + " PEND = " + ClipValue2SQL(nPend) 
       oDATA:oServer:SqlQuery( cQry )
       oDATA:LoadQuery()
       oDATA:Skip()
   Enddo


Quiz谩s hay otra manera de hacer la actualizaci贸n m谩s r谩pida.

Gracias por la ayuda.

Saludos,

Adhemar
Saludos,



Adhemar C.
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: Actualizar datos en MySql con TDolphin
Posted: Wed Sep 17, 2014 06:32 PM

Acuellar,la forma de usar UPDATE para que no te coloque todos los registros con el mismo valor es usarlo conjuntamente con la condicion WHERE, ya que el UPDATE recorre toda la tabla sino la condicionas, fue mi primera leccion con mysql, cualquier duda estamos a la orden, saludos... :shock:

Dios no est谩 muerto...



Gracias a mi Dios ante todo!
Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Re: Actualizar datos en MySql con TDolphin
Posted: Wed Sep 17, 2014 07:35 PM
Prueba asi:, EL UPDATE se debe condicionar, de otro modo se barre toda la tabla, ahora depende de como este estructurado tu tabla

Code (fw): Select all Collapse
Do While !oDATA:Eof()
      Vacacion() //Obtengo los valores
      cCodigo := oData:AlgunCodigo
      nPend:=nTiene-nTomodas
       cQry:="UPDATE datper SET TIENE = " + ClipValue2SQL(nTiene) + "TOMADAS = " + ClipValue2SQL(nTomadas) + " PEND = " + ClipValue2SQL(nPend)  +  " WHERE c贸digo = '" + cCodigo + "'"
       oDATA:oServer:SqlQuery( cQry )
       oDATA:LoadQuery()
       oDATA:Skip()
   Enddo
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Actualizar datos en MySql con TDolphin
Posted: Wed Sep 17, 2014 08:59 PM
Gracias amigos por las respuestas

Con UPDATE lo he logrado agregando
Code (fw): Select all Collapse
nRowID:=oDATA:=sql_rowid
" WHERE sql_rowid = " + ClipValue2SQL(nRowID)


Pero no hay mucha diferencia en velocidad y se tiene que escribir mucho m谩s c贸digo.

Saludos,

Adhemar
Saludos,



Adhemar C.
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: Actualizar datos en MySql con TDolphin
Posted: Thu Sep 18, 2014 01:48 AM
acuellar wrote:Gracias amigos por las respuestas

Con UPDATE lo he logrado agregando
Code (fw): Select all Collapse
nRowID:=oDATA:=sql_rowid
" WHERE sql_rowid = " + ClipValue2SQL(nRowID)


Pero no hay mucha diferencia en velocidad y se tiene que escribir mucho m谩s c贸digo.

Saludos,

Adhemar

Como dicen por alli, esto es MYSQL, hay que olvidar la mentalidad de DBF y nada es perfecto, pero aun sigo creyendo que es mucho mas rapido y seguro que usar DBF, intenta depurar tu query, que no estes cargando y relacionando tablas innecesariamente, a mi me trabaja el UPDATE/WHERE a buena velocidad...saludos... :-)
Dios no est谩 muerto...



Gracias a mi Dios ante todo!
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Re: Actualizar datos en MySql con TDolphin
Posted: Thu Sep 18, 2014 06:58 AM
Code (fw): Select all Collapse
oDATA:=oServer:Query( "SELECT * FROM DATPER ORDER BY CODIGO FOR UPDATE")
oData:oServer:BeginTransaction() ///<----
聽 Do While !oDATA:Eof()
聽 聽 聽 Vacacion() //Obtengo los valores
聽 聽 聽 nPend:=nTiene-nTomodas
聽 聽 聽 聽cQry:="UPDATE datper SET TIENE = " + ClipValue2SQL(nTiene) + "TOMADAS = " + ClipValue2SQL(nTomadas) + " PEND = " + ClipValue2SQL(nPend) 
聽 聽 聽 聽oDATA:oServer:SqlQuery( cQry )
聽 聽 聽 // oDATA:LoadQuery() //Creo que no es necesario
聽 聽 聽 聽oDATA:Skip()
聽 聽Enddo
oData:oServer:CommitTransaction()//<----

En tu caso hacerlo con un update o directamente sobre oData, no creo que varie mucho, ya que el update afecta unicamente a un registro, y en el fondo eso mismo es lo que va a hacer la clase.
Prueba a quitar el loadQuery, y a帽adir transaccionabilidad si tu base de datos es InnoDB.
Saludos desde Mallorca
Biel Maim贸
http://bielsys.blogspot.com/
Posts: 401
Joined: Thu Oct 06, 2005 10:15 PM
Re: Actualizar datos en MySql con TDolphin
Posted: Thu Sep 18, 2014 11:12 AM
Code (fw): Select all Collapse
 oDATA:=oServer:Query( "SELECT * FROM DATPER ORDER BY CODIGO FOR UPDATE")

   Do While !oDATA:Eof()
      Vacacion() //Obtengo los valores // <<=== Muestra que hay aqui.. es otro Query ???
      nPend:=nTiene-nTomodas
       oDATA:TIENE:=nTiene;oDATA:TOMADAS:=nTomadas;oDATA:PEND:=nPend
       oDATA:Save()
      oDATA:Skip()
   Enddo
Saludos,



Pablo Alberto Vidal

/*

------------------------------------------------------

Harbour 3.2.0, Fivewin 17.02, BCC7

------------------------------------------------------

*/
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Actualizar datos en MySql con TDolphin
Posted: Thu Sep 18, 2014 03:30 PM

Gracias distinguidos

Con la recomendaci贸n de Biel funciona bien r谩pido.

Gracias una vez m谩s.

Saludos,

Adhemar

Saludos,



Adhemar C.

Continue the discussion