lunes, 15 de marzo de 2010

TIPOS DE DATOS Y COMANDOS EN VISUALFOXPRO

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.
Las variables y las matrices contienen un subconjunto de los tipos de datos disponibles de Visual FoxPro. Los tipos de datos adicionales sólo están disponibles para los campos de la tabla. Para agregar un campo de un tipo específico a una tabla por medio de programación, especifique el tipo de campo con una letra. Para obtener más información, vea la descripción de FieldType en CREATE TABLE - SQL.
Puede especificar el tipo de datos que se almacena en cada campo de una tabla al crear la tabla. El tipo de datos de una variable o un elemento de matriz está determinado por el valor almacenado en la variable o elemento de matriz. La tabla siguiente muestra los tipos de datos de Visual FoxPro.
Tipos de datos de Visual FoxPro
Tipo de datos
Descripción
Tamaño
Intervalo
Character
Cualquier texto
1 byte por carácter hasta 254
Cualquier carácter
Currency
Importes monetarios
8 bytes
- 922337203685477,5807 a 922337203685477,5807
Date
Datos cronológicos formados por mes, año y día
8 bytes
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.
DateTime
Datos cronológicos formados por mes, año, día y hora
8 bytes
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.
Logical
Valor booleano verdadero o falso
1 byte
Verdadero (.T.) o Falso (.F.)
Numeric
Enteros o fracciones
8 bytes en la memoria;1 a 20 bytes en una tabla
- 0,9999999999E+19 a 0,9999999999E+20
Variant
Una variable de tipo Variant puede contener cualquier tipo de datos de Visual FoxPro y el valor Null. Una vez que se almacena un valor en una variable del tipo Variant, ésta asume el tipo de los datos que contiene.
Las variables tipo Variant se designan con el prefijo e en la sintaxis del lenguaje.
Vea el tipo de datos permitidos.
Vea el tipo de datos permitidos.
Además, Visual FoxPro proporciona tipos de datos que se aplican únicamente a campos de tablas.
Tipos de campos de Visual FoxPro
Tipo de campo
Descripción
Tamaño
Intervalo
Double
Número de signo flotante de precisión doble
8 bytes
+/-4,94065645841247E-324 a +/-8,9884656743115E307
Float
Igual que Numeric
8 bytes en la memoria;1 a 20 bytes en una tabla
- 0,9999999999E+19 a 0,9999999999E+20
General
Referencia a un objeto OLE
4 bytes en una tabla
Limitado por la memoria disponible
Integer
Valores enteros
4 bytes
-2147483647 a 2147483647
Memo
Referencia a un bloque de datos
4 bytes en una tabla
Limitado por la memoria disponible
Character (Binario)
Datos de tipo Character que desea mantener sin modificación en las páginas de códigos
1 byte por carácter hasta 254
Cualquier carácter
Memo (Binario)
Datos de campo Memo que desea mantener sin modificación en las páginas de códigos
4 bytes en una tabla
Limitado por la memoria disponible
Sugerencia Puede utilizar la función TYPE( ) para determinar el tipo de datos almacenado en una variable, un elemento de matriz o un campo.
Cada tipo de datos tiene sus propias características, incluido el tamaño de almacenamiento:
Diferencias de almacenamiento de tipos de datos
Para ver una lista de funciones que puede utilizar para cada tipo de datos.

TIPOS DE COMANDOS EN VISUAL FOXPRO

COMANDOS DE VISUAL FOX PRO



Para cambiar de directorio de trabajo:
SET DEFAULT TO ruta de directorio.
Ejemplo: SET DEFAULT TO c:/sistemas/facturación

Limpiar la pantalla principal de Visual Fox Pro:
CLEAR.

Mostrar los archivos del directorio:
DIR
Ejemplos: DIR
DIR*.TXT
DIR C:/MIS DOCUMENTOS/FACTURACIÓN
Para apagar la conexión o platica de VFP:
SET TALK OFF
Esto se hace porque al borrar, crear índices, etc. En la pantalla VFP se va mostrando los resultados, es por eso que un programa se debe incluir.

Para cambiar el formato de la fecha:
SET DATE TO formato
SET DATE TO DMY
SET DATE TO MDY
SET DATE TO BRITISH

Para salir de VFP:
QUIT

Para cancelar la ejecución de un programa:
CANCEL

Para abrir una base de datos:
OPEN DATABASE Nombre de la base de datos.
Ejemplo: OPEN DATABASE facturación

Para Cerrar una Base de Datos:
CLOSE DATABASES

Para abrir una Tabla:
USE Nombre de la tabla.
Ejemplo: USE facturación

Para abrir una base de datos:
OPEN DATABASE Nombre de la base de datos.
Ejemplo: OPEN DATABASE facturación
USE facturación ORDER TAG producto
(Seleccionando el índice al abrir la tabla para no usar set order)

Para cerrar una tabla:
USE


Para cerrar todas las tablas:
CLOSE TABLES

Agregar un registro en blanco:
APPEND BLANK

Eliminar registros:
DELETE
Ejemplo: DELETE (BORRAR ACTUAL)
DELETE ALL (BORRAR TODOS)
DELETE FOR DEPTO=”0132” (BORRAR SOLO LOS DE ESE DEPTO).
DELETE NEXT 5 (BORRAR LOS SIGUIENTES 5 DESPUÉS DEL ACTUAL)

Recuperar registros marcados como borrados:
RECALL
Ejemplo: RECALL (RECUPERAR ACTUAL)
RECALL ALL (RECUPERAR TODOS)
RECALL FOR DEPTO=”0132” (RECUPERAR SOLO LOS DE ESE DEPTO).
RECALL NEXT 5 (RECUPERAR LOS SIGUIENTES 5 DESPUÉS DEL ACTUAL)
Eliminar los registros borrados como marcados:
PACK

Eliminar todos los registros definitivamente (ya no se pueden recobrar):
ZAP

Para ir al ultimo registro de la tabla:
GO TOP

Para ir al ultimo registro de la tabla:
GO BOTTOM

Para ir a un Registro especifico:
GO numero del registro
Ejemplo: GO 10

Para brincar de Registro:
SKIP
Ejemplo: SKIP 1 (Brincar 1 registro hacia delante)
SKIP -1 (Brincar 1 registro hacia atrás)



Para abrir una o varias tablas (Áreas de trabajo):
SELECT
SELECT Área de Trabajo (Número o Letra)
USE TABLA
Ejemplo: SELECT A
USE Facturación
Ejemplo: SELECT B
USE Cliente
O
USE Facturación in A
USE Proveedores in B

Para cambiar de Área de Trabajo:
SELECT
SELECT Área de Trabajo
Ejemplo: SELECT A
Ejemplo: SELECT Clientes

Para establecer el índice de Trabajo:
SET ORDER TO Nombre de Índice
Ejemplo: SET ORDER TO nombre
USE Facturación
Ejemplo: Para no utilizar ningún índice de Trabajo:
SET ORDER TO

Para establecer Filtros de Condición:
SET FILTER TO Condición del Filtro
Ejemplos: SET FILTER TO sueldo > 1000
SET FILTER TO sueldo >= 1000 . and. sueldo <= 3000
SET FILTER TO sueldo = 1000 . or. sueldo = 2000
SET FILTER TO depto < > “0004” . and. (sueldo = 1000 .or. sueldo = 2000)
Primero se evalúan las que están en paréntesis y después las que están fuera.

Para buscar información sin índice activo:
LOCATE FOR Condición de búsqueda
Ejemplos: LOCATE FOR numero_empleado = “09499”

Para buscar información con un índice activo:
SEEK Información a buscar (variable, numero o cadena de texto)
Ejemplos: SEEK “09499”
SEEK num_empleado
SEEK 1235
Para esto ha de haber un índice activo con SET ORDER TO o haber abierto la tabla con la opción ORDER TAG nombre del índice.



Examinar la información:
BROWSE
Ejemplos: USE empleado
BROWSE
0
BROWSE FIELDS clave, nombre, sueldo (aquí se omitió el depto)
0
BROWSE FOR depto = “0003” (solo ese depto)
Aquí se pueden utilizar una mezcla de todas.

Listar registros en Pantalla:
LIST [Campos] (opcional)
Ejemplos: LIST (Lista todos los campos en pantalla)
LIST clave, nombre, sueldo (Lista solo esos Campos)
LIST FOR depto = “0012” (Lista solo de ese depto)
LIST OFF (Listar sin el numero de registro)
Aquí se pueden utilizar una mezcla de todas, la única desventaja es que si son demasiados registro, y se despliegan todos, y recorre los primeros registros hacia arriba y ya no se pueden ver.

Listar registros hacia la impresora:
Igual que la anterior solo que al final de la instrucción se le agrega TO PRINT
Ejemplos: LIST clave, nombre, sueldo TO PRINT

Desplegar registros en Pantalla:
Para esto solo sustituye la instrucción LIST por DISPLAY
Con esto se tiene la ventaja de que cuando se llama la pantalla de registros, el VFP hace una pausa para que los puedas leer y después continuar.

Modificar la estructura de una tabla:
MODIFY STRUC

Desplegar en Pantalla o Impresora la Estructura de una Tabla:
DISPLAY STRUCT
O
DISPLAY STRUCT TO PRINT

PROCEDIMIENTOS ALMACENADOS

Un procedimiento almacenado (stored procedure en inglés) es un programa (o procedimiento) el cual es almacenado físicamente en una base de datos. Su implementación varía de un manejador de bases de datos a otro. La ventaja de un procedimiento almacenado es que al ser ejecutado, en respuesta a una petición de usuario, es ejecutado directamente en el motor de bases de datos, el cual usualmente corre en un servidor separado. Como tal, posee acceso directo a los datos que necesita manipular y sólo necesita enviar sus resultados de regreso al usuario, deshaciéndose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes.
Usos típicos para procedimientos almacenados incluyen la validación de datos siendo integrados a la estructura de base de datos (los procedimientos almacenados utilizados para este propósito a menudo son llamados disparadores; triggers en inglés), o encapsular un proceso grande y complejo. El último ejemplo generalmente ejecutará más rápido como un procedimiento almacenado que de haber sido implementado como, por ejemplo, un programa corriendo en el sistema cliente y comunicándose con la base de datos mediante el envío de consultas SQL y recibiendo sus resultados.
Los procedimientos pueden ser ventajosos: Cuando una base de datos es manipulada desde muchos programas externos. Al incluir la lógica de la aplicación en la base de datos utilizando procedimientos almacenados, la necesidad de embeber la misma lógica en todos los programas que acceden a los datos es reducida. Esto puede simplificar la creación y, particularmente, el mantenimiento de los programas involucrados.
Podemos ver un claro ejemplo de estos procedimientos cuando requerimos realizar una misma operación en un servidor dentro de algunas o todas las bases de datos y a la vez dentro de todas o algunas de las tablas de las bases de datos del mismo. Para ello podemos utilizar a los Procedimientos almacenados auto creables que es una forma de generar ciclos redundantes a través de los procedimientos almacenados.
Implementación:
Estos procedimientos, se usan a menudo, pero no siempre, para realizar consultas SQL sobre los objetos del banco de datos de una manera abstracta, desde el punto de vista del cliente de la aplicación. Un procedimiento almacenado permite agrupar en forma exclusiva parte de algo específico que se desee realizar o, mejor dicho, el SQL apropiado para dicha acción.
Usos:
Los usos 'típicos' de los procedimientos almacenados se aplican en la validación de datos, integrados dentro de la estructura del banco de datos. Los procedimientos almacenados usados con tal propósito se llaman comúnmente disparadores, o triggers. Otro uso común es la 'encapsulación' de un API para un proceso complejo o grande que podría requerir la 'ejecución' de varias consultas SQL, tales como la manipulación de un 'dataset' enorme para producir un resultado resumido.
También pueden ser usados para el control de gestión de operaciones, y ejecutar procedimientos almacenados dentro de una transacción de tal manera que las transacciones sean efectivamente transparentes para ellos.
Ventajas:
La ventaja de un procedimiento almacenado, en respuesta a una petición de usuario, está directamente bajo el control del motor del manejador de bases de datos, lo cual corre generalmente en un servidor separado de manejador de bases de datos aumentando con ello, la rapidez de procesamiento de requerimientos del manejador de bases de datos. El servidor de la base de datos tiene acceso directo a los datos necesarios para manipular y sólo necesita enviar el resultado final al usuario. Los procedimientos almacenados pueden permitir que la lógica del negocio se encuentre como un API en la base de datos, que pueden simplificar la gestión de datos y reducir la necesidad de codificar la lógica en el resto de los programas cliente. Esto puede reducir la probabilidad de que los datos sean corrompidos por el uso de programas clientes defectuosos o erróneos. De este modo, el motor de base de datos puede asegurar la integridad de los datos y la consistencia, con la ayuda de procedimientos almacenados. Algunos afirman que las bases de datos deben ser utilizadas para el almacenamiento de datos solamente, y que la lógica de negocio sólo debería ser aplicada en la capa de negocio de código, a través de aplicaciones cliente que deban acceder a los datos. Sin embargo, el uso de procedimientos almacenados no se opone a la utilización de una capa de negocio.
Procedimientos almacenados en MySQL:
Desde MySQL 5 los procedimientos almacenados empezaron a ser soportados, como suele suceder en MySQL las sentencias se ejecutan luego de escribir el signo punto y coma (;), por esta razón antes de escribir el procedimiento almacenado la función del punto y coma se asigna a otros caracteres usando la sentencia DELIMITER seguida de un caracter tal como , de esta manera el procedimiento puede ser escrito usando los punto y comas sin que se ejecute mientras se escribe; después de escrito el procedimiento, se escibe nuevamente la sentencia DELIMITER ; para asignar al punto y coma su función habitual.
El siguiente es un ejemplo de procedimiento almacenado en MySQL:
DELIMITER

CREATE PROCEDURE autos(IN velocidad int,IN marca varchar(50))
BEGIN
IF velocidad < 120 then
INSERT INTO familiares VALUES(velocidad,marca);
ELSE
INSERT INTO deportivos VALUES(velocidad,marca);
END IF;
END;

jueves, 11 de marzo de 2010

TODO SOBRE EL COMANDO SET

COMANDO SET:
Muestra, establece o quita las variables de entorno de cmd.exe.SET [variable=[cadena]] variable Especifica el nombre de la variable de entorno. cadena Especifica una serie de caracteres que se asignará a la variable.Escriba SET sin parámetros para ver las variables de entorno actuales.Si las extensiones de comando están habilitadas, SET cambia así:"Cuando se llama al comando SET solamente con un nombre de variable, sin signo de igual ni valor, se mostrarán los valores de todas las variables cuyos prefijos coincidan con el nombre especificado como parámetro para el comando SET. Por ejemplo: SET Pmostrará todas las variables que empiecen con la letra 'P'El comando SET establecerá ERRORLEVEL en 1 si no se encuentra el nombre de la variable en el entorno actual.El comando SET no permitirá que un signo de igual sea parte de una variable.Se han agregado dos modificadores nuevos al comando SET: SET /A expression SET /P variable=[promptString]El modificador /A especifica que la cadena a la derecha del signo de iguales una expresión numérica que es evaluada. El evaluador de expresiones esbastante simple y es compatible con las siguientes operaciones, en orden deprecedencia decreciente: () - agrupar ! ~ - - operadores unarios * / % - operadores aritméticos + - - operadores aritméticos << >> - desplazamiento lógico & - bit a bit y ^ - bit a bit exclusivo o - bit a bit = *= /= %= += -= - asignación &= ^= = <<= >>= , - separador de expresiónSi se utiliza cualquiera de los operadores lógicos o de módulo, seránecesario escribir la cadena entre comillas. Cualquier cadena de la expresión que no sea numérica, se tratará como variable de entorno cuyo valor se convertirá a tipo numérico antes de utilizarse. Si se especifica una variable que no está definida en el entorno actual, se utilizará el valor cero. Esto permite hacer operaciones aritméticas con los valores de variables de entorno evitando el escribir todos estos signos % para obtener sus valores. Si se ejecuta el comando SET /A desde la línea del comando fuera de la secuencia decomandos, entonces se mostrará el valor final de la expresión. El operadorde asignación requiere un nombre de variable de entorno a la izquierda del operador de asignación. Los valores numéricos son números decimales, a no ser que lleven el prefijo 0x delante para los números hexadecimales, y 0 para los números octales. De esta manera 0x12 es lo mismo que 18, y lo mismo que 022. Nota: la notación octal puede ser confusa: 08 y 09 no son números válidos porque 8 y 9 no son dígitos octales válidos.El modificador /P permite establecer el valor de una variable para una líneade entrada escrita por el usuario. Muestra la cadena del símbolo del sistemaantes de leer la línea de entrada. La cadena del símbolo del sistema puedeestar vacía.La sustitución de variables de entorno ha sido mejorada así: %PATH:str1=str2%expandirá la variable de entorno PATH, sustituyendo cada repetición de"str1" en el resultado expandido con "str2". "str2" puede ser la cadenavacía para borrar efectivamente todas las repeticiones de "str1" de lasalida expandida. "str1" puede empezar con un asterisco, en cuyo caso,coincidirá con lo contenido en la salida expandida desde su inicio, hastala primera aparición del fragmento de str1 que queda.También puede especificar subcadenas para una expansión. %PATH:~10,5%expandirá la variable de entorno PATH, y usará sólo los 5 caracteresa partir del décimo primer carácter (desplazamiento 10) del resultadoexpandido. Si la longitud no se especifica, se utilizará el resto delvalor de la variable. Si algún número (desplazamiento o longitud) esnegativo, entonces el número usado es la longitud del valor de la variablede entorno añadido al desplazamiento o longitud especificados. %PATH:~-10%extraerá los 10 caracteres de la variable PATH. %PATH:~0,-2%extraerá todo menos los 2 últimos caracteres de la variable PATH.Finalmente, se ha añadido compatibilidad para la expansión de la variableretardada. Este soporte está siempre deshabilitado de forma predeterminada, pero puedehabilitarse o deshabilitarse a través del modificador de línea de comandos/V a CMD.EXE. Ver CMD /?La expansión de la variable de entorno es útil para tratar con laslimitaciones de la expansión actual, las cuales ocurren cuando una línea detexto es leída, y no cuando se ejecuta. El siguiente ejemplo demuestra elproblema con la expansión de la variable inmediata: set VAR=antes if "%VAR%" == "antes" ( set VAR=después if "%VAR%" == "después" @echo Si esto se puede ver, entonces significa que funcionó )dado que %VAR% se sustituye al mismo tiempo en ambas instrucciones IF cuando se lee la primera instrucción IF, pues incluye lógicamente al cuerpo del IF, el cual es una instrucción compuesta. De esta manera, IF, dentro de la instrucción compuesta está realmente comparando "antes" con "después" lo cuál nunca será igual. De un modo parecido, el siguiente ejemplo no funcionará como se espera: set LIST= for %i in (*) do set LIST=%LIST% %i echo %LIST%en esto NO generará una lista de archivos en el directorio actual, pero ensu lugar establecerá la variable LIST en el último archivo encontrado. Denuevo, esto ocurre porque %LIST% es expandido sólo una vez cuando laopción FOR es leída, y en ese momento la variable LIST variable está vacía.Así el ciclo actual FOR que se está ejecutando es: for %i in (*) do set LIST= %iel cual sólo mantiene el valor LIST hasta el último archivo encontrado.La expansión de la variable de entorno retardada permite utilizar uncarácter diferente (el signo de exclamación para expandir variables entiempo de ejecución. Si la expansión de la variable retardada estáhabilitada, los ejemplos se pueden escribir de la siguiente manera para que funcionen como es necesario: set VAR=antes if "%VAR%" == "antes" ( set VAR=después if "!VAR!" == "después" @echo Si esto se puede ver, entonces significa que funcionó ) set LIST= for %i en (*) do set LIST=!LIST! %i echo %LIST%Si las extensiones de comando están habilitadas, hay varias variablesdinámicas de entorno que pueden ser expandidas pero que no semuestran en la lista de variables que muestra ESTABLECER. Estos valores devariable se calculan dinámicamente cada vez que el valor de lavariable se expande.Si el usuario define una variable explícitamente con uno de estos nombres,entonces esa definición suplantará la variable dinámica abajo descrita:%CD% - se expande a la cadena del directorio actual .%DATE% - se expande a la fecha actual usando el mismo formato que el comando DATE.%TIME% - se expande a la hora actual usando el mismo formato que el comando TIME. %RANDOM% - se expande a un número decimal aleatorio entre 0 y 32767.%ERRORLEVEL% - se expande al valor de NIVEL DE ERROR actual%CMDEXTVERSION% - se expande al número actual de versión de las extensiones del comando del procesador.%CMDCMDLINE% - se expande a la línea de comando original que invocó el Procesador de comandos.C:\WINDOWS>HELP SETLOCALComienza la sección de cambios locales de entorno en un archivo por lotes. Los cambios de entornohechos después de que se haya emitido SETLOCAL son locales en el archivo por lotes.ENDLOCAL debe ser emitido para restaurar la configuración anterior. Cuando se llega al final deun archivo de secuencias de comandos por lotes, se ejecuta un ENDLOCAL implícito para cualquier comando SETLOCAL pendiente que se haya emitido para este archivo de secuencias de comandos por lotes.SETLOCALSi las extensiones de comandos están habilitadas SETLOCAL cambia así:Ahora el comando del archivo por lotes SETLOCAL acepta argumentos opcionales: ENABLEEXTENSIONS / DISABLEEXTENSIONSHabilitar o deshabilitar las extensiones del procesador de comandos. Ver CMD /? para más detallesENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION Habilita o deshabilita la expansión de la variable de entorno retardada. Ver SET /? para más detalles. Estas modificaciones duran hasta que coincida el comando ENDLOCAL, independientemente de su configuración anterior para el comando SETLOCAL.El comando SETLOCAL establecerá el valor ERRORLEVEL si se diera un argumento. Será cero si se da uno de los dos argumentos válidos y el otro no. Puede usar esto en los archivos de proceso por lotes para determinar si las extensiones están disponibles usando la siguiente técnica: VERIFY OTHER 2>null SETLOCAL ENABLEEXTENSIONS IF ERRORLEVEL 1 echo No puede activar las extensionesEsto funciona porque en las versiones anteriores de CMD.EXE, SETLOCAL no establecía el valor de ERRORLEVEL. El comando VERIFY con un argumento erróneo inicializa el valor ERRORLEVEL a un valor distinto de cero.C:\WINDOWS>HELP SHIFTCambia la posición de parámetros reemplazables en un archivo por lotes.SHIFT [/n]Si las extensiones de comando están habilitadas, el comando SHIFTadmitirá el modificador /n, el cual informa al comando que empiece acambiar en el argumento n, en donde n puede estar comprendido entre 0 y 8.Por ejemplo: SHIFT /2cambiará %3 a %2, %4 a %3, etc. y deja %0 y %1 sin modificar.