Actualizar datos en una vista
Puede actualizar los datos en una vista del mismo modo que lo haría en una tabla. Con una vista también puede actualizar las tablas base de la vista. Las vistas se almacenan de forma predeterminada con un almacenamiento optimista de filas en búfer. Puede cambiarlo para que sea un almacenamiento de tablas en búfer; para obtener más información acerca del almacenamiento en búfer, vea Programar para acceso compartido.
Puede actualizar datos en una vista a través de la interfaz o mediante el lenguaje de programación. El primer paso para actualizar los datos de una vista consiste en hacer actualizable la vista. En la mayoría de los casos, los valores predeterminados de las propiedades preparan automáticamente la vista para que sea actualizable, pero las actualizaciones no se envían al origen de datos hasta que usted indique a Visual FoxPro que lo haga, estableciendo en On la propiedad SendUpdates.
Una vista utiliza cinco propiedades para controlar las actualizaciones. Estas propiedades se relacionan a continuación, junto con sus valores predeterminados:
Propiedades de actualización de vistas y sus valores predeterminados
View (Propiedad) | Valor predeterminado |
---|---|
Tablas | Incluye todas las tablas que tienen campos actualizables y al menos un campo clave principal. |
KeyField | Campos clave de la base de datos y claves principales y remotas de la tabla. |
UpdateName | Table_name.column_name para todos los campos. |
Updateable | Todos los campos excepto los campos de clave principal. |
SendUpdates | De forma predeterminada son los valores predeterminados de la sesión, que originalmente se establece en falso (.F.); si cambia el valor a verdadero (.T.), se convertirá en el valor predeterminado para todas las vistas creadas en la sesión. |
CompareMemo | El valor predeterminado es verdadero (.T.), lo cual significa que los campos memo se incluyen en la cláusula WHERE y se usan para detectar conflictos de actualización. |
Si bien las cinco propiedades son necesarias para actualizar datos, la propiedad SendUpdates actúa como “conmutador principal” que controla si se envían o no las actualizaciones. A medida que desarrolla su aplicación, puede desactivar la propiedad SendUpdates y configurar las demás propiedades para permitir actualizaciones de los campos que desee actualizar. Cuando vaya a probar su aplicación, podrá activar la propiedad SendUpdates para iniciar el flujo de actualizaciones.
En algunas situaciones más complejas, puede que los valores predeterminados de actualización no proporcionen actualizaciones para una vista que usted creó mediante programación. Para permitir las actualizaciones, examine el valor predeterminado de cada una de las propiedades de actualización y ajústelo según sea necesario. También puede especificar propiedades adicionales, tales como UpdateType, WhereType, etc., de acuerdo con sus preferencias. Para ver una lista completa de las propiedades de vista, consulte DBGETPROP( ).
Para hacer que una vista sea actualizable desde el Diseñador de vistas
- En el Diseñador de vistas, seleccione la ficha Criterios de actualización y compruebe la configuración predeterminada.
La configuración predeterminado de las vistas creadas con el Diseñador de vistas prepara normalmente la vista para que sea actualizable; sólo necesita activar la casilla de verificación "Enviar actualizaciones SQL" para activar las actualizaciones. Además puede modificar las tablas, los campos, la cláusula SQL WHERE y las opciones de actualización como desee.
Para hacer que una vista sea actualizable estableciendo las propiedades de actualización de la vista
- Examine el valor predeterminado actual con el comando DISPLAY DATABASE y modifique después las propiedades de la definición de vista como desee con la función DBSETPROP( ).
El ejemplo siguiente muestra los pasos que podría seguir para especificar las cinco propiedades de actualización de vista mediante programación:
Nota Las propiedades View predeterminadas pueden suministrar toda la información necesaria para actualizar la vista.
Establezca la propiedad Tables con al menos un nombre de tabla.
Por ejemplo, si tiene una vista basada en la tabla
customer
denominadacust_view
, puede establecer el nombre de la tabla con la siguiente función:DBSETPROP('cust_view','View','Tables','customer')
Sugerencia Si una tabla aparece como un calificador en la propiedad UpdateName pero no está incluida en la lista predeterminada de la propiedad Tables, quizá no tenga especificado un campo clave principal. Haga que la tabla sea actualizable, agregando a la lista de la propiedad KeyField el campo que considere que es un campo clave y, a continuación, agregue la tabla a la lista de la propiedad Tables.
Establezca la propiedad KeyField con uno o más nombres de campos locales de Visual FoxPro que, juntos, definan una clave única para la tabla de actualización.
Con el mismo ejemplo, podría hacer que
cust_id
fuese el campo clave mediante el código siguiente:DBSETPROP('cust_view.cust_id','Field','KeyField',.T.)
Precaución Asegúrese de que el campo o los campos clave que especifique definan una clave única tanto en la tabla base que desee actualizar como en la vista.
Asigne los campos de la vista a los campos de su tabla base con la propiedad UpdateName. Esta propiedad resulta especialmente útil cuando la vista está basada en una combinación de dos tablas con un nombre de campo común o cuando los campos tienen alias en la vista. Para actualizar la tabla base deseada, asigne el nombre del campo de la vista de Visual FoxPro al campo de la tabla base y al nombre de la tabla.
DBSETPROP('cust_view.cust_id','Field','UpdateName',; 'customer.cust_id')
Sugerencia Para evitar la creación de campos sinónimos en la vista, puede calificar los nombres de campo en la instrucción SQL que utilice para generar la vista. Después, utilice la propiedad UpdateName de la vista de Visual FoxPro para asignar cada campo calificado a la tabla base y al nombre de campo correspondientes.
Especifique el alcance de los campos que desea actualizar, utilizando la propiedad Updateable. Debe especificar solamente aquellos campos también especificados con la propiedad UpdateName.
DBSETPROP('cust_view.cust_id','Field','Updateable',; .T.)
Establezca la propiedad SendUpdates en el valor verdadero (.T.). Este es el conmutador principal que indica a Visual FoxPro que debe crear y enviar actualizaciones a cualquiera de las tablas y campos especificados como actualizables.
DBSETPROP('cust_view','View','SendUpdates',.T.)
Cuando utilice DBSETPROP( ) para establecer las propiedades de una vista antes de usarla, el valor se almacenará en la base de datos y se usará automáticamente siempre que active la vista. Cuando la vista está activa, puede utilizar CURSORSETPROP( ) para cambiar el valor de las propiedades de la vista activa. La configuración de las propiedades que establezca con CURSORSETPROP( ) para una vista activa no se guardará al cerrar la vista.
Vea también
Mostrar la estructura de una vista | Actualizar múltiples tablas en una vista | Crear consultas | DBGETPROP( ) | Diseñador de vistas | Actualizar datos