Módulo 1
BASES DE DATOS EN VISUAL FOX PRO
Programa: Alumno:
¨Módulo No. 1 Base de Datos Preparado por: Kenedy Campo Reservados todos los derechos Prohibida su reproducción total o parcial Diseño e Impresión: Comunicamos Ideas Tel 653 6517
[email protected]
CONTENIDO
INTRODUCCIÓN A LAS BASES DE DATOS
1. ¿POR QUÉ LAS BASES DE DATOS? 2. DEFINICIÓN DE BASES DE DATOS 3. VENTAJAS DE LAS BASES DE DATOS 4. NIVELES DE ABSTRACCIÓN EN UNA BASE DE DATOS MODELO ENTIDAD – RELACIÓN CAMPO 2 Registro tabla (Archivo) Tipos de datos y campo Creacion de nombres en Visual FoxPro QUIT (Comando) ?!?? (Comando) CLEAR (Comandos) DATE() (Función) SET CENTURY (Comando) SET DATE (Comando) TIME() (Función) DATETIME() (Función) TYPE() (Función) SET DEFAULT DEFAULT (Comando) (Coma ndo) CREATE (Comando) USE (Comando)
APPEND (Comando) BOF() (Función) EOF() (Función) GO GOTO (Comando) SKIP (Comando) RECNO() (Función) RECCOUNT() (Función) LOCATE (Comando) CONTINUE (Comando) $ (Operador) DO WHILE ... ENDDO (Comando) FOUND() (Función) STORE (Comando) VAL() (Función) STR() (Función) ALLTRIM() (Función) LTRIM() (Función) RTRIM() (Función) LEFT() (Función) RIGTH() (Función) SUBSTR()(Función)
CONTENIDO
INTRODUCCIÓN A LAS BASES DE DATOS
1. ¿POR QUÉ LAS BASES DE DATOS? 2. DEFINICIÓN DE BASES DE DATOS 3. VENTAJAS DE LAS BASES DE DATOS 4. NIVELES DE ABSTRACCIÓN EN UNA BASE DE DATOS MODELO ENTIDAD – RELACIÓN CAMPO 2 Registro tabla (Archivo) Tipos de datos y campo Creacion de nombres en Visual FoxPro QUIT (Comando) ?!?? (Comando) CLEAR (Comandos) DATE() (Función) SET CENTURY (Comando) SET DATE (Comando) TIME() (Función) DATETIME() (Función) TYPE() (Función) SET DEFAULT DEFAULT (Comando) (Coma ndo) CREATE (Comando) USE (Comando)
APPEND (Comando) BOF() (Función) EOF() (Función) GO GOTO (Comando) SKIP (Comando) RECNO() (Función) RECCOUNT() (Función) LOCATE (Comando) CONTINUE (Comando) $ (Operador) DO WHILE ... ENDDO (Comando) FOUND() (Función) STORE (Comando) VAL() (Función) STR() (Función) ALLTRIM() (Función) LTRIM() (Función) RTRIM() (Función) LEFT() (Función) RIGTH() (Función) SUBSTR()(Función)
INTRODUCCIÓN A LAS BASES DE DATOS
1. ¿POR QUÉ LAS BASES DE DATOS? En los sistemas de información clásicos, una aplicación accede a uno o mas archivos. Esto se debe a que estos sistemas están orientados hacia el proceso, debido a que en ellos, se pone el énfasis en los tratamientos que reciben los datos, los cuales se almacenan en unos archivos que son usados para una única aplicación. Estas se analizan e implantan con entera independencia unas de otras, y los datos no se suelen transferir entre ellas, sino que se duplican siempre que los correspondientes trabajos los necesitan. Este planteamiento produce, además de una ocupación inútil de memorias secundarias, secundarias, un aumento en los tiempos de proceso, al repetirse los mismos controles y operaciones en los distintos archivos, pero más grave todavía son las incoherencias que a menudo, se presentan en estos sistemas, debido a que la actualización de los datos que se encuentran en mas de un archivo no se suele realizarse de forma simultánea. De este análisis, se deduce claramente la necesidad de una gestión mas racional del conjunto de datos, surgiendo así un nuevo enfoque que se apoya sobre una “base de datos”, en la cual los datos son recogidos y almacenados una sola vez, organizándose y manteniéndose en un conjunto estructurado, que no está diseñado para una aplicación concreta.
2. DEFINICIÓN DE BASES DE DATOS Muchas son las deniciones que de una base de datos pueden encontrarse en la abundante bibliografía existente sobre el tema, pero coinciden en que consideran que, una base de datos es un conjunto, colección o de depósito depósito de datos almacenados en un soporte soporte informático. Los datos deben estar interrelacionados y estructurados de acuerdo con un modelo capaz de recoger el contenido semántico – restricciones existentes en el mundo real.
3. VENTAJAS DE LAS BASES DE DATOS
Reducción o eliminación de redundancias
Posibilidad de eliminar inconsistencias
Los datos pueden compartirse
Estos no sólo quiere decir que diferentes aplicaciones existentes pueden compartir los datos de la base, sino también que es factible desarrollar nuevas aplicaciones que operen con los mismos datos almacenados.
Pueden aplic aplicarse arse restricciones de seguridad. seguridad. El sistema permite el estableci estableci miento de controles de acceso, de modo que una determinada aplicación (o usuario que acceda directamente a la base desde un terminal) tenga autorización para “ver” sólo cierta parte de los datos y para efectuar sólo ciertas operaciones con ellos Conservación de la integridad. El control centralizado de la base, permite ejecutar procedimientos de validación que habrán de ejecutarse cada vez que se intente una operación de actualización, lo que asegura que los datos almacenados son correctos, garantizando así la integridad de los mis-
mos.
Independencia de los datos. Las aplicaciones son son inmunes a cambios cambios en la estructura estructura de almacenamiento y en la estrategia de acceso, es decir, existe una independencia, tanto físico como lógica, entre datos y tratamientos. Esta es una característica que
4. NIVELES DE ABSTRACCIÓN EN UNA BASE DE DATOS En las bases de datos existen tres niveles generales: interno o físico, conceptual o lógico global, externo o lógico. El nivel externo es el más cercano a los usuarios, es decir, el que atañe a la manera como cada usuario ve los datos. En la arquitectura ANSI/Spara se llama llama vista externa. externa. Por tanto, una visita externa es el contenido de la base de datos tal como lo ve un usuario, especíco (es decir, para ese usuario la vista externa externa es la base de datos). Por ejemplo, un usuario usuario del departamento de personal puede ver la base de datos como un conjunto de ocurrencias de registros de departamento más un conjunto de ocurrencias de registros de empleados. El nivel conceptual o lógico global es una representación lógica del contenido total de información de la base de datos, en forma abstracta en comparación con la forma en la cual los datos se almacenan físicamente. Si el nivel externo se relaciona con las visitas de los usuarios individuales, el nivel conceptual puede considerarse como el que dene una vista de la comunidad de usuarios. El nivel interno es una representación de nivel muy bajo de la base de datos en su totalidad; se compone de múltiples ocurrencias, de de múltiples tipos de registros registros internos. Registro interno es el término que ANSI/o PARC utiliza para la construcción llamada registro almacenado; la vista interna, por tanto, aún se mantiene a un paso del nivel físico, ya que no atañe a registros físicos ni a ninguna restricción especíca de dispositivos tales como capacidades de cilindros o pistas.
5. SISTEMAS DE GESTIÓN DE BASES DE DATOS
Vista Usuario
Nivel externo ò lógico NIvel Conceptual ó Lógico Global
Nivel Interno ó Fisíco
Un sistema de gestión de bases de datos, es un conjunto coordinado de programas, procedimientos, lenguajes, etc., que suministra, tanto a los usuarios informáticos, como a las analistas, programadores, o al administrador, los medios necesarios para describir, recuperar y manipular los datos integrados en la base, asegurando su condencia y seguridad. Las principales funciones de un SGBD son:
Función de descripción: la función de descripción debe permitir al administrador de la base de datos, especicar los elementos de datos que la i ntegran, su estructura y las relaciones que existen entre, ellos las reglas de integridad semántica y los controles a efectuar antes de autorizar el acceso a la base, etc., así como también las características de tipo físico y las vistas lógicas de los usuarios. Esta función, llevada a cabo por el lenguaje de descripción o denición de datos (LDD), propio de cada SGBD, debe suministrar los medios para denir las tres estructuras de datos –físicas, lógica, conceptual-, especicando las características de los datos, a cada uno de estos niveles: A nivel físico, se ha de delimitar el espacio –volúmenes, cilindros y pistas- reservado para la base, la longitud de los campos o elementos de datos, su modo de representación –binario, decimal, pto. jo o otante, etc. además, se debe poder señalar caminos de acceso, denir punteros, etc. A nivel de estructuras lógica y conceptual, ha de suministrar los instrumentos para la denición de las entidades y su identicación, atributos de las mismas, relaciones entre ellas, autorizaciones de acceso, restricciones de integridad, etc.
Función de manipulación: la función de manipulación permite a l os usuarios de la base, añadir, buscar, suprimir o modicar los datos de la misma siempre de acuerdo con las especicaciones y las normas de seguridad dictadas por el administrador. La función de manipulación se llevará a cabo por medio de un lenguaje de manipulación de datos (LMD), que facilita los instrumentos necesarios para la realización de estas tareas. Puede ser un lenguaje autocontenido, orientado a los usuarios no informáticos, que puede usarse, en general, en modo conversacional o puede ser un lenguaje que precisa apoyarse en otro lenguaje, llamado huésped. Función de utilización: la función de utilización reúne todas las interfases que necesitan los diferentes usuarios para comunicarse con la base. Los requerimientos respecto a la forma de utilizar la base de datos son muy diferentes, según los tipos de procesos y según los usuarios, siendo preciso que, la función de utilización responda a todas ellas. En especial, esta función debe integrar un conjunto de instrumentos que faciliten las tareas del administrador.
6. ADMINISTRADOR DE LA BASE DE DATOS Una de las razones principales para contar con sistemas de manejo de bases de datos es tener un control centralizado tanto de los datos como de los programas que tienen acceso a ellos. La persona que tiene este control centralizado sobre el sistema es el administrador de la base de datos. Las funciones del administrador son entre otras:
Denición del esquema (base lógica global)
Denición de la estructura del almacenamiento y del método de acceso
Modicación del esquema y de la organización física
Concesión de autorización para el acceso a los datos
Especicación de restricciones de integridad
TALLER
¿Qué es una base de datos?
¿Qué es un modelo de datos?
¿Qué es un sistema de gestión de base de datos?
¿Cuáles son las ventajas de las bases de datos?
¿Cuáles son los niveles de abstracción de los datos?
MODELO ENTIDAD – RELACIÓN Para efectuar el análisis de un sistema de información es necesario realizar un análisis funcional y un análisis estructural. El análisis funcional corresponde a la identicación, denición, representación y especicación de procesos. En este capítulo nos ocuparemos del análisis estructural o análisis de datos, que consiste inicialmente en un esquema conceptual formado por los objetos y sus propiedades relevantes identicadas por el analista en su percepción y abstracción de esa realidad. El esquema conceptual que se forma en la mente del analista es expresado mediante algunos formalismos dando origen a un modelo conceptual. Una vez denido el modelo conceptual, este se puede transformar en una descripción de datos, atributos, registros, archivos, tablas, etc., incluyendo las posibles interrelaciones entre estos elementos y su signicado. Dicha descripción la llamaremos modelo lógico de datos y a la operación de transformar el modelo lógico la llamaremos diseño lógico de datos. Una vez denido el modelo lógico, hay que traducirlo a estructuras almacenables en soporte físicos controlados por el computador, normalmente discos magnéticos. Al conjunto de estas estructuras lo llamaremos modelo físico de datos y al proceso de transformación del modelo lógico al modelo físico, lo llamaremos diseño físico de datos. La siguiente gura representa los tres niveles de los datos y sus correspondientes modelos:
RELAIDAD
Análisis Diseño lógico de datos
MODELO CONCEPTUAL
MODELO LÓGICO
Vista o abstracción Transformación
Diseño físico de datos B.D.
MODELO FÍSICO
Transformación
Existen múltiples modelos conceptuales, de los cuales el mas ampliamente utilizado es el modelo entidad relación de chen, que es el que estudiaremos. El modelo entidad-relación al igual que cualquier otro modelo conceptual de daos es independiente del sistema de gestión de bases de datos elegido. Los elementos básicos del modelo son:
Entidades: Una entidad es una “cosa” que puede ser distinguida e identicada. De cara al modelo conceptual podemos decir que las entidades son los objetos acerca de los cuales tenemos información. Las entidades pueden ser:
Reales, es decir, objetos tangibles o cosas, tales como máquinas, gente, edicios,
etc.
Conceptuales, es decir, objetos intangibles, como por ejemplo, orden de compra, costo de un centro, etc. Actividades o eventos, es decir, actividades de interés para la empresa, acerca de los cuales se deben mantener datos por ejemplo, pagos, compras, ventas, etc. Es importante señalar que una entidad esta representada en el modelo por los datos asociados a sus propiedades, ella no es en si misma los datos. Por ejemplo, María Pepa existe como una persona, pero su nombre, fecha de nacimiento, sexo, etc., son propiedades o cualidades que pueden ser representadas como datos acerca de ella, otra cosa importante es que teniendo en cuenta las propiedades comunes, las entidades son agrupadas “formando tipos” de entidades. Así por ejemplo, la entidad María Pepa pertenece a la entidad tipo “PERSONA”, y se dice que
Relaciones: Una relación es una asociación entre entidades, por ejemplo, “padre-de” es una relación entre dos entidades “PERSONA”. Las relaciones se agrupan formando “tipos de relaciones”, es decir, asociaciones entre los tipos de entidades de las entidades involucradas en las relaciones. Podemos clasicar las relaciones tipo, según el grado o número de tipos de entidades distintas a las que asocia:
Relación binaria o de grado 2: entre dos tipos de entidades diferentes. Relación reexiva o de grado 1: la denido entre un tipo de entidad y ella misma.
Cardinalidad de una relación: Es el número de ocurrencias de cada tipo de entidad que intervienen o pueden intervenir en el tipo de relación. Se puede jar, al hablar de la cardinalidad de una entidad respecto a una relación, de una cardinalidad mínima y de una cardinalidad máxima. La mínima puede ser 0 o 1 e indicará si existe la posibilidad de determinadas entidades no participen en el relación, y dichas participaciones se conocen con el nombre de opcional y obligatoria respectivamente. Atributos: un atributo es una propiedad descriptivo o valor asociado con una entidad, que sirve para cualicar, identicar, clasicar o expresar el estado de la entidad. Un tipo de atributo es la colección de todos los valores de una propiedad denida asociada con las entidades de un tipo de entidad dado.
Ejemplo: Tipo de entidad
Tipo de atributo
Atributo
Persona
Nombre
María Pepa
Diagrama entidad – relación: Ees un gráco conceptual del modelo entidad – relación. Hay 2 razones para dibujarlo:
para
Representa un resumen de los resultados del análisis, el cual puede servir como b a s e la discusión. Es la base para el diseño de la base de datos
No existe una única representación gráca de los diagramas entidad-relación (DER), veremos dos:
Diagramas de Echen: PERSONA
Los tipos de relaciones se representan por un rombo con sus respectivas líneas de conexión a los tipos de entidades. Ejemplo: TRABAJA
Las cardinalidades se representan junto a las líneas de conexión y cerca de las entidades tipo respectivas, de la siguiente manera:
“Cardinalidad mínima: cardinalidad máxima”
Ejemplo:
EMPLEADO
PROYECTO
TRABAJA ∅:
∅:
Los tipos de atributo por lo general no se suelen representar en el diagramapara no recargarlo y cuando se representa sólo se utilizan los atributos de la clave primaria. VENDEDOR
∅: Ν
VENDE A
1:1
No. Vendedor
CLIENTE
No. Cliente
Diagramas de Bachman: a.
Los tipos de entidades se representan por um rectángulo
b.
Los tipos de relaciones se representan por un rombo
c.
Las cardinalidades máximas se representan por las líneas de conexión de los rombos con los respectivos tipos de entidades. La convención es la siguiente:
R
Representa una relación R, de cardinalidad máxima “uno a uno” teniendo en cuenta los dos sentidos.
R
Representa una relación R, de cardinalidad “uno a muchos” en donde muchos signica mas de uno.
R
Representa una relación R, de cardinalidad “muchos a mu-
En Bachaman las características mínimas no aparecen reejadas gráfcamente. d. Los tipos de atributos se representan como óvalos conectados al rectángulo de su respectivo tipo de entidad.
Ejemplo:
A
a2
a1
Equivalencia de entidades:
a. Entidades compuestas o asociativas: se denomina de este modo a aquellas que resultan al asociar a una relación entre entidades unos determinados atributos. Entonces, la relación inicial debe ser considerada a su vez como una entidad. Ejemplo:
EMPLEADO
∅: Ν
TRABAJA
Fecha inicio partici pación
∅: Ν
PROYECTO
Horas dictadas
Horas dedicadas no es un atributo de empleado ni de proyecto, puesto que su signicado depende tanto del empleado como del proyecto involucrado. b. Atributo – entidad: no sólo las relaciones se pueden convertir en entidades. Un atributo también se pude convertir en una entidad cuando tiene signicado completo en si mismo, con relaciones y atributos propios. Ejemplo:
TIPO DE CARRO
Constructor
modelo
CARRO
N° pasajeros
N° placa
Pripi-
TALLER 1.
Explique en qué consiste el análisis de datos
2.
Explique en qué consiste el diseño lógico y físico de datos
3.
Explique los elementos del modelo entidad – relación de Chen
4.
Transforme los ejemplos representados en diagramas de Chen a diagramas de Bachman
5.
Dé un ejemplo entidad compuesta y un ejemplo de un atributo-entidad
EJEMPLOS Y EJERCICIOS DEL MER Ejemplo: se trata de diseñar un modelo conceptual para una compañía aérea usando el formalismo entidad – relación. Las entidades con sus atributos son las siguientes: PASAJERO (Nombre, dirección, teléfono) VUELO (Origen, Destino, No. Vuelo, Hora – Partida, Hora - Llegada) PARTIDA (Fecha). TIPO – AVION (Constructor, Modelo) AERONAVE (No. Serie) EMPLEADO (No. Empleado, Nombre, Categoría, Salario) PILOTO (No. Licencia; No. Horas – Vuelo).
Las relaciones y sus cardinalidades máximas son las siguientes: 1.
Los pilotos pertenecen a los empleados de la compañía (1:1)
2.
Los pasajeros reservan cupo para las partidad (m:n).
3.
Las partidad son ocurrencias de los vuelos en una fecha determinada (n:1).
4.
Empleados de la compañía son asignados a una partida (m:n).
5.
Los pilotos pueden manejar varios tipos de aviones (m:n)
6.
Una aeronave pertenece a un tipo de avión (n:=)
7.
Una aeronave puede realizar varias partidas (1:n)
n a : m s h e c e a t B n e e i d d a n m o p a s r e g r a r i d o c l E
s a r o H ° N
O T O L I P
c i L ° N
e r b m o N
a i r o g e t a C
° N
N Ò I V A O P I T
a j e n a M
e c e n e t r e P
n u s E
O D A E L P M E
E V A N O R E A
o l e d o M
r o t c u r t s n o C
r o t c u r t s n o C
o i r a l a S
o d a n o i s A o n o f è l e T
n ó i c c e r i D
P e b m o N
a z i l a e R
a d a r a o g e H l l
a d a r i t o r H a p
O R E J A S A P
A D I T R A P
a v r e s e R
a h c e F
a i c n e r r u c O
O L E U V
° N
o n i t s e D
n e g í r O
En la práctica se suele simplicar la representación omitiendo los nombres de las relaciones y de los atributos, de la siguiente manera:
PASAJERO
PARTIDA
EMPLEADO
AERONAVE PILOTO
VUELO
TIPO-AVIÒN
Le queda como ejercicio al lector establecer las cardinalidades mínimas.
EJERCICIO 1 Se trata de elaborar el modelo entidad – relación que reeje el funcionamiento de una universidad en su parte académica, organizada de la forma siguiente: 1. La universidad está constituida por facultades. 2. Una facultad está dividida en departamentos. 3. Un departamento está integrado por cátedras. 4. Una cátedra imparte, en general, varias asignaturas. 5. Un alumno está matriculado en una o varias asignaturas, pero no puede cursar estudios simultáneamente en dos facultades diferentes. 6. En cada cátedra hay un catedrático y varios profesores titulares y encargados de cursos. Los profesores titulares, así como el catedrático, sólo pueden impartir docen cia dentro de la cátedra. Mientras que los encarga dos de cursos pueden hacerlo en distintas cátedras de un mismo departamento. 7. Departamentos de la misma o de distintas facultades pueden unirse para construir institutos interfacultativos de investigación y post – grado. 8. Cada departamento tiene varios alumnos de post – grado, que reciben la docencia a través de los institutos de investigación.
Se pide: 1.
Identicar las entidades.
2.
Identicar las relaciones y sus cardinalidades.
EJERCICIO 2 Una empresa dedicada a la fabricación y venta de productos desea diseñar una base de datos que le permita controlar un sistema de compras y almacenes. Las materias primas que necesita la empresa se solicitan a los proveedores. Cada proveedor suministra diversas materias primas y de cada materia prima hay varios proveedores. Cada pedido es para un único proveedor y para una sola materia prima y en él se indica en que almacén deseo que se efectúe la entrega ya que las materias primas están distribuidas en diversos almacenes. En cada almacén hay por lo menos un 80% de las materias primas y una materia prima está en al menos el 80% de los almacenes. En los almacenes citados, también se encuentran los productos terminados. En cada almacen un 50% de los productos y un producto se almacena en al menos un 50% de los almacenes. Los productos se componen de varias materias primas y obviamente una materia prima puede intervenir en la fabricación de más de un producto. Una vez el pedido es servido, se procede al pago de los proveedores previa presentación de la factura de estos. Una factura por cada pedido. Cada pedido puede originar varias pagos, pero cada uno de ellos corresponde a una única factura. Los pagos se agrupan por bancos teniendo en cuenta que algunos pagos se efectuarán en efectivo (no por banco) se pide lo mismo del
Campo Recibe el nombre de campo el espacio físico donde se almacena un dato, y al que generalmente se le da un nombre para identificarlo. En un campo podemos tener unos datos ya almacenados o introducir unos nuevos. Ejemplo: Cada una de las casillas que se llenan en una hoja de vida corresponde a un campo. Crear Campos Al crear los campos de una tabla debe especificar un nombre de campo, un tipo de datos y un ancho de campo. También puede controlar qué datos se permiten en el campo especificando si el campo permite valores NULL, si tiene un valor predeterminado o si debe cumplir reglas de validación. Al configurar las propiedades de presentación, puede especificar el tipo de control que se crea cuando el campo se agrega a un formulario, el formato del contenido de los campos o el título del contenido del campo. Nota: Los registros de una tabla de Visual FoxPro pueden contener hasta 255 campos. Si uno o más campos contienen valores NULL, el número máximo de campos que la tabla puede contener se reduce en uno, de 255 a 254. Registro Físicamente es un conjunto de campos; lógicamente es un conjunto de datos relacionados que sirven para identificar un ente, persona o cosa. Trabajar con registros Cuando haya diseñado y creado la estructura de una tabla, puede almacenar datos en ella agregándole registros. Después podrá modificar y eliminar los registros existentes. Cada una de estas tareas puede realizarse a través de la interfaz grafica o mediante comandos. Ejemplo: Una vez llenadas todas las casillas de la hoja de vida tenemos un registro, indica esto que la hoja de vida como tal es un registro que identifica a una persona en particular. Tabla (Archivo) Conjunto de registros que hacen referencia a una misma persona o cosa, las tablas también las conocemos como archivos. Crear tablas Las tablas almacenan los datos en un formato de filas y columnas, de manera similar a una hoja de cálculo. Cada fila representa un registro, mientras que cada columna representa los campos de los registros. Puede crear una tabla en una base de datos o una tabla libre que no esté asociada a ninguna base de datos. Si coloca la tabla en una base de datos, puede crear nombres largos de campo y de tabla para las tablas de la base de datos. También puede aprovecharse de las capacidades del diccionario de datos para tablas de base de datos, valores de campo predeterminados y reglas a nivel de campo y a nivel de registro, así como también de los desencadenadores. Diseñar tablas de base de datos o tablas libres Las tablas de Visual FoxPro, o archivos .dbf, pueden existir en dos estados: como tabla de base de datos (una tabla asociada a una base de datos) o como una tabla libre no asociada a ninguna base de datos. Las tablas asociadas a una base de datos cuentan con ciertas ventajas sobre las tablas libres. Cuando una tabla forma parte de una base de datos, es posible crear:
•
Nombres largos para la tabla y para cada uno de sus campos.
•
Títulos y observaciones para cada campo de la tabla.
•
Valores predeterminados, máscaras de entrada y formato para los campos de la tabla.
•
Clase de control predeterminada para campos de tablas.
•
Reglas a nivel de campo y reglas a nivel de registro.
•
•
Índices de clave primaria y relaciones de tablas para compatibilidad con reglas de integridad referencial. Un desencadenante para cada evento INSERT, UPDATE o DELETE.
Recuerde los siguientes puntos cuando diseñe una tabla: •
El tipo de datos de un campo debe coincidir con el tipo de información que va a almacenar en él.
•
Haga el campo lo suficientemente ancho para dar cabida a la información que mostrará.
•
•
Establezca un número apropiado de posiciones decimales para los campos de tipo Numérico o Float. Active "NULL" si desea que el campo acepte .NULL. como valor.
Ejemplo: Las hojas de vida de mis estudiantes forman una tabla (Archivo). Tipos de datos y campos Todos los datos de Visual FoxPro tienen un tipo, como una descripción de los valores permitidos, y el intervalo y tamaño de los valores. Una vez especificado el tipo de datos que está usando, Visual FoxPro puede almacenar y manipular los datos de forma eficaz. Cuando se crea una tabla, se puede especificar el tipo de datos que se almacena en cada campo de la tabla. Es posible especificar más tipos de datos para campos en una tabla que para variables y matrices, las cuales sólo pueden almacenar un subconjunto de los tipos de datos disponibles en Visual FoxPro; sin embargo, el valor que se almacene en una variable o elemento de matriz determina el tipo de dato almacenado. Sugerencia: Se puede usar la función TYPE() para determinar el tipo de dato almacenado en una variable, elemento de matriz o campo. La siguiente tabla muestra los tipos de datos en Visual FoxPro. Tipos de datos de Visual FoxPro
Tipo de datos
Descripción
Tamaño
1 byte por carácter Cualquier carácter hasta 254 8 bytes - $922337203685477.5807 to $922337203685477.5807
Carácter
Cualquier texto
Monetario (Currency)
Importes monetarios
Fecha
Dato cronológico que 8 bytes consiste de mes, día y año
DateTime
Dato cronológico que 8 bytes consiste de mes, día, año, horas, minutos y segundos
Lógico
Valor booleano verdadero o falso Números enteros o decimales
Numérico
Intervalo
Al usar formatos de fecha estrictos, {^0001-01-01}, 1 de enero, 1 d.C. a {^9999-12-31}, 31 de diciembre, 9999 d.C. Al usar formatos de fecha estrictos, {^0001-01-01}, 1 de enero, 1 d.C. a {^9999-12-31}, 31 de diciembre, 9999 d.C., más 00:00:00 a.m. a 11:59:59 p.m.
1 byte
Verdadero (.T.) o Falso (.F.)
8 bytes en la memoria; 1 a 20 bytes en una tabla
- 0,9999999999E+19 a 0,9999999999E+20
Además, Visual FoxPro proporciona tipos de datos que se aplican únicamente a campos de tablas. Tipos de campos de Visual FoxPro
Tipo de datos
Descripción
Tamaño
Intervalo
Character (Binary) Cualquier dato carácter que 1 byte por carácter Algunos caracteres no se desea traducir entre hasta 254 páginas de código. Doble Flotante
General Entero Integer (Autoinc)
Memo
Memo (Binario)
Número de signo flotante de precisión doble Igual que Numérico
8 bytes
8 bytes en la memoria; 1 a 20 bytes en una tabla Referencia a un objeto OLE 4 bytes en una tabla Valor numérico sin 4 bytes decimales
Lo mismo que Integer 4 bytes pero también incluye un valor para incremento automático. Sólo lectura. Cualquier texto de longitud 4 bytes en una indeterminada o referencia tabla a un bloque de datos Lo mismo que Memo excepto que los datos no cambian entre páginas de código
4 bytes en una tabla
+/-4,94065645841247E-324 a +/8,9884656743115E307 - 0,9999999999E+19 a 0,9999999999E+20
Limitado por la memoria disponible -2147483647 a 2147483647 Valor controlado por los valores de autoincremento Next y Step (Siguiente y paso).
Limitado por la memoria disponible
Limitado por la memoria disponible
Cada tipo de datos tiene sus propias características, incluido el tamaño de almacenamiento. Creación de nombres en Visual FoxPro Los contenedores de datos (campos) y algunos parámetros de comandos y funciones necesitan tener un nombre. Cuando cree un nombre en Visual FoxPro, aplique las siguientes reglas: •
Use sólo letras, números y subrayados.
•
Empiece el nombre con una letra o un subrayado.
•
Utilice de 1 a 128 caracteres, excepto para nombres de campo de tablas libres y etiquetas de índice, que pueden tener un máximo de 10 caracteres.
•
Evite las palabras reservadas por Visual FoxPro.
Los nombres de archivo se rigen por las convenciones del sistema operativo. QUIT (Comando) Termina la sesión actual de Visual FoxPro y devuelve el control al sistema operativo. QUIT
Observaciones Para finalizar una sesión de Visual FoxPro, debe utilizar siempre el comando QUIT. Si apaga el equipo sin ejecutar QUIT, se pueden dañar los archivos abiertos y perder datos. Además, puede dejar en el disco archivos temporales de trabajo que normalmente se eliminarían. Vea también CANCEL | RESUME | RUN | SUSPEND
? | ?? (Comando) Evalúa expresiones y muestra los resultados. ? | ?? Expression1 [PICTURE cFormatCodes] | [FUNCTION cFormatCodes] | [VnWidth] [AT nColumn] [FONT cFontName [, nFontSize] [STYLE cFontStyle | Expression2 ]] [, Expression3] ... AT nColumn
Especifica el número de la columna en que aparece el resultado. Esta opción permite alinear el resultado en columnas para crear una tabla. La expresión numérica nColumn puede ser una función definida por el usuario que devuelva un valor numérico. FONT cFontName [, nFontSize]
Especifica una fuente para el resultado de ? | ?? cFontName especifica el nombre de la fuente y nFontSize especifica el tamaño en puntos. Por ejemplo, el comando siguiente muestra la fecha del sistema con la fuente Courier de 16 puntos: ? DATE() FONT ‘Courier’,16
Si incluye la cláusula FONT pero omite el tamaño en puntos nFontSize, se usará una fuente de 10 puntos.
Si omite la cláusula FONT y el resultado de ? | ?? se sitúa en la ventana principal de Visual FoxPro, se utilizará para el resultado la fuente de la ventana principal de Visual FoxPro. Si omite la cláusula FONT y el resultado de ? | ?? se sitúa en una ventana definida por el usuario, se utilizará para el resultado la fuente de la ventana definida por el usuario. •
Si la fuente especificada no está disponible, se sustituirá por una fuente de características similares.
STYLE cFontStyle
Especifica un estilo de fuente para el resultado de ? | ?? . Si omite la cláusula STYLE, se utiliza el estilo de fuente Normal. Si el estilo de fuente especificado no está disponible, se sustituye por otro de características similares. Nota: Debe incluir la cláusula FONT cuando especifique un estilo de fuente mediante la cláusula STYLE. Éstos son los estilos de fuente que puede especificar con cFontStyle: Character Estilo de la fuente
B I N O Q S T U
Negrita Cursiva Normal Contorno Opaco Sombra Tachado Transparente Subrayado
Puede incluir más de un carácter para especificar una combinación de estilos de fuente. Por ejemplo, el comando siguiente muestra la fecha del sistema en Courier negrita y cursiva: ? DATE() FONT ‘COURIER’ STYLE ‘BI’
Observaciones ? y ?? evalúan expresiones y envían los resultados a la ventana principal de Visual FoxPro, a una ventana activa definida por el usuario o a la impresora. Si SET PRINTER está definido como ON, los resultados de la expresión se dirigirán a la impresora y a la ventana principal de Visual FoxPro o a una ventana activa definida por el usuario. Si SET PRINTER está definido como ON y SET CONSOLE está definido como OFF, los resultados se dirigirán únicamente a la impresora. Ejemplo ? 15*(10+10) ? ‘Welcome To ‘ picture ‘@!’ ?? ‘Visual FoxPro’ ? date() font ‘courier’,16 ? date() font ‘courier’ style ‘bi’ ? date(1998,02,16) ? nombre = ‘Juan Fernando ‘ ? nombre at 25 ? precio = 123456.30 ? precio * 16 / 100
Vea también ??? (Comando) | @ ... SAY (Comando) | SET MEMOWIDTH (Comando) | SET PRINTER (Comando) | SET SPACE (Comando) | Format (Propiedad) | InputMask (Propiedad)
CLEAR (Comandos) Libera de la memoria el elemento o los elementos especificados. CLEAR [ALL | CLASS ClassName | CLASSLIB ClassLibraryName | DEBUG | DLLS [cAliasNameList ]| EVENTS | FIELDS | GETS | MACROS | MEMORY | MENUS | POPUPS | PROGRAM | PROMPT | READ [ALL] | RESOURCES [ FileName] | TYPEAHEAD | WINDOWS]
Observaciones CLEAR borra la ventana principal de Visual FoxPro o la ventana activa definida por el usuario y libera de la memoria todos los controles @ ... GET pendientes. Se puede incluir CLEAR en archivos de formato. Ejemplo clear
&& Limpiar Pantalla
Vea también @ ... CLEAR | CLOSE | DECLARE - DLL | READ | READ EVENTS | RELEASE | RELEASE CLASSLIB | RELEASE WINDOWS
DATE() (Función) Devuelve la fecha actual del sistema, que está controlada por el sistema operativo, o crea un valor Date compatible con el milenio. DATE([nYear , nMonth, nDay ])
Valores devueltos Date / Fecha Parámetros nYear
Especifica el año devuelto en el valor Date compatible con el milenio. nYear puede tener un valor entre 1 y 9999. nMonth
Especifica el mes devuelto en el valor Date compatible con el milenio. nMonth puede tener un valor entre 1 y 12. nDay
Especifica el día devuelto en el valor Date compatible con el milenio. nDay puede ser un valor entre 1 y 31. Observaciones DATE() devuelve la actual fecha del sistema si se ejecuta sin argumentos opcionales. Incluya los argumentos opcionales para devolver un valor de fecha compatible con el año 2000 en el formato establecido en la ficha Regional del cuadro de diálogo cuadro de diálogo Opciones. Los parámetros ausentes se sustituyen con el valor actual del sistema. Ningún comando o función de Microsoft Visual FoxPro puede cambiar directamente la fecha del sistema. Ejemplo
El ejemplo siguiente muestra la fecha actual del sistema con y sin el siglo, y después, muestra una fecha preparada para el milenio. clear set century off ? date() set century on ? date() ? date(1998,02,16) ? date() + 30 ? actual = date(1998,02,16) ? date() - actual
Vea también CTOD() | DATETIME() | DTOC() | SET CENTURY | SET DATE | SET MARK TO | SYS() - Introducción a las funciones SET CENTURY (Comando) Determina si Microsoft Visual FoxPro mostrará o no el siglo en las expresiones Date y cómo interpreta Visual FoxPro las fechas que sólo especifican los años con 2 dígitos. SET CENTURY ON | OFF | TO [ nCentury [ROLLOVER nYear ]] Parámetros ON Especifica un formato de año con cuatro dígitos que ocupa 10 caracteres (incluidos los delimitadores de fecha). Nota: Para proporcionar compatibilidad con el año 2000, se recomienda que establezca siempre SET CENTURY en ON. OFF (Predeterminado) Especifica un formato de año de dos dígitos que ocupa ocho caracteres y supone el siglo veinte para los cálculos de fechas. Ejemplo set century on
&& Año a 4 Digitos
Vea también DATE() | SET DATASESSION | SET STRICTDATE | SET SYSFORMATS | YEAR() SET DATE (Comando) Especifica el formato para mostrar las expresiones Date y DateTime. SET DATE [TO] AMERICAN | ANSI | BRITISH | FRENCH | GERMAN | ITALIAN | JAPAN | TAIWAN | USA | MDY | DMY | YMD| SHORT | LONG Observaciones A continuación se muestran las configuraciones y los formatos de fecha resultantes: Valor AMERICAN ANSI BRITISH/FRENCH
mm/dd/aa aa.mm.dd dd/mm/aa
Formato
GERMAN ITALIAN JAPAN TAIWAN USA MDY DMY AMD SHORT
dd.mm.aa dd-mm-aa aa/mm/dd aa/mm/dd mm-dd-aa mm/dd/aa dd/mm/aa aa/mm/dd El formato de fecha corto determinado en la configuración de fecha corta del Panel de Control de Windows. El formato de fecha larga determinado en la configuración de fecha larga del Panel de Control de Windows.
LONG
Nota: Cuando se establece SET DATE en SHORT o LONG, las fechas anteriores a {1601-01-01} no serán válidas y generarán un error. La configuración predeterminada es AMERICAN. El valor SET DATE también determina cómo aparecerá la fecha en las expresiones DateTime. Si se establece DATE en SHORT o en LONG, se omitirán los valores de configuración establecidos para SET CENTURY, SET MARK, SET HOURS y SET SECONDS. SET DATE tiene como alcance la sesión actual de datos. Ejemplo set century on set date to dmy
&& Formato dd/mm/aaaa
Vea también DATE() | DATETIME() | SET CENTURY | SET DATASESSION | SET MARK TO | SET SYSFORMATS
TIME() (Función) Devuelve la hora actual del sistema en formato de 24 horas, en una cadena de 8 caracteres (HH:MM:SS). TIME([nExpression])
Valores devueltos Character / Caracter Parámetros nExpression La hora devuelta incluirá las centésimas de segundo si se incluye nExpression. La expresión numérica nExpression puede ser cualquier valor. No obstante, la resolución máxima real es de aproximadamente 1/18 de segundo. Utilice SECONDS() para obtener mayor resolución. Ejemplo ? time() && Imprimir la hora actual
Vea también CTOT() | DATE() | DATETIME() | DTOT() | HOUR() | SEC() | SECONDS() | SET SECONDS | SYS(2) - Segundos desde medianoche
DATETIME() (Función)
Devuelve la fecha y la hora actuales como un valor DateTime o crea un valor DateTime compatible con el milenio. DATETIME([nYear , nMonth, nDay [, nHours [, nMinutes [, nSeconds]]]])
Valores devueltos DateTime / Fecha Hora Parámetros nYear
Especifica el año devuelto en un valor DateTime compatible con el milenio. nYear puede tener un valor entre 1 y 9999. nMonth
Especifica el mes devuelto en un valor DateTime compatible con el milenio. nMonth puede tener un valor entre 1 y 12. nDay
Especifica el día devuelto en un valor DateTime compatible con el milenio. nDay puede tener un valor entre 1 y 31. nHours
Especifica las horas devueltas en un valor DateTime compatible con el milenio. nHours puede tener un valor entre 0 (medianoche) y 23 (11 p.m.). Toma el valor predeterminado 0 si se omite. nMinutes
Especifica los minutos devueltos en un valor DateTime compatible con el milenio. nMinutes puede tener un valor entre 0 y 59. Toma el valor predeterminado 0 si se omite. nSeconds
Especifica los segundos devueltos en un valor DateTime compatible con el milenio. nSeconds puede tomar un valor entre 0 y 59. Toma el valor predeterminado 0 si se omite. Observaciones DATETIME() devuelve la fecha actual del sistema si se ejecuta sin ningún argumento opcional. Los parámetros opcionales de fecha ausentes se sustituyen por los valores actuales del sistema. Un parámetro de hora ausente se sustituye por 12:00:00. Incluya los argumentos opcionales para devolver un valor DateTime compatible con el año 2000 en el formato especificado en la ficha Regional del cuadro de diálogo cuadro de diálogo Opciones. Ejemplo En El ejemplo se usa DATETIME() para crear un valor DateTime compatible con el milenio. clear set century on set date to american ? datetime(1998,02,16,12,34,56) && displays 02/16/1998 12:34:56 pm
Vea también CTOT() | DATE() | DTOT() | HOUR() | SEC() | SECONDS() | SET SECONDS | SET SYSFORMATS | TIME() | TTOC() | TTOD() TYPE() (Función) Evalúa una expresión de carácteres y devuelve el tipo de datos de su contenido. TYPE(cExpression) Valores devueltos Carácter Parámetros cExpression
Especifica la expresión que se va a evaluar, que puede ser una variable, un campo, un campo de memoria o cualquier otra expresión. La expresión se debe transferir como una cadena de carácteres; escriba entre comillas los nombres de las variables de memoria, los campos, etc. Si no escribe la expresión entre comillas, la función TYPE() evaluará el contenido de la cadena. Si no se puede evaluar el contenido como una expresión válida de FoxPro, TYPE() devuelve “U” (expresión no definida). Observaciones La tabla siguiente presenta los caracteres que devuelve TYPE() y sus tipos de datos correspondientes: Tipo de datos Carácter Numérico (También Float, Double e Integer) Currency Fecha DateTime Lógico Memo Objeto General Screen (creado con SAVE SCREEN) Tipo de expresión no definido
Carácter devuelto C N Y D T L M O G S U
Si pasa un orden como un parámetro a TYPE(), entonces el tipo de datos retomados corresponde al primer elemento en el orden. Si desea comprobar el tipo de datos por un elemento específico del orden, entonces debe especificar ese elemento en el parametro. Por ejemplo: ? TYPE(“myarray[3]”)
Puede utilizar además la función TYPE() para comprobar si una variable de memoria es un orden. Por ejemplo: ? TYPE(“myarray[1]”)#”U”
Ejemplo ntest = 1.01 ctest = “string” clear ? type(‘(12 * 3) + 4’) ? type(‘date()’) ? type(‘.f. or .t.’) ? type(‘answer=42’) ? type(‘$19.99’) ? type(‘ntest’)
&& && && && && &&
n d l u y n
? type(‘ctest’)
&& c
Vea también EVALUATE() | SAVE SCREEN | VARTYPE()
SET DEFAULT (Comando) Especifica la unidad o el directorio predeterminados. SET DEFAULT TO [ cPath]
Parámetros cPath
Especifica uno de los elementos siguientes: •
Un designador de unidad.
•
Un designador de unidad con un nombre de directorio.
•
Un nombre de un directorio secundario.
•
Cualquiera de los anteriores, utilizando la notación abreviada de Microsoft MS-DOS ( \ o ..).
Observaciones SET DEFAULT cambia el directorio predeterminado al directorio que usted especifique. Cuando salga de Visual FoxPro, volverá a Microsoft® Windows®. Si sale de Windows, volverá a la unidad y al directorio desde los que inició Windows. Sugerencia: SYS(5) devuelve la unidad predeterminada. SYS(2003) devuelve el directorio predeterminado sin designador de unidad. SYS(5) + SYS(2003) devuelven la unidad y el directorio predeterminados. Ejemplo Set default to z:
Vea también CD | CHDIR | MD | MKDIR | RD | RMDIR | SET PATH | SYS(5) - Unidad predeterminada | SYS(2003) - Directorio actual
CREATE (Comando) Crea una nueva tabla de Visual FoxPro. CREATE [FileName | ?]
Parámetros FileName
Especifica el nombre de la tabla que desea crear. ?
Presenta el cuadro de diálogo Crear, que le pide el nombre para la tabla que se va a crear. Observaciones En Visual FoxPro, si hay una base de datos abierta cuando usted crea una tabla, dicha tabla se agregará
automáticamente a la base de datos. En el sistema operativo de Windows, no puede crear una tabla con el nombre de un dispositivo de MS-DOS, como CON, NUL, PRN y COM1. Debe evitar la utilización de guiones en el nombre de una tabla porque los nombres de tabla con guiones no aparecen en la ventana Sesión de datos y pueden crear confusión con el puntero de alias (->). Una tabla se crea al definir el nombre, tipo y tamaño de cada campo. Una vez creada la estructura de la tabla, puede agregar registros a la tabla. Ejemplo set default to z: create alumnos
Vea también ADD TABLE (Comando) | ALTER TABLE - SQL (Comando) | CREATE DATABASE (Comando) | CREATE TABLE - SQL (Comando) | MODIFY STRUCTURE (Comando)
USE (Comando) Abre una tabla y sus archivos de índice asociados, o una vista SQL. USE [[DatabaseName!]Table | SQLViewName | ?] [IN nWorkArea | cTableAlias] [ONLINE] [ADMIN] [AGAIN] [NOREQUERY [nDataSessionNumber ]] [NODATA] [INDEX IndexFileList | ? [ORDER [nIndexNumber | IDXFileName | [TAG] TagName [OF CDXFileName] [ASCENDING | DESCENDING]]]] [ALIAS cTableAlias] [EXCLUSIVE] [SHARED] [NOUPDATE] [CONNSTRING cConnectionString | (m.nStatementHandle) ] Parámetros [DatabaseName!]TableName Especifica el nombre de la tabla que se va a abrir. Puesto que los espacios en blanco son importantes en los nombres de archivo de Microsoft Windows 98 y posteriores, evite usar espacios adicionales en TableName. Si un nombre de tabla contiene espacios, escríbalo entre comillas (“ “ o ‘ ‘) Para abrir una tabla fuera de la base de datos actual, identifique la tabla con el nombre de la base de datos, con un signo de exclamación (!) para separar el nombre de la base de datos del nombre de la tabla. Si no identifica una tabla con un nombre de base de datos, Microsoft Visual FoxPro sólo podrá abrir las tablas de la base de datos actual. Si el nombre de la base de datos, el nombre de la tabla o ambos contienen espacios, escriba el nombre de la base de datos y el nombre de la tabla entre comillas (“ “ o ‘ ‘) ? Muestra el cuadro de diálogo Uso, que le permite elegir una tabla para abrirla. IN nWorkArea Especifica el área de trabajo en la que se abre la tabla. Puede cerrar una tabla de un área de trabajo determinada, ejecutando USE con la cláusula IN y el número del área de trabajo. La cláusula IN admite 0 como área de trabajo. Al incluir 0, se abrirá una tabla en el área de trabajo que tenga el número más bajo. Por ejemplo, si hay tablas abiert as en las áreas de trabajo de 1 a 10, el siguiente comando abrirá la tabla customer en el área de trabajo 11: USE customer IN 0 IN cTableAlias
Especifica que la tabla se abre en el área de trabajo de una tabla que está abierta actualmente. El alias de la tabla abierta se especifica con cTableAlias. Si omite nWorkArea y cTableAlias, la tabla se abrirá en el área de trabajo seleccionada actualmente. AGAIN Para abrir una tabla de forma simultánea en varias áreas de trabajo, puede realizar alguna de las acciones siguientes: •
Seleccionar otra área de trabajo y ejecutar USE con el nombre de la tabla y la cláusula AGAIN.
•
Ejecutar USE con el nombre de la tabla y la cláusula AGAIN, y especificar un área de trabajo distinta con la cláusula IN.
Cuando vuelva a abrir una tabla en otra área de trabajo, la tabla de la nueva área de trabajo tomará los atributos de la tabla del área de trabajo original. Por ejemplo, si la tabla se abre para acceso de sólo lectura o exclusivo, y se vuelve a abrir en otra área de trabajo, la tabla se abrirá con el mismo tipo de
acceso en la nueva área de trabajo. Los archivos de índice abiertos para la tabla original estarán disponibles para la tabla que vuelva a abrir si no abre ningún índice al abrir de nuevo la tabla. El orden de índice se establecerá en 0 en las áreas de trabajo donde vuelva a abrir la tabla. Puede abrir índices que no estuvieran abiertos en la tabla original. El orden de índice se establece en 0 para la tabla original. A una tabla abierta de nuevo se le asigna el alias predeterminado del área de trabajo. Puede incluir un alias cada vez que abra una tabla en varias áreas de trabajo, siempre y cuando los alias sean únicos. En Visual FoxPro para Windows, al volver a abrir una tabla en otra área de trabajo no se consume ningún controlador de archivo adicional. NOREQUERY [nDataSessionNumber ]
Especifica que los datos de una vista SQL remota no se vuelvan a descargar. NOREQUERY solamente está disponible para vistas SQL y se suele utilizar cuando se vuelve a abrir una vista SQL, incluyendo la cláusula AGAIN. Al incluir la cláusula NOREQUERY se mejora el rendimiento de grandes conjuntos de datos porque no es necesario volver a descargar los datos. nDataSessionNumber puede incluirse para especificar que los datos para una vista SQL remota de una sesión de datos determinada no se descarguen de nuevo. Si se omite nDataSessionNumber, los datos no se descargarán para la vista abierta en la sesión de datos actual. Para obtener información adicional acerca de la cláusula NOREQUERY, vea Crear vistas. NODATA
Especifica que sólo se descargue la estructura de una vista SQL. Los datos de la vista SQL no se descargan. NODATA es el método más rápido de determinar la estructura de una vista SQL. Para obtener más información acerca de la cláusula NODATA, vea Crear vistas. INDEX IndexFileList
Especifica un conjunto de índices que se deben abrir junto con la tabla. Si una tabla tiene un archivo de índice compuesto estructural, el archivo de índice se abrirá automáticamente con la tabla. IndexFileList puede contener cualquier combinación de nombres de archivos de índice .idx de una sola entrada y .cdx de entrada compuesta. No necesita incluir las extensiones de los nombres de los archivos de índice, a no ser que haya archivos .idx y .cdx con el mismo nombre en la lista de archivos. El archivo de índice cuyo nombre aparezca el primero en la lista de archivos de índice será el archivo de índice de control, y controlará cómo se tiene acceso y se muestran los registros de la tabla. Si el primer archivo de índice es un archivo de índice compuesto .cdx, se mostrarán los registros de la tabla y se tendrá acceso a ellos en el orden físico de los registros. INDEX ?
Muestra el cuadro de diálogo Abrir con una lista de archivos de índice disponibles entre los que puede elegir. ORDER [nIndexNumber ]
Especifica una etiqueta de archivo de índice .cdx compuesto o un archivo .idx de índice de una sola entrada de control principal distinto del primer archivo de índice o de la primera etiqueta de índice especificados en IndexFileList.
Los archivos de índice .idx se numeran primero en el orden en que aparecen en la lista de archivos de índice. Las etiquetas de los archivos de índice compuesto estructural (si existe alguno) se numeran entonces en el orden en que se crearon las etiquetas. Por último, las etiquetas de todos los archivos de índice compuesto independientes se numeran en el orden en que se crearon. También puede utilizar SET ORDER para especificar el archivo de índice o la etiqueta de control. Vea SET ORDER para obtener más información acerca de la numeración de archivos y etiquetas de índice. Si nIndexNumber es 0, los registros de la tabla se mostrarán y se tendrá acceso a ellos en el orden físico de los registros, y los registros permanecerán abiertos. La inclusión de ORDER 0 permitirá que todos los archivos de índice abiertos se actualicen mientras se presentan los registros ordenados por el número de registro. Incluir ORDER sin nIndexNumber es idéntico a incluir ORDER 0. ORDER [IDXFileName]
Especifica un archivo de índice .idx de una sola entrada como archivo de índice de control principal. ORDER [TAG TagName] [OF CDXFileName]
Especifica una etiqueta de control principal en un archivo de índice .cdx compuesto. El nombre de la etiqueta puede ser de un archivo de índice compuesto estructural o de cualquier archivo de índice compuesto que esté abierto. Si existen nombres de etiqueta idénticos en los archivos de índice compuesto abiertos, incluya OF CDXFileName y especifique el nombre del archivo de índice compuesto que contiene la etiqueta deseada. ASCENDING
Especifica que se tiene acceso y se muestran los registros de la tabla en orden ascendente. DESCENDING
Especifica que se tiene acceso y se muestran los registros de la tabla en orden descendente. La inclusión de ASCENDING o DESCENDING no cambia el archivo o la etiqueta de índice: solamente altera el orden en que se muestran y se tiene acceso a los registros. ALIAS cTableAlias
Crea un alias para la tabla. Puede hacer referencia a una tabla por su alias en los comandos y funciones que requieren o admiten un alias. Cuando se abre una tabla, se le asigna automáticamente un alias, que es el nombre de la tabla si no se incluye ALIAS. Puede crear un alias nuevo o distinto para la tabla si incluye ALIAS. En Visual FoxPro, un alias puede contener hasta 254 letras, dígitos o signos de subrayado, y debe comenzar por una letra o un signo de subrayado. En las demás versiones de FoxPro, los alias pueden contener como máximo 10 letras, dígitos o signos de subrayado, y deben comenzar por una letra o un signo de subrayado. Se asigna automáticamente un alias predeterminado cuando abre una sola tabla de forma simultánea en varias áreas de trabajo con AGAIN y no se especifica un alias al abrir la tabla en cada área de trabajo. EXCLUSIVE
Abre la tabla para uso exclusivo en una red. Para obtener más información acerca del uso exclusivo de tablas, vea SET EXCLUSIVE.
SHARED
Abre una tabla para uso compartido en una red. SHARED permite abrir una tabla para uso compartido, incluso cuando EXCLUSIVE está establecido en ON. NOUPDATE
Impide realizar cambios en la tabla y en su estructura. Observaciones Si se ejecuta USE sin un nombre de tabla y está abierto un archivo de tabla en el área de trabajo actual, la tabla se cerrará. También se cerrará la tabla cuando se abra otra tabla en la misma área de trabajo. No puede tener abierta más de una tabla a la vez en una misma área de trabajo. Ejemplo use use alumnos use z:\alumnos
Vea también CREATE | CREATE SQL VIEW | CREATE TABLE - SQL | CREATEOFFLINE() | DBF() | INDEX | USED() | Crear vistas | SET EXCLUSIVE
APPEND (Comando) Agrega uno o más registros nuevos al final de una tabla. APPEND [BLANK] [IN
nWorkArea | cTableAlias] [NOMENU]
Parámetros BLANK
Agrega un registro en blanco al final de la tabla activa. Visual FoxPro no abre ninguna ventana de edición cuando usted ejecuta APPEND BLANK. Es posible modificar los nuevos registros con BROWSE, CHANGE o EDIT. IN nWorkArea
Especifica el área de trabajo de la tabla a la que se agrega el nuevo registro. IN cTableAlias
Especifica el alias de la tabla a la que se agrega el nuevo registro. Si omite nWorkArea y cTableAlias, se agregará un nuevo registro a la tabla en el área de trabajo seleccionada actualmente. Si ejecuta APPEND, se agregará un registro en blanco a la tabla especificada mediante nWorkArea o cTableAlias, y la tabla se seleccionará automáticamente. Si ejecuta APPEND BLANK, se agregará un registro en blanco a la tabla especificada con nWorkArea o cTableAlias, y la tabla no se seleccionará. NOMENU
Especifica que se eliminará el título de menú Tabla de la barra de menús del sistema, lo que impide efectuar cambios en el formato de la ventana de edición. Observaciones El cuadro de diálogo Abrir aparece cuando ejecuta APPEND o APPEND BLANK y no hay una tabla abierta en el
área de trabajo activa. Elija una tabla para agregar registros. APPEND abre una ventana de edición para que pueda escribir datos en uno o varios registros nuevos. Cuando agregue un nuevo registro, Visual FoxPro actualizará cualquier índice que haya abierto. Ejemplo append blank append
&& Adiciona un registro en blanco && Adiciona un registro y lo edita en blanco
Vea también APPEND FROM ARRAY | BROWSE | CHANGE | EDIT | INSERT - SQL | REPLACE
BOF() (Función) Determina si el puntero de registro está situado al principio de una tabla. BOF([nWorkArea | cTableAlias])
Valores devueltos Lógico Parámetros nWorkArea
Especifica el número del área de trabajo para una tabla abierta en otra área de trabajo. cTableAlias
Especifica el alias para una tabla abierta en otra área de trabajo.
Si la tabla cuya condición de principio de archivo desea probar está abierta en un área de trabajo distinta de la seleccionada actualmente, utilice estos argumentos opcionales para especificar el número del área de trabajo o el alias para la tabla. Si no hay ninguna tabla abierta en el área de trabajo especificada, BOF() devolverá Falso (.F.). Observaciones Utilice BOF() para probar la condición de principio de archivo de una tabla. BOF() devuelve Verdadero (.T.) si ha intentado mover el puntero de registro a una posición anterior al primer registro de la tabla. Vea también EOF() | FEOF() (Función) | _FEOF() (Rutina de biblioteca API)
EOF() (Función) Determina si el puntero de registro está situado o no más allá del último registro de la tabla actual o especificada. EOF([nWorkArea | cTableAlias])
Valores devueltos Logical Parámetros nWorkArea
Especifica el número de área de trabajo de la tabla. cTableAlias
Especifica el alias de la tabla. EOF() devuelve falso (.F.) si no está abierta una tabla en un área de trabajo que especifique. Si no especifica un alias de área de trabajo, se probará la condición de final de archivo en la tabla abierta en el área de trabajo seleccionada. Observaciones EOF() devuelve verdadero (.T.) si el puntero de registro alcanza el final del archivo de tabla (EOF). El final de la tabla se alcanza cuando el puntero del registro transfiere el último registro de la tabla. Por ejemplo, cuando se ejecuta FIND, LOCATE o SEEK sin éxito, Visual FoxPro mueve el puntero de registro hasta después del último registro, y EOF() devuelve verdadero (.T.). EOF() devuelve falso (.F.) si el puntero del registro no está al final de la tabla. Vea también BOF() | GO | GOTO | SKIP
Si la tabla cuya condición de principio de archivo desea probar está abierta en un área de trabajo distinta de la seleccionada actualmente, utilice estos argumentos opcionales para especificar el número del área de trabajo o el alias para la tabla. Si no hay ninguna tabla abierta en el área de trabajo especificada, BOF() devolverá Falso (.F.). Observaciones Utilice BOF() para probar la condición de principio de archivo de una tabla. BOF() devuelve Verdadero (.T.) si ha intentado mover el puntero de registro a una posición anterior al primer registro de la tabla. Vea también EOF() | FEOF() (Función) | _FEOF() (Rutina de biblioteca API)
EOF() (Función) Determina si el puntero de registro está situado o no más allá del último registro de la tabla actual o especificada. EOF([nWorkArea | cTableAlias])
Valores devueltos Logical Parámetros nWorkArea
Especifica el número de área de trabajo de la tabla. cTableAlias
Especifica el alias de la tabla. EOF() devuelve falso (.F.) si no está abierta una tabla en un área de trabajo que especifique. Si no especifica un alias de área de trabajo, se probará la condición de final de archivo en la tabla abierta en el área de trabajo seleccionada.
Observaciones EOF() devuelve verdadero (.T.) si el puntero de registro alcanza el final del archivo de tabla (EOF). El final de la tabla se alcanza cuando el puntero del registro transfiere el último registro de la tabla. Por ejemplo, cuando se ejecuta FIND, LOCATE o SEEK sin éxito, Visual FoxPro mueve el puntero de registro hasta después del último registro, y EOF() devuelve verdadero (.T.). EOF() devuelve falso (.F.) si el puntero del registro no está al final de la tabla. Vea también BOF() | GO | GOTO | SKIP
GO | GOTO (Comando) Coloca el puntero de registro en el número de registro especificado de u na tabla. GO [RECORD] nRecordNumber [IN nWorkArea IN cTableAlias]
–O bien– GO TOP | BOTTOM [IN nWorkArea | IN cTableAlias]
–O bien– GOTO [RECORD] nRecordNumber [IN nWorkArea | IN cTableAlias]
–O bien– GOTO TOP | BOTTOM [IN nWorkArea | IN cTableAlias]
Parámetros RECORD nRecordNumber
Especifica el número de registro físico al que desea mover el puntero de registro. Puede omitir por completo GO o GOTO y especificar simplemente el número de registro. Si especifica solamente el número de registro, podrá mover el puntero solamente en el área de trabajo actual. IN nWorkArea
Especifica el área de trabajo de la tabla en la cual se mueve el puntero de registro. IN cTableAlias
Especifica el alias de la tabla en la cual se mueve el puntero de registro. TOP
Sitúa el puntero de registro en el primer registro de la tabla. Si la tabla tiene en uso un índice ascendente, el primer registro será el registro con el valor clave más bajo. Si el índice está en orden descendente, el primer registro será el registro con el valor clave más alto. BOTTOM
Sitúa el puntero de registro en el último registro de la tabla. Si la tabla tiene activo un índice ascendente, el último registro será aquél con el valor de clave más elevado. Si el índice está en orden descendente, el último registro será el que tenga el menor valor de clave. Observaciones GO y GOTO pueden utilizarse indistintamente. Estos comandos actúan sobre la tabla del área de trabajo actual a menos que especifique otra área de trabajo con la cláusula IN. Ejemplo go top go bottom go 5 skip 1 ? recno() skip -2 skip
Vea también RECNO() | SELECT | SKIP
SKIP (Comando)
Mueve el puntero de registro hacia adelante o hacia atrás en una tabla. SKIP [nRecords ] [IN nWorkArea | cTableAlias]
Parámetros nRecords
Especifica el número de registros que hay que mover el puntero. Si ejecuta SKIP sin nRecords, el puntero avanzará al siguiente registro. El puntero de registro se mueve hacia el final del archivo nRecords si nRecords tiene un valor positivo. El puntero de registro se moverá hacia el principio del archivo nRecords si nRecords tiene un valor negativo. Si el puntero de registro está colocado en el último registro de una tabla y se ejecuta SKIP sin argumentos, RECNO() devolverá un valor superior en uno al número de registros de la tabla y EOF() devolverá verdadero (.T.). Si el puntero de registro está colocado en el primer registro de una tabla y se ejecuta SKIP -1, RECNO() devolverá 1 y BOF() devolverá (.T.). IN nWorkArea | cTableAlias
Mueve el puntero de registro en una tabla de un área de trabajo específica. nWorkArea especifica el número del área de trabajo y cTableAlias especifica el alias de una tabla o de un área de trabajo. Observaciones Si la tabla tiene una etiqueta de índice de control principal o un archivo de índice, SKIP mueve el puntero de registro al registro determinado por la secuencia de índice. Ejemplo clear skip 4 ? recno() go bottom skip -5 ? recno()
Vea también GO | GOTO | SET SKIP | CLEAR (Comandos)
RECNO() (Función) Devuelve el número del registro actual de la tabla actual o la especificada. RECNO([nWorkArea | cTableAlias])
Valores devueltos Numérico Parámetros nWorkArea
Especifica el número del área de trabajo para una tabla abierta en otra área de trabajo. Si no está abierta ninguna tabla en el área de trabajo que especifica, RECNO() devolverá cero. cTableAlias
Especifica el alias para una tabla abierta en otra área de trabajo. Observaciones El registro actual es el registro en el cual se encuentra el puntero de registro. RECNO() devuelve números negativos para registros anexados en un búfer de tablas. RECNO() devuelve un valor que es el número de registros de la tabla más uno si el puntero de registro se encuentra mas allá del último registro de la misma. RECNO() devuelve 1 si el puntero de registro se encuentra antes del primer registro de la tabla. Si la tabla no tiene registros, EOF() siempre devolverá verdadero (.T.). Ejecutar RECNO() sin los argumentos opcionales nWorkArea o cTableAlias devuelve el número de registro actual de la tabla situada en el área de trabajo seleccionada actualmente. Si ha ejecutado SEEK sin éxito en una tabla indizada, puede especificar 0 para que nWorkArea utilice la lógica de “búsqueda cercana” para devolver el número del registro más similar. RECNO(0) devuelve 0 si no puede encontrarse ninguna coincidencia. Visual FoxPro generará un mensaje de error si ejecuta GO RECNO(0) y no se encuentra ninguna coincidencia. Ejemplo use alumnos skip 4 ? recno()
Vea también GO|GOTO | RECCOUNT() | RECSIZE() | SEEK | SKIP
RECCOUNT() (Función) Devuelve el número de registros de la tabla actual o especificada. RECCOUNT([nWorkArea | cTableAlias])
Valores devueltos Numérico Parámetros nWorkArea
Especifica el número del área de trabajo para una tabla abierta en otra área de trabajo. Si no hay ninguna tabla abierta en el área de trabajo especificada, RECCOUNT() devolverá cero. cTableAlias
Especifica el alias para una tabla abierta en otra área de trabajo. Observaciones El valor devuelto por RECCOUNT() no se ve afectado por SET DELETED y SET FILTER. RECCOUNT() sin los argumentos opcionales nWorkArea o cTableAlias devuelve el número de registros de la tabla del área de trabajo seleccionada actualmente. Ejemplo
use alumnos ? reccount() use
Vea también RECNO() | RECSIZE() | SET DELETED | SET FILTER
LOCATE (Comando) Busca secuencialmente en la tabla el primer registro que coincida con la expresión lógica especificada. LOCATE [FOR lExpression1] [Scope] [WHILE] [NOOPTIMIZE]
Parámetros FOR lExpression1
LOCATE busca secuencialmente en la tabla actual el primer registro que coincida con la expresión lógica lExpression1. Rushmore optimizará una consulta creada con LOCATE FOR si lExpression1 es una expresión optimizable. Para obtener el máximo rendimiento, utilice una expresión optimizable en la cláusula FOR. Si desea obtener más información, vea SET OPTIMIZE y Utilizar optimización de consultas Rushmore para acelerar el acceso de datos. Scope
Especifica el intervalo de objetos que se buscará. Solamente se buscarán los registros incluidos en el intervalo. Las cláusulas de alcance son: ALL, NEXT nRecords, RECORD nRecordNumber y REST. Los comandos que incluyen Scope sólo actúan sobre la tabla del área de trabajo activa. El alcance predeterminado de LOCATE es ALL (todos los registros). WHILE lExpression2
Especifica una condición por la cual se buscan los registros siempre y cuando la expresión lógica lExpression2 dé como resultado verdadero (.T.). NOOPTIMIZE
Desactiva la optimización Rushmore de LOCATE. Si desea obtener más información, vea SET OPTIMIZE y Utilizar optimización de consultas Rushmore para acelerar el acceso de datos. Observaciones No es necesario que la tabla esté indizada. Si utiliza el comando LOCATE sin la expresión FOR, Visual FoxPro coloca el puntero del registro en el primer registro lógico. Esto es más rápido que utilizar GO TOP cuando se utiliza un filtro o cuando DELETED está establecido a ON. Si LOCATE encuentra un registro coincidente, podrá utilizar RECNO() para devolver el número del registro coincidente. Si se encuentra un registro coincidente, FOUND() devolverá verdadero (.T.) y EOF() devolverá falso (.F.). Si SET TALK está establecido en ON, se mostrará el número del registro coincidente. Después de que LOCATE encuentre un registro coincidente, puede ejecutar CONTINUE para buscar registros
coincidentes adicionales en el resto de la tabla. Cuando se ejecuta CONTINUE, se reanuda el proceso de búsqueda a partir del registro que sigue inmediatamente al registro coincidente. Puede ejecutar CONTINUE repetidamente hasta llegar al final del alcance o de la tabla. Si no se encuentra ninguna coincidencia, RECNO() devolverá el número de registros de la tabla más uno, FOUND() devolverá falso (.F.) y EOF() devolverá verdadero (.T.). LOCATE y CONTINUE son específicos del área de trabajo actual. Si se selecciona otra área de trabajo, el proceso de búsqueda original podrá continuarse cuando se vuelva a seleccionar el área de trabajo original. Ejemplo En el ejemplo siguiente se encuentran los registros correspondientes al alumno “Amparo”. A continuación se muestra el número total. use alumnos set talk off store 0 to contador && contador = 0 locate for “Amparo” $ nombre do while found() contador = contador + 1 ? nombre continue enddo ? ‘Total alumnos que contienen Amparo en el nombre … ‘ + alltrim(str(contador)) Vea también CONTINUE | EOF() | FIND | FOUND() | INDEXSEEK() | RECNO() | SEEK | SEEK() | SET OPTIMIZE
CONTINUE (Comando) Continúa el comando LOCATE previo. CONTINUE
Observaciones CONTINUE se utiliza después de que LOCATE tenga éxito al encontrar un registro, para continuar la operación de búsqueda. CONTINUE desplaza el puntero de registro al siguiente registro para el que la expresión lógica especificada en el comando LOCATE previo dé como resultado verdadero (.T.). CONTINUE puede repetirse hasta que se encuentre el final del archivo o hasta que se llegue al final del alcance especificado en LOCATE. Si CONTINUE tiene éxito al encontrar un registro, RECNO() devolverá el número del registro, FOUND() devolverá el valor Verdadero (.T.) y EOF() devolverá el valor Falso (.F.). Si CONTINUE no tiene éxito al buscar un registro, RECNO() devolverá el número de registros de la tabla más uno, FOUND() devolverá Falso (.F.) y EOF() devolverá Verdadero (.T.). Vea también EOF() | FOUND() | LOCATE | SEEK
$ (Operador) Devuelve verdadero (.T.) si una expresión de caracteres está contenida dentro de otra expresión de caracteres;
de lo contrario, devuelve falso (.F.). cSearchFor $ cSearchIn
Valores devueltos Lógico Parámetros cSearchFor
Especifica la expresión buscada en cSearchIn. cSearchIn
Especifica la expresión en que se busca para comprobar si contiene cSearchFor. Si en cSearchFor se encuentra cSearchIn, $ devolverá verdadero (.T.); de lo contrario, devolverá falso (.F.). cSearchFor y cSearchIn pueden ser variables o elementos de matriz de tipo carácter, campos de tipo carácter, literales de cadena de caracteres o campos memo de cualquier longitud. Los campos memo pueden manipularse de la misma forma que las expresiones de caracteres, los campos de tablas, las variables o los elementos de matriz. Por ejemplo, si MEMO_FLD es un campo memo, lo siguiente será aceptable: LIST FOR ‘FOX’ $ UPPER(memo_fld)
Observaciones Si no se encuentra la expresión de caracteres, se devolverá falso (.F.). El operador $ distingue mayúsculas de minúsculas y no es optimizable mediante Rushmore. Ejemplo En el ejemplo siguiente se encuentran los registros correspondientes al alumno “Amparo”. A continuación se muestra el número total. use alumnos set talk off store 0 to contador && contador = 0 locate for “Amparo” $ nombre do while found() contador = contador + 1 ? nombre continue enddo ? ‘Total alumnos que contienen Amparo en el nombre … ‘ + alltrim(str(contador))
Vea también % (Operador) | DELETE FILE (Comando) | CREATE TABLE - SQL (Comando) | Utilizar optimización de consultas Rushmore para acelerar el acceso de datos | AT() | Operadores | ATLINE() | RAT() | RATLINE() | OCCURS() | INLIST() (Función) DO WHILE ... ENDDO (Comando) Ejecuta un conjunto de comandos dentro de un bucle condicional. DO WHILE lExpression
Commands [LOOP] [EXIT] ENDDO Parámetros lExpression Especifica una expresión lógica cuyo valor determina si se debe ejecutar el conjunto de comandos incluido entre DO WHILE y ENDDO. Siempre que lExpression dé como resultado verdadero (.T.), el conjunto de comandos se ejecutará. Commands Especifica el conjunto de comandos de Visual FoxPro que se ejecutan siempre y cuando lExpression dé como resultado verdadero (.T.). LOOP Devuelve el control del programa directamente a DO WHILE. LOOP se puede situar en cualquier lugar entre DO WHILE y ENDDO. EXIT Transfiere el control del programa desde el interior del bucle DO WHILE hasta el primer comando situado detrás de ENDDO. EXIT puede situarse en cualquier lugar entre DO WHILE y ENDDO. Observaciones Un conjunto de comandos situados entre DO WHILE y ENDDO se ejecuta siempre y cuando el valor de la expresión lógica lExpression sea verdadero (.T.). Una instrucción DO WHILE debe tener su correspondiente instrucción ENDDO. Puede situar observaciones después de DO WHILE y ENDDO en la misma línea. Estos observaciones se pasan por alto durante la compilación y ejecución del programa. Ejemplo En el ejemplo siguiente se encuentran los registros correspondientes al alumno “Amparo”. A continuación se muestra el número total. use alumnos set talk off store 0 to contador && contador = 0 locate for “Amparo” $ nombre do while found() contador = contador + 1 ? nombre continue enddo ? ‘Total alumnos que contienen Amparo en el nombre … ‘ + alltrim(str(contador)) Vea también DO CASE ... ENDCASE | FOR EACH ... ENDFOR | FOR ... ENDFOR | IF ... ENDIF | IIF() | SCAN ... ENDSCAN FOUND() (Función) Devuelve verdadero (.T.) si CONTINUE, FIND, INDEXSEEK(), LOCATE o SEEK tienen éxito.
FOUND([nWorkArea | cTableAlias]) Valores devueltos Lógico Parámetros nWorkArea Especifica el área de trabajo de la tabla sobre la cual FOUND() devuelve el valor indicando si ha tenid o éxito el último comando CONTINUE, FIND, INDEXSEEK(), LOCATE o SEEK. FOUND() devuelve falso (.F.) si la tabla no esta abierta en el área de trabajo especificada. cTableAlias Especifica el alias de la tabla sobre la cual FOUND() devuelve el valor indicando si ha tenido éxito el último comando CONTINUE, FIND, INDEXSEEK(), LOCATE, o SEEK. Visual FoxPro genera un mensaje de error si especifica un alias de tabla que no existe. Observaciones FOUND() devuelve un valor lógico que indica si el comando mas recientemente ejecutado CONTINUE, FIND, INDEXSEEK(), LOCATE o SEEK ha tenido éxito, o si el puntero de registro se ha movido en la tabla relacionada. FOUND() devuelve verdadero (.T.) si la busqueda se ha realizado con éxito; en caso contrario FOUND() devuelve falso (.F.). Si se omiten los argumentos opcionales, FOUND() devuelve un valor indicando el éxito del último comando CONTINUE, FIND, INDEXSEEK(), LOCATE o SEEK para la tabla abierta en el área de trabajo actual. Sugerencia Esta función es útil para determinar si una tabla secundaria tiene un registro que coincide con el registro primario. Ejemplo En el ejemplo siguiente se encuentran los registros correspondientes al alumno “Amparo”. A continuación se muestra el número total. use alumnos set talk off store 0 to contador && contador = 0 locate for “Amparo” $ nombre do while found() contador = contador + 1 ? nombre continue enddo ? ‘Total alumnos que contienen Amparo en el nombre … ‘ + alltrim(str(contador)) Vea también CONTINUE | EOF() | FIND | INDEXSEEK() | LOCATE | SEEK STORE (Comando) Almacena datos en una variable, en una matriz o en un elemento de matriz. STORE eExpression TO VarNameList | ArrayNameList-or- VarName | ArrayName = eExpression Parámetros
eExpression Especifica una expresión cuyo valor se almacena en la variable, la matriz o el elemento de matriz. Si no existe la variable, se crea y se inicializa en eExpression. Una matriz debe estar definida previamente con DIMENSION. STORE sustituye el valor de una variable, matriz o elemento de matriz existente con el valor nuevo. VarNameList Especifica una lista de variables o elementos de matriz en los que se almacena eExpression. Separe los nombres o elementos de matriz con comas. ArrayNameList Especifica una lista de nombres de matrices existentes en las que se almacena eExpression. Separe con comas el nombre de las matrices. STORE inicializa cada elemento de las matrices con el valor especificado si SET COMPATIBLE está establecido en OFF. STORE almacena el valor especificado en variables de memoria con los nombres especificados si SET COMPATIBLE está establecido en ON y sobrescribe las matrices existentes que tengan esos nombres. Observaciones Una alternativa a STORE es el signo igual (=). La variable, la matriz o el elemento de matriz debe estar a la izquierda del signo igual, y su valor a la derecha. Las fechas pueden almacenarse directamente en variables, matrices o elementos de matriz mediante llaves. store {^1998-12-25} to gdxmas
El número máximo de variables o matrices que puede crear se muestra en el tema Capacidades del sistema. El límite se puede aumentar o reducir en el archivo de configuración de Visual FoxPro. Para obtener más información acerca de la configuración de Visual FoxPro, vea Personalizar el entorno de Visual FoxPro. Ejemplo store date() to gddate store 50 to gnnumeric store ‘hello’ to gccharacter store .t. to gllogical store $19.99 to gycurrency dimension gamyarray(2,2) set compatible off store 2 to gamyarray
Vea también DIMENSION | SET COMPATIBLE | Capacidades del sistema | Personalizar el entorno de Visual FoxPro VAL() (Función) Devuelve un valor numérico a partir de una expresión de caracteres compuesta por números. Puede usar VAL() para convertir cadenas de caracteres devueltas por las funciones SYS() de Visual FoxPro en valores numéricos. VAL(cExpression) Parámetros cExpression
Especifica una expresión de caracteres compuesta por un máximo de 16 números. Si en cExpression se incluyen más de 16 números, se redondeará. Si el primer carácter de cExpression es un signo de dolar ($), VAL() devuelve un valor moneda. En todas las demás situaciones VAL() devuelve un valor numérico. Valores devueltos Dato del tipo Numérico o Moneda. VAL() devuelve los números de la expresión de caracteres de izquierda a derecha hasta que encuentra un carácter no numérico. Se pasan por alto los espacios en blanco iniciales.VAL() devuelve 0 si el primer carácter de la expresión de caracteres no es un número, un signo de dolar ($), un signo más (+) o un signo menos (-). Ejemplo clear store ‘12’ to a store ‘13’ to b ? val(a) + val(b) && displays 25.00 store ‘1.25e3’ to c ? 2 * val(c) && displays 2500.00 Vea también SET DECIMALS | STR() | SYS() - Introducción a las funciones STR() (Función) Devuelve el carácter equivalente a una expresión numérica especificada. STR(nExpression [, nLength [, nDecimalPlaces]]) Valores devueltos Character Parámetros nExpression Especifica la expresión numérica evaluada por STR(). nLength Especifica la longitud de la cadena de caracteres devuelta por STR(). La longitud incluye un carácter para la coma decimal y otro por cada dígito a la derecha de la coma decimal. STR() llena la cadena de caracteres con espacios al principio si especifica una longitud mayor que el número de dígitos a la izquierda de la coma decimal. STR() devuelve una cadena de asteriscos, que indica desbordamiento numérico, si especifica una longitud inferior al número de dígitos a la izquierda de la coma decimal. Si nExpression es de tipo Numérico o Float, STR() devuelve un valor en notación científica si nLength es menor que el número de dígitos de nExpression. Si nExpression es un entero, STR() devuelve una cadena de asteriscos, que indica desbordamiento numérico, si nLength es menor que el número de dígitos de nExpression. Si no se incluye nLength, la longitud de la cadena de caracteres cambia de forma predeterminada a
10 caracteres. nDecimalPlaces Especifica el número de lugares decimales de la cadena de caracteres devuelta por STR(). Debe incluir nLength para especificar el número de lugares de cimales. Si se especifican menos caracteres decimales de los que contiene nExpression, El valor devuelto se redondeará. Si no se incluye nDecimalPlaces, el valor predeterminado para lugares decimale s es cero. Ejemplo clear store 12345 to a store 67890 to b ? str(a) + str(b) && displays 1234567890 ? str(b) + str(a) && displays 6789012345 Vea también VAL() | Crear expresiones de tipo Numérico | S TRCONV() (Función) ALLTRIM() (Función) Elimina los espacios en blanco iniciales y finales de la expresión de caracteres especificada y devuelve la expresión recortada como una cadena de caracteres. ALLTRIM(cExpression) Valores devueltos Character Parámetros cExpression Especifica la expresión de caracteres de la que se eliminan los espacios en blanco iniciales y finales. Observaciones ALLTRIM() se puede utilizar para asegurar que los espacios en blanco se eliminan de los datos escritos por un usuario. Ejemplo clear store “ Instituto “ to a store “ Tecnico Educando a Colombia ” to b ? a + b && displays Instituto Tecnico Educando a Colombia ? len(a + b) && displays 44 ? len(alltrim(a) + alltrim(b) && displays 36 ? alltrim(a) + “ “ + alltrim(b) && diaplys Instituto Tecnico Educando a Colombia Vea también LTRIM() | RTRIM() | TRIM() | AFONT() LTRIM() (Función)
Devuelve la expresión de caracteres especificada después de eliminar los espacios en blanco iniciales. LTRIM(cExpression) Valores devueltos Character Parámetros cExpression Especifica la expresión de caracteres en la cual LRTRIM() elimina los espacios en blanco iniciales. Observaciones Esta función es especialmente útil para eliminar los espacios en blanco iniciales que se insertan cuando se utiliza STR() para convertir un valor numérico en una cadena de caracteres. Ejemplo clear store “ Instituto “ to a ?a ? ltrim(a) Vea también ALLTRIM() | LEFT() | RIGHT() | RTRIM() | SUBSTR() | TRIM() RTRIM() (Función) Devuelve la expresión de caráacteres especificada con todos los espacios en blanco finales recortados. RTRIM(cExpression) Valores devueltos Carácter (Character) Parámetros cExpression Especifica la expresión de carácteres de la cual se deben recortar los espacios en blanco finales. Observaciones RTRIM() puede utilizarse para asegurarse de que se quitan los espacios en blanco de los datos introducidos por un usuario. La función RTRIM() es idéntica a TRIM(). Ejemplo clear store “ Instituto “ to a ?a ? rtrim(a) Vea también ALLTRIM() (Función) | LTRIM() (Función) | TRIM() (Función)
LEFT() (Función) Devuelve un número especificado de carácteres de una expresión de carácteres, a partir del carácter situado más a la izquierda. LEFT(cExpression, nExpression) Valores devueltos Character Parámetros cExpression Especifica la expresión de carácteres de la cual LEFT() devuelve los caracteres. nExpression Especifica el número de caracteres devueltos desde la expresión de caracteres. Si nExpression es mayor que la longitud de cExpression, se devolverá toda la expresión. Devuelve la cadena vacía si nExpression es negativa o si es 0. LEFT() es idéntica a SUBSTR() con una posición inicial de 1. Ejemplo clear store “Instituto Tecnico Educando a Colombia“ to a ?a ? left(a,9) && Display Instituto Vea también AT() | AT_C() | ATC() | ATCC() | ATCLINE() | ATLINE() | LTRIM() | RAT() | RATLINE() | RIGHT() | RTRIM() | SUBSTR() | LEFTC() | RIGHTC() | SUBSTRC() RIGHT() (Función) Devuelve el número especificado de caracteres del extremo derecho de una cadena de caracteres. RIGHT(cExpression, nCharacters) Valores devueltos Character Parámetros cExpression Especifica la expresión de caracteres de la que se devuelven los caracteres del extremo derecho. nCharacters Especifica el número de caracteres devueltos desde la expresión de caracteres. RIGHT() devuelve toda la expresión de caracteres si nCharacters es mayor que la longitud de cExpression. RIGHT() devuelve una cadena vacía si nCharacters es negativo o 0. Observaciones
Los caracteres se devuelven comenzando por el último carácter de la derecha y continuando durante el número de caracteres especificado. Ejemplo clear store “Instituto Tecnico Educando a Colombia“ to a ?a ? right(a,8) && Display Colombia Vea también AT() | AT_C() | ATC() | ATCC() | ATCLINE() | ATLINE() | LEFT() | LEFTC() (Función) | LTRIM() | RAT() | RATLINE() | RTRIM() | SUBSTR() | RIGHTC() | SUBSTRC() | TRIM() SUBSTR() (Función) Devuelve un número de caracteres específico de una expresión de caracteres o un campo memo. SUBSTR(cExpression, nStartPosition [, nCharactersReturned]) Valores devueltos Carácter Parámetros cExpression Especifica la expresión de caracteres o el campo memo desde los que se devuelve la cadena de caracteres. nStartPosition Especifica la posición en la expresión de caracteres o en la cExpression del campo memo desde la que se devuelve la cadena de caracteres. El primer carácter de cExpression es la posición 1. Si la posición especificada es mayor que el número de caracteres de cExpression, se devolverá una cadena vacía. nCharactersReturned Especifica el número de caracteres que se devuelve de cExpression. Si se omite nCharactersReturned, los caracteres se devolverán hasta llegar al final de la expresión de caracteres. Observaciones SUBSTR() devuelve una cadena de caracteres de una expresión de tipo Carácter o de un campo memo, a partir de la posición especificada en la expresión Character o el campo memo, y hasta el número especificado de caracteres. Cuando utilice SUBSTR() con campos memo en un comando SELECT – SQL, incluya la función PADR() en SUBSTR() de modo que los campos memo vacíos o de longitud variable produzcan resultados coherentes cuando se conviertan a cadenas de caracteres. SUBSTR() no devolverá ningún valor para un campo memo si se ejecuta en la ventana Depuración. Para devolver un valor en la ventana Depuración, incluya el nombre del campo memo en ALLTRIM() e incluya ALLTRIM() en SUBSTR(). Ejemplo
clear store “Instituto Tecnico Educando a Colombia“ to a ?a ? substr(a,11,16) && Display Tecnico Educando Vea también AT() | AT_C() | ATC() | ATCC() | ATCLINE() | ATLINE() | LEFT() | PADR() | RAT() | RATLINE() | RIGHT() | LEFTC() | RIGHTC() | SUBSTRC() | STRTRAN() | STUFF()
NOTAS
NOTAS