Class to manager MYSQL for Harbour/xHarbour
Custom Search

martes, 20 de julio de 2010

Update

Mostrare 4 formas de actualizar una tabla, activando y descactivando los errores internos de dolphin y ver la repercucion en este proceso

I'll show 4 ways to do Update, setting ON/Off dolphin's internal errors

To turn ON/OFF internal error in tdolp.mak change USE_INTERNAL YES/NO

Download with Internal Error ON
Download with Internal Error OFF

1) Method Update
Util para parametrizar la actualizacion, dejando a Dolphin crear la sentencia / Useful to custom Update and let Dolphin build sentence

   aColumns = { "Married", "Age", "salary", "Notes" }

   aValues = { .f., 40, 10, oQry:Notes }
   cWhere = "notes='" + oQry:Notes + "'"


   oServer:Update( "clientes", aColumns, aValues, cWhere )

Internal Error ON

Internal Error OFF


2) Build Sentence

Util para parametrizar la actualizacion, constuyendo la sentencia  / Useful to custom Update  build sentence your self



            cQry = "UPDATE clientes SET "
            FOR EACH cField IN aColumns
#ifdef __XHARBOUR__
               n = HB_EnumIndex()
#else                      
               n = cField:__EnumIndex() 
#endif 
               cValue   = ClipValue2SQL( aValues[ n ] )
               cQry += cField + " = " + cValue + ","
            NEXT             
            //Delete last comma 
            cQry = SubStr( cQry, 1, Len( cQry ) - 1 ) 
            cQry += " WHERE " + cWhere
            oServer:SqlQuery( cQry )       
            EXIT 


Internal Error ON


Internal Error OFF


3) Method Save
Util para guardar la edicion de un registro especifico / Useful to save record in edition mode 

            oQry:married = .T.
            oQry:age = 30
            oQry:salary = 20
            oQry:Save()

Internal Error ON

Internal Error OFF

4) Sentence UPDATE
Crear la sentencia Update / Build Update sentence


            cQry = "update clientes set "
            cQry += "married = 0,"
            cQry += "age = 40,"
            cQry += "salary = 10"
            cQry += " where " + cWhere
            oServer:SqlQuery( cQry )


Internal Error ON


Internal Error OFF


2 comentarios:

  1. Daniel,

    Llama la atencion la 3 opcion que quizas sea la mas amigable, pero que en los test te demora mas del doble de tiempo...

    Muy bien, adelante...

    Saludos.
    Charly

    ResponderEliminar
  2. Charly, si pero todo depende de las necesidades de la seccion que estas trabajando en tu sistema.
    Imagina la siguiente situacion:
    Tienes un Browse con una lista de articulos y simplemente quieres cambiarla descripcion en uno de ellos, para eso tienes una rutina que abre un dialogo con todos los campos de la tabla articulos, administrados en una serie de GETs (oQry:Description, oQry:LowValue, oQry:MaxValue...), te ahorras lineas de codigo, depuraras mejor tu sistema, no hay complicaiones en crear el query, con solo hacer oQry:Save(), este se encarga de verificar que campos cambiaron para solo enviar esa informacion, si existe un id principal para contruir el WHERE de la sentencia UPDATE de lo contrario crea el WHERE usando todos los campos para evitar duplicar la data (como esta en el ejemplo 3 de este Post)
    Cuando se trata de un solo registro realmente el tiempo es insignificante o lo que tardes creando la sentencia update te llevaria a la misa tardanza, por eso reitero, depende de las necesidades del modulo, la idea es mostrar donde y como usar cada forma de hacer un UPDATE

    ResponderEliminar