INSTITUTO SUPERIOR TECNOLÓGICO PRIVADO
“UCAYALI”
R.M. 0999-92-ED; 0311-93-ED
“UCAYALI”
R.M. 0999-92-ED; 0311-93-ED
Creación de vistas locales y remotas en FoxPro 8.0
Antes de hablar de cómo crear vistas en FoxPro 8.0, lo primero que tenemos que tener en cuenta es la creación de nuestra Base de Datos.
CREACIÓN DE LA BASE DE DATOS

Haz click en New Database
La ventana del Databases Designer aparecerá de esta

Puede ocupar el toolbar Database Designer para el control de la Base de Datos.
Descripción de los botones del toolbar:
Descripción de los botones del toolbar:
Crear una nueva tabla:
1. Click en el botón de Nueva tabla, aparecerá la ventana New Table
2. Se selecciona New Table, luego aparece la ventana de guardar el archivo, seleccione el directorio y el nombre de la tabla y luego presione el botón de Guardar.
La ventana de Table designer aparecerá en pantalla:
Definición del formato de entrada
Tipo de DatoEsta es la parte mas importante de la tabla, es aquí donde se define la estructura de datos que contendrá dicha tabla. El primer paso es definir los campos, tipos, tamaño, Formato y Reglas de validación en el fólder Fields.
Definición del formato de entrada
Tipo de DatoEsta es la parte mas importante de la tabla, es aquí donde se define la estructura de datos que contendrá dicha tabla. El primer paso es definir los campos, tipos, tamaño, Formato y Reglas de validación en el fólder Fields.

a. Definición de campos:
La definición de campos es igual. Se introduce el nombre del campo (name) el tipo de datos que soportará (Type) y el tamaño.
b. Definición de tipo de dato
La definición del tipo de dato es muy útil, para saber el tipo de dato si es carácter o numérico para condicionar la entrada de datos y/o salida de datos.
c. Definición del Display
Format : Es el formato de salida del campo, ejemplo si fuera numérico 9,999.99 o si fuera carácter K!!!!!, para que solo acepte mayúsculas
Input mask : Igual que el Format, lo único que es para la entrada de datos.
La definición de campos es igual. Se introduce el nombre del campo (name) el tipo de datos que soportará (Type) y el tamaño.
b. Definición de tipo de dato
La definición del tipo de dato es muy útil, para saber el tipo de dato si es carácter o numérico para condicionar la entrada de datos y/o salida de datos.
c. Definición del Display
Format : Es el formato de salida del campo, ejemplo si fuera numérico 9,999.99 o si fuera carácter K!!!!!, para que solo acepte mayúsculas
Input mask : Igual que el Format, lo único que es para la entrada de datos.

La definición de Índices de la tabla, que será muy importante a la hora de crear las relaciones entre las tablas.
a. Nombre del Índice (name)
Introducir el Nombre del archivo índice. Es conocido también como TAG.
b. Type ( tipo de Indice)
Primary : Llave primaria.
Candidate : Llave candidata
Unique : Llave única.
Regular : Llave foránea.
c. Nombre de la Expresión
Nombre de los campos que conforman la llave primaria:
Ejemplo : id, o si son varios campos : id + línea
Nota: si los campos no son del mismo hay que forzarlos al tipo de dato deseado, ejemplo: si id es carácter y línea, entonces el nombre de la expresión sería. Id + STR(linea)
STR() convierte de número a carácter y VAL() convierte de carácter a numérico.
Después de detallar los índices, se define los eventos de La validación a nivel de registro y los eventos que se ejecuten a la hora de Insertar un registro, de actualizar o borrar.
Ejercicio Práctico:
Cree la siguiente base de datos con el nombre de pedidos.
a. Nombre del Índice (name)
Introducir el Nombre del archivo índice. Es conocido también como TAG.
b. Type ( tipo de Indice)
Primary : Llave primaria.
Candidate : Llave candidata
Unique : Llave única.
Regular : Llave foránea.
c. Nombre de la Expresión
Nombre de los campos que conforman la llave primaria:
Ejemplo : id, o si son varios campos : id + línea
Nota: si los campos no son del mismo hay que forzarlos al tipo de dato deseado, ejemplo: si id es carácter y línea, entonces el nombre de la expresión sería. Id + STR(linea)
STR() convierte de número a carácter y VAL() convierte de carácter a numérico.
Después de detallar los índices, se define los eventos de La validación a nivel de registro y los eventos que se ejecuten a la hora de Insertar un registro, de actualizar o borrar.
Ejercicio Práctico:
Cree la siguiente base de datos con el nombre de pedidos.
RELACIONES ENTRE TABLAS:
Las relaciones mas comunes entre tablas se definen :
De uno a uno : Ejemplo de una llave primaria a otra llave primaria
De uno a muchos : Ejemplo de una llave primaria a una Regular o Foránea.
Las relaciones entre tablas se crean arrastrando la llave de la tabla a la llave de otra tabla.
Las relaciones mas comunes entre tablas se definen :
De uno a uno : Ejemplo de una llave primaria a otra llave primaria
De uno a muchos : Ejemplo de una llave primaria a una Regular o Foránea.
Las relaciones entre tablas se crean arrastrando la llave de la tabla a la llave de otra tabla.
La figura muestra una relación entre las tablas clientes y pedidos, la relación se leería así : “Un cliente tiene muchos pedidos”.Generación de integridad referencial
Reglas que rigen la coherencia de datos, específicamente las relaciones entre las claves principal y externa de claves de tablas distintas. Visual FoxPro, resuelve la Integridad Referencial mediante reglas a nivel de campo y a nivel de registro definidas por el usuario. El Generador de la Integridad Referencial le ayuda a definir reglas para controlar cómo se insertan actualizan o eliminan registros de tablas relacionadas.
Desencadenante: código de evento a nivel de registro que se ejecuta después de una inserción, una actualización o una eliminación. Se ocupan para integridad entre las tablas.
El establecimiento de la integridad referencial implica la creación de un conjunto de reglas para preservar las relaciones definidas entre las tablas al introducir o eliminar registros.
Si exige la integridad referencial, Visual FoxPro impedirá las acciones siguientes:
· Agregar registros a una tabla relacionada cuando no haya ningún registro asociado en la tabla primaria.
· Cambiar valores de una tabla primaria cuando tales cambios supongan dejar registros huérfanos en una tabla relacionada.
· Eliminar registros de una tabla primaria cuando tengan registros relacionados coincidentes.
Si lo desea, puede escribir sus propios desencadenantes y procedimientos almacenados para exigir la integridad referencial. Sin embargo, el Generador de integridad referencial (IR) de Visual FoxPro permite determinar los tipos de reglas que desea exigir, las tablas a las que desea exigirlas y los eventos del sistema que harán que Visual FoxPro las compruebe.
El Generador de IR trata múltiples niveles de eliminaciones y actualizaciones en cascada, y es recomendable como herramienta para asegurar la integridad referencial.
Para abrir el Generador de IR
1 Abra el Diseñador de bases de datos.
2 En el menú Base de datos, elija Editar integridad referencial.
Al utilizar el Generador de IR para crear reglas que se van a aplicar a la base de datos, Visual FoxPro guarda el código generado para exigir las reglas de integridad referencial como desencadenantes que hacen referencia a procedimientos almacenados. Para ver este código puede abrir el editor de texto de procedimientos almacenados en la base de datos. Si desea información sobre la forma de crear desencadenantes por programa, consulte Uso de desencadenantes en la web http://www.portalfox.com/, Trabajo con tablas.
Precaución Cuando haga cambios en el diseño de una base de datos, como modificaciones en sus tablas o alteraciones en los índices utilizados en una relación persistente, debe volver a ejecutar el Generador de IR antes de utilizar de nuevo la base de datos. De esta forma se revisarán el código de procedimiento almacenado y los desencadenantes utilizados para exigir la integridad referencial, de forma que reflejen el nuevo diseño. Si no vuelve a ejecutar el Generador de IR, puede que obtenga resultados inesperados, ya que no se habrán actualizado los procedimientos almacenados y los desencadenantes para ajustarlos a las modificaciones.
El Generador IR se muestra cuando:
Hace doble clic en una línea de relación entre dos tablas del Diseñador de bases de datos y elige el botón Integridad Referencial en el cuadro de diálogo Editar relación.
Elige Integridad referencial en el menú contextual del Diseñador de bases de datos.
Elige Editar integridad referencial en el menú Base de datos.
Fichas del generador
Reglas para la actualización Especifica reglas para aplicar cuando se modifica el valor clave de la tabla primaria.
Reglas para la eliminación Especifica las reglas que se aplican cuando se elimina un registro de la tabla primaria.
Reglas para insertar Especifica las reglas que se aplican cuando se inserta un nuevo registro o cuando se actualiza un registro existente en la tabla secundaria.
VISTAS LOCALES:
Definición.- Una vista es un objeto que se crea empleando la instrucción SELECT de SQL para bases de datos relacionales. Las vistas pueden ser locales o remotas. Las vistas locales usan la sintaxis SQL de Visual FoxPro para seleccionar información desde tablas o vistas almacenadas en una base de datos dentro de su PC. Puede crear una vista local utilizando los asistentes para vistas, el diseñador de vistas, o el comando CREATE SQL VIEW. Las instrucciones SQL son:
SELECT campos que se extraeran de las tablas
FROM tablas
WHERE condición
GROUP BY campos de agrupamiento
ORDER BY campos de ordenamiento
Para este Ejemplo no nos apoyaremos de la ayuda
Como obtener el nombre del cliente, dirección, la fecha de pedido, el nombre del producto y el precio del producto.
Desencadenante: código de evento a nivel de registro que se ejecuta después de una inserción, una actualización o una eliminación. Se ocupan para integridad entre las tablas.
El establecimiento de la integridad referencial implica la creación de un conjunto de reglas para preservar las relaciones definidas entre las tablas al introducir o eliminar registros.
Si exige la integridad referencial, Visual FoxPro impedirá las acciones siguientes:
· Agregar registros a una tabla relacionada cuando no haya ningún registro asociado en la tabla primaria.
· Cambiar valores de una tabla primaria cuando tales cambios supongan dejar registros huérfanos en una tabla relacionada.
· Eliminar registros de una tabla primaria cuando tengan registros relacionados coincidentes.
Si lo desea, puede escribir sus propios desencadenantes y procedimientos almacenados para exigir la integridad referencial. Sin embargo, el Generador de integridad referencial (IR) de Visual FoxPro permite determinar los tipos de reglas que desea exigir, las tablas a las que desea exigirlas y los eventos del sistema que harán que Visual FoxPro las compruebe.
El Generador de IR trata múltiples niveles de eliminaciones y actualizaciones en cascada, y es recomendable como herramienta para asegurar la integridad referencial.
Para abrir el Generador de IR
1 Abra el Diseñador de bases de datos.
2 En el menú Base de datos, elija Editar integridad referencial.
Al utilizar el Generador de IR para crear reglas que se van a aplicar a la base de datos, Visual FoxPro guarda el código generado para exigir las reglas de integridad referencial como desencadenantes que hacen referencia a procedimientos almacenados. Para ver este código puede abrir el editor de texto de procedimientos almacenados en la base de datos. Si desea información sobre la forma de crear desencadenantes por programa, consulte Uso de desencadenantes en la web http://www.portalfox.com/, Trabajo con tablas.
Precaución Cuando haga cambios en el diseño de una base de datos, como modificaciones en sus tablas o alteraciones en los índices utilizados en una relación persistente, debe volver a ejecutar el Generador de IR antes de utilizar de nuevo la base de datos. De esta forma se revisarán el código de procedimiento almacenado y los desencadenantes utilizados para exigir la integridad referencial, de forma que reflejen el nuevo diseño. Si no vuelve a ejecutar el Generador de IR, puede que obtenga resultados inesperados, ya que no se habrán actualizado los procedimientos almacenados y los desencadenantes para ajustarlos a las modificaciones.
El Generador IR se muestra cuando:
Hace doble clic en una línea de relación entre dos tablas del Diseñador de bases de datos y elige el botón Integridad Referencial en el cuadro de diálogo Editar relación.
Elige Integridad referencial en el menú contextual del Diseñador de bases de datos.
Elige Editar integridad referencial en el menú Base de datos.
Fichas del generador
Reglas para la actualización Especifica reglas para aplicar cuando se modifica el valor clave de la tabla primaria.
Reglas para la eliminación Especifica las reglas que se aplican cuando se elimina un registro de la tabla primaria.
Reglas para insertar Especifica las reglas que se aplican cuando se inserta un nuevo registro o cuando se actualiza un registro existente en la tabla secundaria.
VISTAS LOCALES:
Definición.- Una vista es un objeto que se crea empleando la instrucción SELECT de SQL para bases de datos relacionales. Las vistas pueden ser locales o remotas. Las vistas locales usan la sintaxis SQL de Visual FoxPro para seleccionar información desde tablas o vistas almacenadas en una base de datos dentro de su PC. Puede crear una vista local utilizando los asistentes para vistas, el diseñador de vistas, o el comando CREATE SQL VIEW. Las instrucciones SQL son:
SELECT campos que se extraeran de las tablas
FROM tablas
WHERE condición
GROUP BY campos de agrupamiento
ORDER BY campos de ordenamiento
Para este Ejemplo no nos apoyaremos de la ayuda
Como obtener el nombre del cliente, dirección, la fecha de pedido, el nombre del producto y el precio del producto.

Una ves hecho Click en New View aparece la siguiente ventana
Nota.- Pero si no tenemos tanto conocimiento nos apoyamos de la ayuda de FoxPro (View Wizard)Ejemplo N° 2
Para este caso crearemos una nueva vista escribiendo el código en la ventana de comandos; la cual queremos obtener todos los nombres de la tabla productos
CREATE SQL VIEW product_view AS SELECT * ;
FROM pedidos!productos
Obtener acceso a datos remotos con las vistas
Para acceder a datos remotos necesita crear una conexión a un origen de datos remotos válido, el cual generalmente es un servidor para el cual se ha instalado un controlador Open Database Connectivity (ODBC) y se establece un nombre de origen de datos ODBC. Desde dentro de Visual FoxPro, puede definir un origen de datos y sus conexiones. Para esto debemos instalar y configurar el origen de datos ODBC.
Configurar un origen de datos ODBC
Antes de que pueda crear vistas remotas o usar un paso a través de SQL, tiene que instalar un controlador ODBC y configurar el origen de datos ODBC.
Elegir un controlador ODBC
Para instalar los controladores ODBC para estos tipos de datos, use el programa de instalación de Visual FoxPro. Si elige la opción de instalación Completa, se instalan todos los controladores.
Instalar orígenes de datos ODBC
Puede obtener soporte para Conectividad abierta de bases de datos (ODBC) si elige la opción de instalación Completa o Personalizada. Con ODBC, puede tener acceso a un origen de datos SQL Server desde Visual FoxPro; sin embargo, antes de tener acceso al origen de datos, deberá definirlo.
Conexión de Visual FoxPro con los orígenes de datos ODBC

Podemos utilizar la instrucción en la barra de comando
Agregamos las tablas necesarias para extraer los ampos necesarios para este caso agregaremos la tabla cliente, pedidos, detalle y productos.
SELECT Clientes.nombre, Clientes.direccion, Pedidos.fechapedido,;
Productos.nombre, Productos.precio, Detalle1.cantidad, Detalle1.importe;
FROM ;
pedidos!clientes ;
INNER JOIN pedidos!pedidos ;
ON Clientes.idcliente = Pedidos.idcliente ;
INNER JOIN pedidos!detalle1 ;
ON Pedidos.idpedido = Detalle1.idpedido ;
INNER JOIN pedidos!productos ;
ON Productos.idproducto = Detalle1.idproducto
Agregamos las tablas necesarias para extraer los ampos necesarios para este caso agregaremos la tabla cliente, pedidos, detalle y productos.
SELECT Clientes.nombre, Clientes.direccion, Pedidos.fechapedido,;
Productos.nombre, Productos.precio, Detalle1.cantidad, Detalle1.importe;
FROM ;
pedidos!clientes ;
INNER JOIN pedidos!pedidos ;
ON Clientes.idcliente = Pedidos.idcliente ;
INNER JOIN pedidos!detalle1 ;
ON Pedidos.idpedido = Detalle1.idpedido ;
INNER JOIN pedidos!productos ;
ON Productos.idproducto = Detalle1.idproducto
Nos aparece la siguiente ventana donde debemos hacer Click en Yes
Una ves hecho click en yes nos pregunta si queremos guardarCkick en OK
Combinar datos locales y remotos en una vista
Para combinar datos remotos y locales en una vista
Cree una vista remota y agregue a la misma una o más tablas desde el servidor remoto.
Cree una nueva vista local y agregue a la misma la vista remota que acaba de crear.
Agregue a la vista la tabla local relacionada y combínela por un campo común.
Establezca un filtro en la vista local y ejecútelo.
Actualice el resultado de la vista para actualizar tanto la tabla local como la vista remota.
Cierre la vista local y después la vista remota para actualizar los datos del servidor remoto.
También puede combinar datos locales y remotos en una vista si crea una nueva vista local basada en una vista local y una vista remota.
Para crear una vista que combina datos locales y remotos
En el Administrador de proyectos, seleccione una base de datos, elija Vistas locales y, a continuación, elija Nuevo para abrir el Diseñador de vistas. Agregue cualquier combinación de tablas, vistas locales y vistas remotas a su vista.
Actualizar datos locales y remotos en una vista
Cuando actualice datos en una vista multicapa, las actualizaciones bajarán un nivel, hasta la vista en que está basada la vista de nivel superior. Si desea actualizar las tablas base desde las que se genera una vista multicapa, deberá ejecutar un comando TABLEUPDATE para cada vista de la estructura.
Actualizar datos
Para combinar datos remotos y locales en una vista
Cree una vista remota y agregue a la misma una o más tablas desde el servidor remoto.
Cree una nueva vista local y agregue a la misma la vista remota que acaba de crear.
Agregue a la vista la tabla local relacionada y combínela por un campo común.
Establezca un filtro en la vista local y ejecútelo.
Actualice el resultado de la vista para actualizar tanto la tabla local como la vista remota.
Cierre la vista local y después la vista remota para actualizar los datos del servidor remoto.
También puede combinar datos locales y remotos en una vista si crea una nueva vista local basada en una vista local y una vista remota.
Para crear una vista que combina datos locales y remotos
En el Administrador de proyectos, seleccione una base de datos, elija Vistas locales y, a continuación, elija Nuevo para abrir el Diseñador de vistas. Agregue cualquier combinación de tablas, vistas locales y vistas remotas a su vista.
Actualizar datos locales y remotos en una vista
Cuando actualice datos en una vista multicapa, las actualizaciones bajarán un nivel, hasta la vista en que está basada la vista de nivel superior. Si desea actualizar las tablas base desde las que se genera una vista multicapa, deberá ejecutar un comando TABLEUPDATE para cada vista de la estructura.
Actualizar datos
Para actualizar datos, puede usar almacenamiento en búfer, transacciones o vistas.
Realizar actualizaciones con almacenamiento en búfer
Después de elegir el método de almacenamiento en búfer y el tipo de bloqueo, active el almacenamiento en búfer de registros o tablas.
Para activar el almacenamiento en búfer
Elija una de las opciones siguientes:
En el Diseñador de formularios, establezca la propiedad BufferModeOverride del cursor en el entorno de datos del formulario.
–O bien–
En el código, establezca la propiedad Buffering.
Por ejemplo, puede activar el almacenamiento pesimista de filas en búfer si coloca el código siguiente en el procedimiento Init de un formulario: CURSORSETPROP('Buffering', 2)
Después escriba código para las operaciones de actualización en el código del método apropiado para los controles.
Para escribir las modificaciones en la tabla original, utilice TABLEUPDATE( ). Para cancelar las modificaciones después de una operación errónea de actualización en una tabla restringida por reglas, utilice TABLEREVERT( ). TABLEREVERT( ) es válido aunque el almacenamiento explícito de tablas en búfer no esté activado. Para especificar un nivel de verificación de la integridad de tabla, más bajo que el de la configuración predeterminada, utilice el comando SET TABLEVALIDATE.
El ejemplo siguiente muestra cómo actualizar registros cuando está activado el almacenamiento pesimista de registros en búfer.
Ejemplo de actualización mediante búferes de registros y tablas









