Actualizar datos en MySql con TDolphin

Actualizar datos en MySql con TDolphin

Postby acuellar » Wed Sep 17, 2014 6: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: Select all  Expand view

 
 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: Select all  Expand view

    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.
User avatar
acuellar
 
Posts: 1594
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Actualizar datos en MySql con TDolphin

Postby joseluisysturiz » Wed Sep 17, 2014 6: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!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: Actualizar datos en MySql con TDolphin

Postby Willi Quintana » Wed Sep 17, 2014 7: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: Select all  Expand view

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
 
User avatar
Willi Quintana
 
Posts: 1003
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: Actualizar datos en MySql con TDolphin

Postby acuellar » Wed Sep 17, 2014 8:59 pm

Gracias amigos por las respuestas

Con UPDATE lo he logrado agregando
Code: Select all  Expand view

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.
User avatar
acuellar
 
Posts: 1594
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Actualizar datos en MySql con TDolphin

Postby joseluisysturiz » Thu Sep 18, 2014 1:48 am

acuellar wrote:Gracias amigos por las respuestas

Con UPDATE lo he logrado agregando
Code: Select all  Expand view

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... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: Actualizar datos en MySql con TDolphin

Postby Biel EA6DD » Thu Sep 18, 2014 6:58 am

Code: Select all  Expand view

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/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Re: Actualizar datos en MySql con TDolphin

Postby pablovidal » Thu Sep 18, 2014 11:12 am

Code: Select all  Expand view
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
------------------------------------------------------
*/
User avatar
pablovidal
 
Posts: 401
Joined: Thu Oct 06, 2005 10:15 pm
Location: Republica Dominicana

Re: Actualizar datos en MySql con TDolphin

Postby acuellar » Thu Sep 18, 2014 3:30 pm

Gracias distinguidos

Con la recomendación de Biel funciona bien rápido.

Gracias una vez más.

Saludos,

Adhemar
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1594
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 29 guests