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
Daniel,
ResponderEliminarLlama 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
Charly, si pero todo depende de las necesidades de la seccion que estas trabajando en tu sistema.
ResponderEliminarImagina 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