Share via


TABLEUPDATE( ) (Función)

Confirma los cambios realizados en una fila o una tabla almacenada en búfer o en un cursor.

TABLEUPDATE([nRows [, lForce]] [, cTableAlias | nWorkArea]
[, cErrorArray])

Valores devueltos

Logical

Parámetros

  • nRows
    Especifica qué modificaciones se confirman de las realizadas en la tabla o en el cursor. Si el valor de nRows es 0 (o .F.) y está activado el almacenamiento de tablas o filas en búfer, sólo se confirmarán las modificaciones realizadas en el registro actual de la tabla o del cursor.

    Si el valor de nRows es 1 y está activado el almacenamiento de tablas en búfer, se confirmarán en la tabla o en el cursor todas las modificaciones realizadas en los registros. Si el valor de nRows es 1 (o .T.) y está activado el almacenamiento de filas en búfer, sólo se confirmarán las modificaciones realizadas en el registro actual de la tabla o cursor.

    Si el valor de nRows es 2, los cambios realizados en la tabla o en el cursor se confirmarán como en el caso en que nRows es 1. Sin embargo, no se producirá un error cuando no se pueda confirmar un cambio y Visual FoxPro continuará procesando el resto de los registros en la tabla o en el cursor. Si se incluye cErrorArray, cuando se produzca un error se creará una matriz con información acerca del mismo.

    El valor predeterminado para nRows es 0.

  • lForce
    Determina si se sobrescriben los cambios realizados en la tabla o el cursor por otro usuario de una red. Si lForce es verdadero (.T.), se sobrescribirán los cambios realizados en la tabla o el cursor por otro usuario de una red.

    Si lForce es falso (.F.), Visual FoxPro confirmará los cambios en la tabla o el cursor, desde el primer registro hasta el final de la tabla o el cursor. Si se encuentra un registro modificado por otro usuario de la red, Visual FoxPro generará un error.

    Si Visual FoxPro genera el error, podrá controlarlo a través de una rutina ON ERROR y la rutina ON ERROR podrá ejecutar TABLEUPDATE( ) con lForce establecido como verdadero (.T.) para confirmar cambios en el registro. O bien, si hay una transacción en curso, la rutina ON ERROR podrá administrar el error y, a continuación, ejecutar ROLLBACK para devolver la tabla o el cursor a su estado original.

    El valor predeterminado de lForce es falso (.F.).

  • cTableAlias
    Especifica el alias de la tabla o el cursor en el que se confirman los cambios. Si incluye un alias de una tabla o de un cursor, debe incluir el argumento lForce.

  • nWorkArea
    Especifica el área de trabajo de la tabla o el cursor en la que se confirman los cambios. Si incluye un área de trabajo, debe incluir el argumento lForce.

  • cErrorArray
    Especifica el nombre de una matriz creada cuando nRows es 2 y no se pueden confirmar los cambios en un registro. La matriz contiene una única columna en la que se encuentran los números de registro de los registros cuyos cambios no se pudieron confirmar. Si incluye el nombre de una matriz, debe incluir el alias de una tabla o de un cursor cTableAlias, o bien, el número de un área de trabajo nWorkArea.

    Nota   Si se produce un error distinto de un error de confirmación simple mientras se actualizan registros, el primer elemento de cErrorArray contendrá el valor –1; a continuación, puede usar AERROR( ) para determinar por qué no se pudieron confirmar los cambios.

Observaciones

TABLEUPDATE( ) devuelve verdadero (.T.) si se confirman los cambios realizados en todos los registros; de lo contrario, TABLEUPDATE( ) devuelve falso (.F.). El puntero de registro permanece en el registro en el que no han podido confirmarse los cambios. Puede ejecutar AERROR( ) para determinar por qué no se han podido confirmar los cambios.

TABLEUPDATE( ) no puede confirmar cambios realizados en una tabla o un cursor en los que no esté activado el almacenamiento de filas o tablas en búfer. Si ejecuta TABLEUPDATE( ) y no está activado el almacenamiento de filas o tablas en búfer, Visual FoxPro genera un mensaje de error. Sin embargo, TABLEUPDATE( ) puede seguir confirmando cambios en una tabla o un cursor que tenga reglas de validación. Utilice CURSORSETPROP( ) para activar o desactivar el almacenamiento de filas y tablas en búfer.

Los cambios se confirmarán en la tabla o el cursor abierto en el área de trabajo seleccionada actualmente si se ejecuta TABLEUPDATE( ) sin los argumentos opcionales cTableAlias o nWorkArea.

Si utiliza búferes de tablas y se actualizan varios registros, TABLEUPDATE( ) mueve el puntero del registro al último registro actualizado.

Nota   Llamar a TABLEUPDATE( ) para una tabla o vista local que no use campos clave genera una cláusula WHERE larga para buscar la fila actualizada. La cláusula WHERE admite 40 campos de forma predeterminada. Si obtiene el error 1812 - SQL: la instrucción es demasiado larga, debe usar un campo clave para actualizar o aumentar la complejidad de la cláusula WHERE con SYS(3055). Si usa SYS(3055), aumente su valor a 8 veces el número de campos en la tabla: = SYS(3055, 8 * MIN(40, FCOUNT( ))

Ejemplo

El ejemplo siguiente demuestra cómo puede utilizar TABLEUPDATE( ) para confirmar los cambios realizados a una tabla en búfer. Se crea una tabla llamada employees y se usa INSERT - SQL para insertar el valor "Smith" en el campo cLastName.

MULTILOCKS se establece en ON, un requisito para el almacenamiento de tablas en búfer. Se usa CURSORSETPROP( ) para establecer el modo de almacenamiento optimista de tablas en búfer (5).

Se muestra el valor original del campo cLastName (Smith) y se modifica el campo cLastName con REPLACE. Se muestra el nuevo valor del campo cLastName (Jones). Después se utiliza TABLEUPDATE( ) para confirmar los cambios realizados a la tabla (se podría utilizar TABLEREVERT( ) en su lugar para descartar los cambios). Por último se muestra el valor actualizado del campo cLastName (Jones).

CLOSE DATABASES
CREATE TABLE employee (cLastName C(10))
SET MULTILOCKS ON  && Must be on for table buffering
= CURSORSETPROP('Buffering', 5, 'employee' )  && Enable table buffering
INSERT INTO employee (cLastName) VALUES ('Smith')

CLEAR
? 'Original cLastName value: '
?? cLastName  && Displays current cLastName value (Smith)

REPLACE cLastName WITH 'Jones'
? 'New cLastName value: '
?? cLastName  && Displays new cLastName value (Jones)

= TABLEUPDATE(.T.)  && Commits changes
? 'Updated cLastName value: '
?? cLastName  && Displays current cLastName value (Jones)

Vea también

CURSORSETPROP( ) | CURVAL( ) | OLDVAL( ) | TABLEREVERT( )