Administrar actualizaciones mediante vistas
Puede usar la tecnología de administración de conflictos de actualización en las vistas de Visual FoxPro para administrar el acceso de múltiples usuarios a los datos. Las vistas controlan lo que se envía a las tablas base de la vista mediante la propiedad WhereType. Puede establecer esta propiedad para vistas locales y remotas. La propiedad WhereType proporciona cuatro configuraciones:
- DB_KEY
- DB_KEYANDUPDATABLE
- DB_KEYANDMODIFIED (la predeterminada)
- DB_KEYANDTIMESTAMP
Si elige una de estas cuatro configuraciones, puede controlar cómo genera Visual FoxPro la cláusula WHERE de la instrucción SQL Update enviada a las tablas base de la vista. Puede elegir la configuración que desee mediante la ficha Criterios de actualización del Diseñador de vistas o puede usar DBSETPROP( ) para establecer WhereType para una definición de vista. Para cambiar la configuración de WhereType para un cursor en la vista activa, utilice CURSORSETPROP( ).
Para… | Elija esta opción SQL WHERE... |
---|---|
Impedir la actualización si en la tabla de origen se ha modificado un campo clave | Sólo campos clave |
Impedir la actualización si en la tabla remota se ha modificado alguno de los campos marcados como actualizables | Campos clave y actualizables |
Impedir la actualización si los campos que modifique localmente se han modificado en la tabla de origen | Campos clave y modificados |
Impedir la actualización si la marca de hora del registro en la tabla remota ha cambiado desde la primera vez que lo recuperó (disponible únicamente si la tabla remota tiene una columna de marca de hora) | Clave y marca de hora |
Por ejemplo, suponga que tiene una vista remota sencilla basada en la tabla Customer que incluye siete campos: cust_id
, company
, phone
, fax
, contact
, title
y timestamp
. La clave principal de la vista es cust_id
.
Sólo ha establecido como actualizables dos campos: contact_name
y contact_title
. Desea que el usuario pueda cambiar el nombre de la persona de contacto de la empresa y su cargo desde la vista. Sin embargo, si cambian otros datos de la compañía, como su dirección, los cambios deben pasar a un coordinador que identificará el efecto de los cambios en la empresa, como si cambiara la región de ventas del cliente. Ahora que la vista se ha configurado para enviar actualizaciones, puede elegir WhereType según sus preferencias.
Ahora suponga que cambia el nombre del campo contact
para un cliente, pero no cambia el valor en el otro campo actualizable, title
. Según este ejemplo, la sección siguiente trata acerca de cómo afectará la configuración de WhereType a la cláusula WHERE que Visual FoxPro genera para enviar el nombre del nuevo contacto a las tablas base.
Comparar únicamente el campo clave
La actualización menos restrictiva usa la configuración DB_KEY. La cláusula WHERE utilizada para actualizar tablas remotas consta únicamente del campo de clave principal con la propiedad KeyField o KeyFieldList. A menos que se haya modificado o eliminado el campo de clave principal en la tabla base desde que se recuperó el registro, se inicia el proceso de actualización.
En el caso del ejemplo anterior, Visual FoxPro prepararía una instrucción de actualización con una cláusula WHERE que compara el valor del campo cust_id
con el del campo cust_id
en la fila de la tabla base:
WHERE OLDVAL(customer.cust_id) = CURVAL(customer_remote_view.cust_id)
Cuando la instrucción de actualización se envía a la tabla base, sólo se comprueba el campo clave.
El campo clave de la vista se compara con el campo correspondiente de la tabla base
Comparar los campos clave y los campos modificados en la vista
La configuración DB_KEYANDMODIFIED, que es la predeterminada, es ligeramente más restrictiva que DB_KEY. DB_KEYANDMODIFIED compara tan sólo el campo clave y los campos actualizables que se han modificado en la vista con sus campos correspondientes en la tabla base. Si modifica un campo en la vista, pero no es actualizable, los campos no se comparan con los datos de la tabla base.
La cláusula WHERE utilizada para actualizar tablas base consta de los campos principales especificados con la propiedad KeyFieldList y de todos los campos que se hayan modificado en la vista. En el caso del ejemplo anterior, Visual FoxPro preparará una instrucción de actualización que compare los valores del campo cust_id
, porque es el campo principal, y el campo contact
, porque se ha cambiado el nombre de la persona de contacto. Aunque sea actualizable, el campo title
no se incluye en la instrucción de actualización porque no se ha modificado.
Los campos clave y modificados de la vista se comparan con sus campos correspondientes de la tabla base
Comparar el campo clave y todos los campos actualizables
La configuración DB_KEYANDUPDATABLE compara el campo clave y todos los campos actualizables (independientemente de si se han modificado o no) de la vista con sus correspondientes en la tabla base. Si el campo es actualizable y no se ha modificado en la vista pero sí en la tabla base, se produce un error en la actualización.
La cláusula WHERE utilizada para actualizar tablas base consta de campos principales especificados con la propiedad KeyField o KeyFieldList y de todos los demás campos que son actualizables. En el caso del ejemplo, Visual FoxPro prepararía una instrucción de actualización que compare los valores de los campos cust_id
, contact
y title
con los mismos campos de la fila de la tabla base.
Todos los campos actualizables de la vista se comparan con sus correspondientes en la tabla base
Comparar la marca de hora de todos los campos de un registro de la tabla base
DB_KEYANDTIMESTAMP es el tipo de actualización más restrictivo y sólo está disponible si la tabla base tiene una columna de marca de hora. Visual FoxPro compara la marca de hora actual del registro de la tabla base con la marca de la hora en el momento en que los datos se incorporaron a la vista. Si se modifica un campo del registro de la tabla base, aunque no sea el campo que se pretende cambiar, o incluso un campo de la vista, se produce un error en la actualización.
En el caso del ejemplo, Visual FoxPro prepara una instrucción de actualización que compara los valores del campo cust_id
y el valor del campo timestamp
con los de los campos de la fila de la tabla base.
La marca de hora del registro de la vista se compara con la marca de hora del registro de la tabla base.
Para actualizar correctamente los datos mediante la configuración DB_KEYANDTIMESTAMP con una vista en la que haya múltiples tablas, debe incluir el campo de marca de hora en la vista para todas las tablas que sean actualizables. Por ejemplo, si tiene tres tablas en una vista y desea actualizar sólo dos y elige la configuración DB_KEYANDTIMESTAMP, debe bajar los campos de marca de hora de las dos tablas actualizables al conjunto de resultados. También puede usar valores lógicos en la propiedad CompareMemo para determinar si los campos memo se incluyen en la detección de conflictos.
Vea también
Administrar el rendimiento | Administrar conflictos | Programar para acceso compartido | Criterios de actualización | DBSETPROP( ) | CURSORSETPROP( )