introducción a visual fox pro
TRANSCRIPT
-
5/26/2018 Introduccin a Visual FOX Pro
1/60
Introduccin a Visual Fox Pro
Captulo 1. Funciones de Bsqueda y Remplazo.
Consultas de Seleccin (SELECT)Las consultas de seleccin se utilizan para indicar al motor de datos que devuelva informacin de las bases de datos,esta informacin es devuelta en forma de conjunto de registros que se pueden almacenar en un objeto recordset.Este conjunto de registros es modificable.
Consultas Bsicas.
La sintaxis bsica de una consulta de seleccin es la siguiente:
SELECTCAMPOSFROMTABLA;
En donde campos es la lista de campos que se deseen recuperar y tabla es el origen de los mismos, por ejemplo:
SELECT NOMBRE, TELEFONOFROM CLIENTES;
Esta consulta devuelve un recordset con el campo nombre y telfono de la tabla clientes.
En Introduciendo SQL en Access podemos observar cmo se introducen consultas directamente en una base dedatos de Access sin utilizar el Asistente.
Ordenar los registros (ORDER BY)
Adicionalmente se puede especificar el orden en que se desean recuperar los registros de las tablas mediante la
clasula ORDER BY Lista de Campos. En donde Lista de campos representa los campos a ordenar. Ejemplo:
SELECT CODIGOPOSTAL, NOMBRE, TELEFONOFROM CLIENTESORDER BY NOMBRE;
Esta consulta devuelve los campos CodigoPostal, Nombre, Telefono de la tabla Clientes ordenados por el campoNombre.
Se pueden ordenar los registros por mas de un campo, como por ejemplo:
SELECT CODIGOPOSTAL, NOMBRE, TELEFONOFROM CLIENTESORDER BY CODIGOPOSTAL, NOMBRE;
Incluso se puede especificar el orden de los registros: ascendente mediante la clasula (ASC -se toma este valor por
defecto) descendente (DESC)
SELECTCODIGOPOSTAL,NOMBRE,TELEFONOFROMCLIENTESORDERBYCODIGOPOSTALDESC,NOMBREASC;
Consultas con Predicado (ALL, TOP, DISTINCT)
El predicado se incluye entre la clusula y el primer nombre del campo a recuperar, los posibles predicados son:
Comando Descripcin
-
5/26/2018 Introduccin a Visual FOX Pro
2/60
ALL Devuelve todos los campos de la tablaTOP Devuelve un determinado nmero de registros de la tablaDISTINCT Omite los registros cuyos campos seleccionados coincidan totalmenteDISTINCTROW Omite los registros duplicados basndose en la totalidad del registro y no slo en los campos seleccionados.
ALL
Si no se incluye ninguno de los predicados se asume ALL. El Motor de base de datos selecciona todos los registrosque cumplen las condiciones de la instruccin. No se conveniente abusar de este predicado ya que obligamos almotor de la base de datos a analizar la estructura de la tabla para averiguar los campos que contiene, es mucho msrpido indicar el listado de campos deseados.
SELECTALLFROMEMPLEADOS;SELECT*FROMEMPLEADOS;
TOP
Devuelve un cierto nmero de registros que entran entre al principio o al final de un rango especificado por una
clusula ORDER BY. Supongamos que queremos recuperar los nombres de los 25 primeros estudiantes del curso1994:
SELECTTOP25NOMBRE,APELLIDOFROMESTUDIANTESORDERBYNOTADESC;
Si no se incluye la clusula ORDER BY, la consulta devolver un conjunto arbitrario de 25 registros de la tablaEstudiantes .El predicado TOP no elige entre valores iguales. En el ejemplo anterior, si la nota media nmero 25 y la26 son iguales, la consulta devolver 26 registros. Se puede utilizar la palabra reservada PERCENT para devolver uncierto porcentaje de registros que caen al principio o al final de un rango especificado por la clusula ORDER BY.Supongamos que en lugar de los 25 primeros estudiantes deseamos el 10 por ciento del curso:
SELECTTOP10PERCENTNOMBRE,APELLIDOFROMESTUDIANTESORDERBYNOTADESC;
El valor que va a continuacin de TOP debe ser un Integer sin signo.TOP no afecta a la posible actualizacin de laconsulta.
DISTINCT
Omite los registros que contienen datos duplicados en los campos seleccionados. Para que los valores de cadacampo listado en la instruccin SELECT se incluyan en la consulta deben ser nicos.
Por ejemplo, varios empleados listados en la tabla Empleados pueden tener el mismo apellido. Si dos registroscontienen Lpez en el campo Apellido, la siguiente instruccin SQL devuelve un nico registro:
SELECTDISTINCTAPELLIDOFROMEMPLEADOS;
Con otras palabras el predicado DISTINCT devuelve aquellos registros cuyos campos indicados en la clusula SELECTposean un contenido diferente. El resultado de una consulta que utiliza DISTINCT no es actualizable y no refleja loscambios subsiguientes realizados por otros usuarios.
DISTINCTROW
-
5/26/2018 Introduccin a Visual FOX Pro
3/60
Devuelve los registros diferentes de una tabla; a diferencia del predicado anterior que slo se fijaba en el contenidode los campos seleccionados, ste lo hace en el contenido del registro completo independientemente de los campoindicados en la clusula SELECT.
SELECTDISTINCTROWAPELLIDOFROMEMPLEADOS;
Si la tabla empleados contiene dos registros: Antonio Lpez y Marta Lpez el ejemplo del predicado DISTINCTdevuleve un nico registro con el valor Lpez en el campo Apellido ya que busca no duplicados en dicho campo. Esteltimo ejemplo devuelve dos registros con el valor Lpez en el apellido ya que se buscan no duplicados en el registrocompleto.
Alias (AS)
En determinadas circunstancias es necesario asignar un nombre a alguna columna determinada de un conjuntodevuelto, otras veces por simple capricho o por otras circunstancias. Para resolver todas ellas tenemos la palabrareservada AS que se encarga de asignar el nombre que deseamos a la columna deseada. Tomado como referencia elejemplo anterior podemos hacer que la columna devuelta por la consulta, en lugar de llamarse apellido (igual que elcampo devuelto) se llame Empleado. En este caso procederamos de la siguiente forma:
SELECTDISTINCTROWAPELLIDOASEMPLEADOFROMEMPLEADOS;
Para concluir este captulo se debe hacer referencia a la recuperacin de registros de bases de datos externa. Esocasiones es necesario la recuperacin de informacin que se encuentra contenida en una tabla que no se encuentraen la base de datos que ejecutar la consulta o que en ese momento no se encuentra abierta, esta situacin lapodemos salvar con la palabra reservada IN de la siguiente forma:
SELECTDISTINCTROWAPELLIDOASEMPLEADOFROMEMPLEADOSIN'C:\DATABASES\GESTION.MDB';
En donde c:\databases\gestion.mdbes la base de datos que contiene la tabla Empleados.
Captulo 2. Tablas Temporales y Cursores.
Otro tipo de tablas temporales son los cursores, que tienen la misma utilidad que una tabla temporal, excepto que nose crean en disco, solo en la memoria del ordenador.
EL PROCESO DE CREACIN ES EL MISMO:
CREATE CURSOR|TABLE nombre_alias (campo1 tipo1 (tamao1[, decimales1]), campo2 tipo2 (tamao2[,decimales2])... )
Donde: "nombre_alias"es el nombre del cursor o tabla a crear "campo-n"es el nombre del campo "tipo-n" es el tipo del campo, se indica con una sola letra:
o C = Caractero D = Fechao T = DateTime
-
5/26/2018 Introduccin a Visual FOX Pro
4/60
o N = Numricoo F = Flotanteo I = Enteroo B = Dobleo Y = Monedao L = Lgicoo M = Memoo G = Generalo P = Imagen
"tamao-n"es el tamao del campo "decimales-n"es el nmero de decimales a contener
Nota: Estos ltimos dos datos son de acuerdo al tipo de dato, segn la siguiente tabla:o C( n )Carcter de ancho no N( n, de )Numrico de ancho n con de decimaleso F( n, de )Flotante de ancho n con de decimales
El tamao del campo y el nmero de decimales se pasan por alto para los tipos DE, T, Y, L, M, G y P. Si no se incluyeel nmero de decimales en los tipos N, F o B, de forma predeterminada ser cero (sin lugares decimales).
Verificar este CodigoSelect tabla1.nombre, deuda_ini,deuda_fin from tabla1,tabla2 where tabla1.nombre=tabla2.nombre INTO CURSORtabla3.
Captulo 3. Consultas de SQL Aplicadas a Visual Foxpro.
INTRODUCCIN
Ladocumentacin acerca del uso de loscomandosSQL enVisual Fox Pro es limitada. Tomando esto como referencia heaqu un primer material detrabajo que espero sirva de inicio a los estudiantes y programadores que trabajan con estemanejador debases de datos relacinales.
Se ha tomado como base bibliogrfica la AyudaHTML del MSDN Library y se ha enriquecido las explicaciones congrficasde los resultados de las consultas que se exponen como ejemplos.
Es importante destacar que trabajo presenta ejemplos del uso del comando SELECT SQL enVisual Fox Pro 6.0 lo mssencillas posibles, buscando orientar a los ya conocedores pero tambin ayudar a aquellos que se estn iniciando en elmundo de laprogramacin.
Sin duda luego del estudio de los ejemplos aqu citados se les ocurrirn unos cada vez ms complejos y vistosos, esperoque los hagan llegar a esteservidor as como tambin sugerencias del acerca del trabajo a travs del correo electrnicopara aprender tambin yo de ustedes.
Como recomendacin final sera interesante que crearan las tablas que se utilizan en los ejemplos y fueran trabajando enforma paralela en la medida que van leyendo el material, considero que es la mejor manera de aprender.A todos mis saludos y Manos a la Obra.
ESTRUCTURA DE LAS TABLAS USADAS EN LOS EJEMPLOS
http://www.monografias.com/trabajos11/ladocont/ladocont.shtmlhttp://www.monografias.com/trabajos7/coman/coman.shtmlhttp://www.monografias.com/trabajos14/sqlserver/sqlserver.shtmlhttp://www.monografias.com/trabajos10/vfp/vfp.shtmlhttp://www.monografias.com/trabajos34/el-trabajo/el-trabajo.shtmlhttp://www.monografias.com/trabajos11/basda/basda.shtmlhttp://www.monografias.com/trabajos7/html/html.shtmlhttp://www.monografias.com/trabajos11/estadi/estadi.shtml#METODOShttp://www.monografias.com/trabajos10/vfp/vfp.shtmlhttp://www.monografias.com/Computacion/Programacion/http://www.monografias.com/trabajos12/rete/rete.shtmlhttp://www.monografias.com/trabajos15/todorov/todorov.shtml#INTROhttp://www.monografias.com/trabajos15/todorov/todorov.shtml#INTROhttp://www.monografias.com/trabajos15/todorov/todorov.shtml#INTROhttp://www.monografias.com/trabajos12/rete/rete.shtmlhttp://www.monografias.com/Computacion/Programacion/http://www.monografias.com/trabajos10/vfp/vfp.shtmlhttp://www.monografias.com/trabajos11/estadi/estadi.shtml#METODOShttp://www.monografias.com/trabajos7/html/html.shtmlhttp://www.monografias.com/trabajos11/basda/basda.shtmlhttp://www.monografias.com/trabajos34/el-trabajo/el-trabajo.shtmlhttp://www.monografias.com/trabajos10/vfp/vfp.shtmlhttp://www.monografias.com/trabajos14/sqlserver/sqlserver.shtmlhttp://www.monografias.com/trabajos7/coman/coman.shtmlhttp://www.monografias.com/trabajos11/ladocont/ladocont.shtml -
5/26/2018 Introduccin a Visual FOX Pro
5/60
Select SQL en visualFOX PRO 6.0
VisualFoxPro admite comandos deLenguaje de consultas estructurado SQL. Los comandos SQL deVisual FoxPro utilizanlatecnologa Rushmore para optimizar el rendimiento y puede utilizarse un slo comando SQL para sustituir a varioscomandos Visual FoxPro.
VISUAL FOXPRO ADMITE LOS SIGUIENTES COMANDOS SQL:SELECT - SQL:Especifica los criterios en los que se basa una consulta y ejecuta la consulta. Visual FoxPro interpreta laconsulta y recupera losdatos especificados de la tabla o tablas.
El comando SELECT se construye dentro de Visual FoxPro como cualquier otro comando de Visual FoxPro.
Puede crear una consulta con el comando SELECT en la ventana Comandos. En unprograma Visual FoxPro (como cualquier otro comando de Visual FoxPro).
http://www.monografias.com/trabajos4/foxpro/foxpro.shtmlhttp://www.monografias.com/trabajos10/vfp/vfp.shtmlhttp://www.monografias.com/trabajos35/concepto-de-lenguaje/concepto-de-lenguaje.shtmlhttp://www.monografias.com/trabajos10/vfp/vfp.shtmlhttp://www.monografias.com/Tecnologia/index.shtmlhttp://www.monografias.com/trabajos11/basda/basda.shtmlhttp://www.monografias.com/Computacion/Programacion/http://www.monografias.com/Computacion/Programacion/http://www.monografias.com/trabajos11/basda/basda.shtmlhttp://www.monografias.com/Tecnologia/index.shtmlhttp://www.monografias.com/trabajos10/vfp/vfp.shtmlhttp://www.monografias.com/trabajos35/concepto-de-lenguaje/concepto-de-lenguaje.shtmlhttp://www.monografias.com/trabajos10/vfp/vfp.shtmlhttp://www.monografias.com/trabajos4/foxpro/foxpro.shtml -
5/26/2018 Introduccin a Visual FOX Pro
6/60
En el Diseador de consultas.
ALTER TABLE SQ:Modifica una tabla existente. Puede modificar el nombre, el tipo, la precisin, laescala,laadmisin de unvalor nulo y las reglas de integridad referencial para cada campo de la tabla.
CREATE CURSOR SQL:Crea una tabla temporal. Cada campo de la tabla temporal se define con un nombre,
tipo, precisin, escala, soporte de valor nulo y reglas de integridad referencial. Las definiciones pueden obtenersedel propio comando o de unamatriz.
CREATE TABLE SQL:Crea una tabla. Cada campo de la tabla nueva se define con un nombre, tipo, precisin,escala, aceptacin devalores nulos y reglas de integridad referencial. Estas definiciones pueden obtenerse delpropio comando o de una matriz.
DELETE SQL:Marca para su eliminacin losregistros de una tabla mediante la sintaxis de SQL.
INSERT SQL:Anexa unregistro al final de una tabla existente. El nuevo registro incluye los datos mostrados enel comando INSERT o incluidos en la matriz especificada.
UPDATE
SQL:Actualiza los registros de una tabla. Los registros se pueden actualizar segn los resultados deuna instruccin SELECT SQL
El propsito de este material es brindar al estudiante ejemplos que le permitan utilizar SELECT SQL en eldiseo deconsultas usando para ello una o ms tablas diseadas en Visual Fox Pro.
Componentes del SQL
El lenguaje SQL est compuesto por comandos, clusulas, operadores yfunciones de agregado. Estos elementos secombinan en las instrucciones para crear, actualizar y manipular las bases de datos.Comandos
EXISTEN DOS TIPOS DE COMANDOS SQL:
1. Los DLL que permiten crear y definir nuevas bases de datos, campos e ndices.2. Los DML que permiten generar consultas para ordenar, filtrar y extraer datos de la base de datos.
Comandos DLLComando DescripcinCREATE Utilizado para crear nuevas tablas, campos e ndices
DROP Empleado para eliminar tablas e ndicesALTER Utilizado para modificar las tablas agregando campos o cambiando la definicin de los campos.
Comandos DMLComando DescripcinSELECT Utilizado para consultar registros de la base de datos que satisfagan un criterio determinado
INSERT Utilizado para cargar lotes de datos en la base de datos en una nica operacin.UPDATE Utilizado para modificar los valores de los campos y registros especificadosDELETE Utilizado para eliminar registros de una tabla de una base de datos
ClusulasComando Descripcin
FROM Utilizada para especificar la tabla de la cual se van a seleccionar los registrosWHERE Utilizada para especificar las condiciones que deben reunir los registros que se van a seleccionar
GROUP BY Utilizada para separar los registros seleccionados engrupos especficosHAVING Utilizada para expresar la condicin que debe satisfacer cada grupo
http://www.monografias.com/trabajos6/dige/dige.shtml#evohttp://www.monografias.com/trabajos14/nuevmicro/nuevmicro.shtmlhttp://www.monografias.com/trabajos10/macroecon/macroecon.shtmlhttp://www.monografias.com/trabajos14/nuevmicro/nuevmicro.shtmlhttp://www.monografias.com/trabajos16/marca/marca.shtmlhttp://www.monografias.com/trabajos7/regi/regi.shtmlhttp://www.monografias.com/trabajos7/regi/regi.shtmlhttp://www.monografias.com/trabajos13/diseprod/diseprod.shtmlhttp://www.monografias.com/trabajos7/mafu/mafu.shtmlhttp://www.monografias.com/trabajos11/grupo/grupo.shtmlhttp://www.monografias.com/trabajos11/grupo/grupo.shtmlhttp://www.monografias.com/trabajos7/mafu/mafu.shtmlhttp://www.monografias.com/trabajos13/diseprod/diseprod.shtmlhttp://www.monografias.com/trabajos7/regi/regi.shtmlhttp://www.monografias.com/trabajos7/regi/regi.shtmlhttp://www.monografias.com/trabajos16/marca/marca.shtmlhttp://www.monografias.com/trabajos14/nuevmicro/nuevmicro.shtmlhttp://www.monografias.com/trabajos10/macroecon/macroecon.shtmlhttp://www.monografias.com/trabajos14/nuevmicro/nuevmicro.shtmlhttp://www.monografias.com/trabajos6/dige/dige.shtml#evo -
5/26/2018 Introduccin a Visual FOX Pro
7/60
ORDER BY Utilizada para ordenar los registros seleccionados de acuerdo con un orden especfico*Las clusulas son condiciones de modificacin utilizadas para definir los datos que desea seleccionar o manipular.
Operadores LgicosComando Descripcin
AND Es el "y" lgico. Evala dos condiciones y devuelve un valor de verdad slo si ambas son ciertas.OR Es el "o" lgico. Evala dos condiciones y devuelve un valor de verdadero si alguna de las dos es cierta.
NOT Negacinlgica.Devuelve el valor contrario de la expresin.
Operadores de ComparacinComando Descripcin
< Menor que> Mayor que
Distinto de= Mayor Igual que= Igual que
BETWEEN Utilizado para especificar un intervalo de valores.LIKE Utilizado en la comparacin de un modelo
In Utilizado para especificar registros de una base de datos
CONSULTAS BSICAS
La sintaxis bsica de una consulta deseleccin es la siguiente:
SELECT CAMPOSFROM TABLA
En donde campos es la lista de campos que se deseen recuperar y tabla es el origen de los mismos, por ejemplo:
SELECT NOMBRE, TELEFONOFROM CLIENTES
Esta consulta devuelve una visualizacin de la tablaClientes con el campo nombre ytelfono.Esta visualizacin en VFP esun browse pero no es necesario agregar esta orden, SQL lo invoca automticamente. Vea el orden de los campos en elbrowse.
http://www.monografias.com/trabajos15/logica-metodologia/logica-metodologia.shtmlhttp://www.monografias.com/trabajos5/selpe/selpe.shtmlhttp://www.monografias.com/trabajos11/sercli/sercli.shtmlhttp://www.monografias.com/trabajos/eltelefono/eltelefono.shtmlhttp://www.monografias.com/trabajos/eltelefono/eltelefono.shtmlhttp://www.monografias.com/trabajos11/sercli/sercli.shtmlhttp://www.monografias.com/trabajos5/selpe/selpe.shtmlhttp://www.monografias.com/trabajos15/logica-metodologia/logica-metodologia.shtml -
5/26/2018 Introduccin a Visual FOX Pro
8/60
ORDENAR LOS REGISTROS
Adicionalmente se puede especificar el orden en que se desean recuperar los registros de las tablas mediante la clusulaORDER BY Lista de Campos. En donde Lista de campos representa los campos a ordenar.
Ejemplo:
SELECT COD_POSTAL, NOMBRE, TELEFONOFROM CLIENTESORDER BY NOMBRE
Esta consulta devuelve los campos CodigoPostal, Nombre, Telefono de la tabla Clientes ordenados por el campo Nombre.
Se pueden ordenar los registros por ms de un campo, como por ejemplo:
SELECT CODIGOPOSTAL, NOMBRE, TELEFONOFROM CLIENTESORDER BY COD_POSTAL, NOMBRE
-
5/26/2018 Introduccin a Visual FOX Pro
9/60
Incluso se puede especificar el orden de los registros: ascendente mediante la clusula (ASC -se toma este valor pordefecto) descendente (DESC)
SELECT CODIGOPOSTAL, NOMBRE, TELEFONOFROM CLIENTESORDER BY CODIGOPOSTAL, NOMBREASC
CONSULTAS CON PREDICADO
El predicado se incluye entre la clusula y el primer nombre del campo a recuperar, los posibles predicados son:
Predicado Descripcin* Devuelve todos los campos de la tabla
TOP Devuelve un determinado nmero de registros de la tablaDISTINCT Omite los registros cuyos campos seleccionados coincidan totalmente
DISTINCTROW Omite los registros duplicados basndose en la totalidad del registro y no slo en los campos seleccionados.
(ALL)
Si no se incluye ninguno de los predicados se asume ALL. ElMotor de base de datos selecciona todos los registros quecumplen las condiciones de la instruccin SQL. No se conveniente abusar de este predicado ya que obligamos al motor dela base de datos a analizar la estructura de la tabla para averiguar los campos que contiene, es mucho ms rpido indicar ellistado de campos deseados.
SELECT*FROMCLIENTESTOP
Devuelve un cierto nmero de registros que entran entre al principio o al final de un rango especificado por una clusulaORDER BY. Supongamos que queremos recuperar los nombres de los tres primeros clientes tomando como referencia unorden ASC para el campo cedula.
SELECT TOP 3 CEDULA, NOMBREFROM CLIENTESORDER BY CEDULA DESC
http://www.monografias.com/trabajos10/motore/motore.shtmlhttp://www.monografias.com/trabajos10/motore/motore.shtml -
5/26/2018 Introduccin a Visual FOX Pro
10/60
El resultado de la consulta mostrar en pantalla los tres primeros registros que correspondan al orden. Observe en la figuralos nmeros de cedula.
Como la sentencia ORDER BY cedula DESC indica que se deben ordenar en orden descendente los registros, se muestranlos tres primeros contando del ltimo en adelante.
Observe elcambio en el resultado de la consulta si ORDER BY cedula ASC
SELECT TOP 3 CEDULA, NOMBREFROM CLIENTESORDER BY CEDULAASC
El orden establecido para el campo cedula es ASC, por lo tanto toma los tres primeros registros en forma ascendente.Si no se incluye la clusula ORDER BY, la consulta devolver un conjunto arbitrario de 3registros de la tabla Clientes .Elpredicado TOP no elige entre valores iguales. Si se incluye la palabra clave PERCENT, se redondear al nmero entero msalto el nmero de columnas devuelto en el resultado.Los valores permitidos para nExprcuando se incluye la palabra clavePERCENT son 0.01 a 99.99.
Ejemplo
La tabla Clientes tiene un total de 10 registros, si se quiere visualizar en pantalla un 20% ordenado por cedula en ordenascendente la lnea decdigo ser:
SELECT TOP 20 PERCENT CEDULA, NOMBREFROM CLIENTESORDER BY CEDULAASC
Y el resultado de la bsqueda como se puede apreciar son dos registros correspondientes al 20 % de 10 que hay en total
http://www.monografias.com/trabajos2/mercambiario/mercambiario.shtmlhttp://www.monografias.com/trabajos14/nuevmicro/nuevmicro.shtmlhttp://www.monografias.com/trabajos12/eticaplic/eticaplic.shtmlhttp://www.monografias.com/trabajos12/eticaplic/eticaplic.shtmlhttp://www.monografias.com/trabajos14/nuevmicro/nuevmicro.shtmlhttp://www.monografias.com/trabajos2/mercambiario/mercambiario.shtml -
5/26/2018 Introduccin a Visual FOX Pro
11/60
El valor que va a continuacin de TOP debe ser un Integer sin signo.
DISTINCT
Omite los registros que contienen datos duplicados en los campos seleccionados. Para que los valores de cada campolistado en la instruccin SELECT se incluyan en la consulta deben ser nicos.
Por ejemplo, suponga que se desea saber los cdigos de rea de los nmeros de telfono de los clientes almacenados en latabla. Es de supones que con que aparezca una sola vez 0274 o 0416 es suficiente as existan otros clientes con el mismocdigo de rea.
SELECT DISTINCT SUBSTR(TELEFONO, 1, 4) FROM CLIENTES
En vista que el cdigo de rea y el nmero del telfono estn integrados en un atributo atmico, se debe extraer el datoque se necesita para la consulta usando laFuncin SUBSTR(), y as en la consulta se podrn observar los diferentes cdigosde rea que conforman los telefonos de los clientes.
VISTA DE LA CONSULTA USANDODISTINCT
Con otras palabras el predicado DISTINCT devuelve aquellos registros cuyos campos indicados en la clusula SELECTposean un contenido diferente. El resultado de una consulta que utiliza DISTINCT no es actualizable y no refleja loscambios subsiguientes realizados por otros usuarios.
En el ejemplo anterior tambin se puede apreciar como se mezcla de forma eficiente cdigo de SQL con el de VFP y seconsiguen mejores resultados.
CRITERIOS DE SELECCIN
Se vio la forma de recuperar los registros de las tablas, las formas empleadas devolvan todos los registros de lamencionada tabla. A lo largo de este apartado se estudiarn las posibilidades de filtrar los registros con el fin de recuperarsolamente aquellos que cumplan una o unas condiciones preestablecidas
WHERE
Indica a Visual FoxPro que incluya nicamente ciertos registros en el resultado de la consulta. WHERE es necesario pararecuperar datos de varias tablas. Para las condiciones de filtro se puede utilizar cualquiera de los siguientes operadores:
Operador Comparacin= Igual
== Exactamente igual
http://www.monografias.com/trabajos7/mafu/mafu.shtmlhttp://www.monografias.com/trabajos7/mafu/mafu.shtml -
5/26/2018 Introduccin a Visual FOX Pro
12/60
LIKE SQL LIKE Distinto de> Mayor que
>= Mayor o igual que< Menor que
criterio de filtro para la consulta.
Ejemplo 2
Se necesita conocer el nombre y el telfono de los clientes concrdito hasta Bs. 100.000,00
SELECT NOMBREAS CREDITO_HASTA_100000, TELEFONOFROM CLIENTESWHERE CREDITO
-
5/26/2018 Introduccin a Visual FOX Pro
13/60
Observe el resultado de la consulta, estn todos los clientes a excepcin de los que tienen como cdigo postal 5101.
INTERVALOS DE VALORES
EL OPERADOR BETWEEN
Para indicar que deseamos recuperar los registros segn el intervalo de valores de un campo emplearemos el operadorBETWEEN cuya sintaxis es:
CAMPO[NOT]BETWEENVALOR1ANDVALOR2*La condicin NOT es opcional.
En este caso la consulta devolvera los registros que contengan en "campo" un valor incluido en el intervalo valor1, valor2(ambos inclusive). Si anteponemos la condicin Not devolver aquellos valores no incluidos en el intervalo.
Ejemplo 1
Se necesita conocer los datos de los clientes que tienen una carta de crdito entre dos y tres millones de Bolvares.La lnea de cdigo SQL ser:
SELECTNOMBREASCREDITO_ENTRE_200000_Y_3000000 ,TELEFONO,COD_POSTAL,;CREDITOFROMCLIENTESWHERECREDITOBETWEEN2000000AND3000000
EL OPERADOR LIKE
Se utiliza para comparar una expresin de cadena con unmodelo en una expresin SQL. Su sintaxis es:
EXPRESIN LIKEMODELO
En donde expresin es una cadena modelo o campo contra el que se compara expresin. Se puede utilizar el operador LIKEpara encontrar valores en los campos que coincidan con el modelo especificado. Por modelo puede especificar un valor
completo (Ana Mara), o se pueden utilizar caracteres comodn para encontrar un rango de valores (LIKE An%).
El operador LIKE se puede uti lizar en una expresin para comparar un valor de un campo con una expresin de cadena. Porejemplo, si introduce LIKE C% en una consulta SQL, la consulta devuelve todos los valores de campo que comiencen porla letra C. En una consulta con parmetros, puede hacer que el usuario escriba el modelo que se va a utilizar.
Puede utilizar el signo de porcentaje (%) y subrayado ( _ ) como parte de la expresin. El signo de porcentaje representa acualquier secuencia de caracteres desconocidos en la cadena. El subrayado representa un solo carcter desconocido en lacadena.
http://www.monografias.com/trabajos14/comer/comer.shtmlhttp://www.monografias.com/trabajos/adolmodin/adolmodin.shtmlhttp://www.monografias.com/trabajos34/el-caracter/el-caracter.shtmlhttp://www.monografias.com/trabajos34/el-caracter/el-caracter.shtmlhttp://www.monografias.com/trabajos/adolmodin/adolmodin.shtmlhttp://www.monografias.com/trabajos14/comer/comer.shtml -
5/26/2018 Introduccin a Visual FOX Pro
14/60
Ejemplo
Listar por pantalla todos los clientes cuyos nombres comiencen con la letra I
La lnea SQL ser:
SELECTNOMBREASCLIENTES_CUYOS_NOMBRES_EMPIEZAN_POR_I FROMCLIENTES;WHEREUPPER(NOMBRE)LIKE'I%'
Observe el resultado de la consulta, no importa que siga a la letra I en el campo nombre, SQL lomuestra en pantalla.
AGRUPAMIENTO DE REGISTROS
GROUPBYCOLUMNAGRUPO[,COLUMNAGRUPO...]
Agrupa las filas de la consulta basndose en los valores de una o ms columnas. ColumnaGrupopuede ser el nombre de uncampo normal de una tabla, o un campo que incluya una funcin de campo SQL, o una expresin numrica indicando laposicin de la columna en la tabla resultado (la columna ms a la izquierda tiene el nmero 1).
Su sintaxis es:
SELECTCAMPOSFROMTABLAWHERECRITERIOGROUPBYCAMPOSDELGRUPOHAVINGCONDICIN
Los valores Null en los campos GROUP BY se agrupan y no se omiten. No obstante, los valores Null no se evalan enninguna de las funciones SQL agregadas.
Se utiliza la clusula WHERE para excluir aquellas filas que no desea agrupar, y la clusula HAVING para filtrar los registros
una vez agrupados.
A menos que contenga un dato Memo u Objeto OLE , un campo de la lista de campos GROUP BY puede referirse acualquier campo de las tablas que aparecen en la clusula FROM, incluso si el campo no esta incluido en la instruccinSELECT.
Todos los campos de la lista de campos de SELECT deben o bien incluirse en la clusula GROUP BY.
HAVING es similar a WHERE, determina qu registros se seleccionan. Una vez que los registros se han agrupado utilizandoGROUP BY, HAVING determina cuales de ellos se van a mostrar.
Si tenemos una tabla llamada clientes con los siguientes registros:
http://www.monografias.com/trabajos11/tebas/tebas.shtmlhttp://www.monografias.com/trabajos11/tebas/tebas.shtmlhttp://www.monografias.com/trabajos14/dinamica-grupos/dinamica-grupos.shtmlhttp://www.monografias.com/trabajos14/dinamica-grupos/dinamica-grupos.shtmlhttp://www.monografias.com/trabajos14/dinamica-grupos/dinamica-grupos.shtmlhttp://www.monografias.com/trabajos14/dinamica-grupos/dinamica-grupos.shtmlhttp://www.monografias.com/trabajos11/tebas/tebas.shtml -
5/26/2018 Introduccin a Visual FOX Pro
15/60
Se nos plantea la siguiente interrogante Cules registros cumplen con la condicin de poseer Cdigo Postal 5101 yadems son clientes Movilnet?
Agrupamos los clientes con Cod_Postal 5101 y luego con HAVING seleccionamos los clientes Movilnet (0416)
SELECTCEDULA,NOMBRE,COD_POSTALFROMCLIENTESWHERECOD_POSTAL='5101';
GROUPBY
CEDULA,
NOMBRE,
COD_POSTAL
HAVING
SUBSTR
(TELEFONO,1,4)
='0416'
AVG
Calcula la media aritmtica de un conjunto de valores contenidos en un campo especificado de una consulta. Su sintaxis esla siguiente
AVG(EXPR)
En donde exprrepresenta el campo que contiene los datos numricos para los que se desea calcular la media o unaexpresin que realiza unclculo utilizando los datos de dicho campo. La media calculada por AVG es la media aritmtica (lasuma de los valores dividido por el nmero de valores). La funcin AVG no incluye ningn campo Null en el clculo.
Ejemplo
Usando la tabla CLIENTES se desea conocer el promedio de crdito de los clientes de la ciudad de Mrida (cod_postal =5101)
SELECTAVG(CREDITO)ASCLIENTES_MERIDAFROMCLIENTES;WHERECOD_POSTALIN('5101')
El resultado de la consulta ser:
COUNT
Calcula el nmero de registros devueltos por una consulta. Su sintaxis es la siguiente
COUNT(EXPR)
En donde expr contiene el nombre del campo que desea contar. Los operandos de expr pueden incluir el nombre de uncampo de una tabla, una constante o una funcin. Aunque expr puede realizar un clculo sobre un campo, COUNTsimplemente cuenta el nmero de registros sin tener en cuenta qu valores se almacenan en los registros. La funcinCOUNT no cuenta los registros que tienen campos NULL.
SELECTCOUNT(CAMPO)ASNOMBRE_MSCARA FROMTABLA
Ejemplo
Se desea determinar Cuntos Clientes tienen crdito entre Bs. 100.000,00 y Bs. 300.000,00?
http://www.monografias.com/trabajos7/caes/caes.shtmlhttp://www.monografias.com/trabajos7/caes/caes.shtml -
5/26/2018 Introduccin a Visual FOX Pro
16/60
SELECTCOUNT(CREDITO)ASCLIENTES_ENTRE_100000_Y_300000 FROMCLIENTES;WHERECREDITOBETWEEN100000AND300000
Como puede observar SQL proporciona el nmero de clientes que cumplen con la condicin especificada en WHERE.Max y Min
Devuelven el mnimo o el mximo de un conjunto de valores contenidos en un campo especifico una consulta. Su sintaxises:
MIN(EXPR)MAX(EXPR)
En donde expres el campo sobre el que se desea realizar el clculo. Exprpuede incluir el nombre de un campo de una tablao una constante.
Ejemplo
Se desea conocer el monto en Bs. De la mayor carta de crdito de uncliente forneo cdigo postal 5102
SELECTMAX(CREDITO)ASCLIENTE_CON_MAYOR_CRDITO_5102 FROMCLIENTES;WHERECOD_POSTALIN('5102')
SELECTMIN(CREDITO)ASCLIENTE_CON_MENOR_CRDITO_5102 FROMCLIENTES;WHERECOD_POSTALIN('5102')
El cdigo SQL anterior muestra el uso de MIN para ubicar el monto de la menor carta de crdito de la zona 5102.SUM
Devuelve la suma del conjunto de valores contenido en un campo especfico de una consulta. Su sintaxis es:SUM (expr)
En donde expr representa el nombre del campo que contiene los datos que desean sumarse o una expresin que realiza unclculo utilizando los datos de dichos campos. Los operandos de exprpueden incluir el nombre de un campo de una tabla ouna constante.
Ejemplo
Se desea conocer el monto total de las carteras de crdito de los clientes cdigo de rea 5102
http://www.monografias.com/trabajos11/sercli/sercli.shtmlhttp://www.monografias.com/trabajos11/sercli/sercli.shtml -
5/26/2018 Introduccin a Visual FOX Pro
17/60
SELECTSUM(CREDITO)ASTOTAL_CRDITO_5102FROMCLIENTESWHERECOD_POSTALIN('5102')
Este ejemplo suma los resultados de las consultas anteriores con MAX Y MIN.
SUBCONSULTAS
Una subconsulta es una instruccin SELECT anidada dentro de una instruccin SELECT, SELECT...INTO, INSERT...INTO,DELETE, o UPDATE o dentro de otra subconsulta.
Puede utilizar tres formas de sintaxis para crear una subconsulta:
1. Comparacin [ANY | ALL | SOME] (instruccin SQL)2. Expresin [NOT] IN (instruccin SQL)3. [NOT] EXISTS (instruccin SQL)
En donde:
Comparacin:Es una expresin y un operador de comparacin que compara la expresin con el resultado de lasubconsulta.
Expresin:Es una expresin por la que se busca el conjunto resultante de la subconsulta.
Instruccin SQL:Es una instruccin SELECT, que sigue el mismo formato y reglas que cualquier otra instruccinSELECT. Debe ir entre parntesis.
Se puede utilizar una subconsulta en lugar de una expresin en la lista de campos de una instruccin SELECT o en unaclusula WHERE o HAVING. En una subconsulta, se utiliza una instruccin SELECT para proporcionar un conjunto de uno oms valores especificados para evaluar en la expresin de la clusula WHERE o HAVING.
Se puede utilizar el predicado ANY, ALL o SOME, los cuales son sinnimos, para recuperar registros de la consulta principal,que satisfagan la comparacin con cualquier otro registro recuperado en la subconsulta.
Cuando la condicin de filtro incluye ANY o SOME, el campo debe cumplir la condicin de comparacin en al menos unode los valores generados por la subconsulta.
Cuando la condicin de filtro incluye ALL, el campo debe cumplir la condicin de comparacin para todos los valoresgenerados por la subconsulta antes de que se incluya el registro en el resultado de la consulta.
Ejemplo
Usando una subconsulta muestre una lista de clientes cuyo telfono sea Movilnet (cdigo de rea 0416)
SELECTNOMBRE,CREDITO,TELEFONOFROMCLIENTESWHERESUBSTR(TELEFONO,1,4);IN(SELECTTELEFONOFROMCLIENTESWHERESUBSTR(TELEFONO,1,4)='0416')
Ejemplo
Suponga que se desea conocer los datos personales de los clientes concartas de crdito por arriba de Bs. 2.500.000,00
SELECTNOMBRE,CREDITO,TELEFONOFROMCLIENTESWHERECREDITO=ALL;(SELECTCREDITOFROMCLIENTESWHERECREDITO>2500000)
Ejemplo
Encontrar los clientes con carteras de crdito entre Bs. 2.300.000,00 Y Bs. 2.500.000
http://www.monografias.com/trabajos14/comer/comer.shtmlhttp://www.monografias.com/trabajos14/comer/comer.shtml -
5/26/2018 Introduccin a Visual FOX Pro
18/60
SELECTNOMBRE,CREDITO,TELEFONOFROMCLIENTESWHERECREDITO=ANY;(SELECTCREDITOFROMCLIENTESWHERECREDITOBETWEEN2300000AND2500000)**** WHERE credito = ANY (subconsulta SQL) indica que se incluya en la consulta a cualquier registro que cumpla aunque sea un a parte de la condicin de la
subconsulta.
Ejemplo
Liste a todos los clientes que tengan residencia en la ciudad de Mrida.
SELECTNOMBRE,CREDITO,TELEFONO,CIUDADFROMCLIENTESWHERECIUDAD=ALL;(SELECTCIUDADFROMCLIENTESWHEREUPPER(CIUDAD)='MERIDA')
Observe el efecto que se produce en la consulta cuando se cambia el operador = antes de ALL
SELECTNOMBRE,CREDITO,TELEFONO,CIUDADFROMCLIENTESWHERECIUDAD>ALL;(SELECTCIUDADFROMCLIENTESWHEREUPPER(CIUDAD)='MERIDA')
SELECTNOMBRE,CREDITO,TELEFONO,CIUDADFROMCLIENTESWHERECIUDAD se muestran en la consulta todos aquellos registros que cumplen con la condicin de comenzar con unaletra mayor a M. Y al utilizar < se agregan a la consulta slo aquellos cuya letra inicial en el campo ciudad est por debajode M.
Ejemplo
Mostrar en pantalla los clientes con cartas de crdito menores a Bs. 200.000,00
SELECTNOMBRE,CREDITO,TELEFONOFROMCLIENTESWHERECREDITO
-
5/26/2018 Introduccin a Visual FOX Pro
19/60
CONSULTAS DE UNIN INTERNAS
Las vinculaciones entre tablas se realizan mediante la clusula INNER que combina registros de dos tablas siempre quehaya concordancia de valores en un campo comn. Su sintaxis es:
SELECTCAMPOSFROMTB1INNERJOINTB2ONTB1.CAMPO1OPERADORTB2.CAMPO2
En donde:
tb1, tb2: Son los nombres de las tablas desde las que se combinan los registros.
campo1, campo2: Son los nombres de los campos que se combinan. Si no son numricos, los campos deben ser del mismotipo de datos y contener el mismo tipo de datos, pero no tienen que tener el mismo nombre.
OPERADOR:Es cualquier operador de comparacin relacional: =, , =, o .
Se puede utilizar una operacin INNER JOIN en cualquier clusula FROM. Esto crea una combinacin por equivalencia,conocida tambin como unin interna. Las combinaciones de equivalencia son las ms comunes; stas combinan losregistros de dos tablas siempre que haya concordancia de valores en un campo comn a ambas tablas. Se puede utilizarINNER JOIN con las tablas Clientes y Pedidos (verilustracin ms abajo) para seleccionar todos los pedidos de los clienteso los pedidos de un cliente en particular.
Ms formalmente INNER JOIN especfica que el resultado de la consulta contenga slo filas para una tabla con la quecoincidan una o varias filas en otra tabla.
Ejemplo
Mostrar una consulta para determinar la fecha y el monto de los pedidos de un cliente X identificado por su nmero decedula.
SELECT FECHA, MONTOFROM PEDIDOSINNER JOIN CLIENTES; ON CLIENTES.CEDULA= 2ANDPEDIDOS.CEDULA= 2
http://www.monografias.com/trabajos12/lailustr/lailustr.shtmlhttp://www.monografias.com/trabajos12/lailustr/lailustr.shtml -
5/26/2018 Introduccin a Visual FOX Pro
20/60
Suponga que complementamos esta consulta aadiendo los campos nombre y telfono de la tabla clientes, el resultadopor pantalla sera:
La lnea de cdigo SQL ser:
SELECT clientes.nombre, clientes.telefono, fecha, monto FROM PEDIDOS INNER JOIN clientes;ON clientes.cedula = 2 AND pedidos.cedula = 2
Observe la sintaxis con que se escriben los campos de la tabla que no est activa (clientes). Se antecede el nombre delcampo con el identificador de la tabla y un punto.
Existen rdenes agregadas que cambiaran el resultado de la consulta dependiendo como las use. Estas son:
LEFT [OUTER] JOIN: especifica que el resultado de la consulta contenga todas las filas de la tabla a la izquierda de la
palabra clave JOIN y slo las filas que concuerden procedentes de la tabla a la derecha de la palabra clave JOIN. La palabraclave OUTER es opcional; se puede incluir para resaltar que se ha creado una combinacin externa.
RIGHT [OUTER] JOIN especifica que el resultado de la consulta contenga todas las filas desde la tabla hasta la derecha dela palabra clave JOIN y slo las filas que concuerden desde la tabla hasta la izquierda de la palabra clave JOIN. La palabraclave OUTER es opcional; puede incluirse para resaltar la creacin de una combinacin externa.
FULL [OUTER] JOIN: especifica que el resultado de la consulta contenga todas las filas, concuerden o no, de ambas tablas.
La palabra clave OUTER es opcional; se puede incluir para resaltar que se ha creado una combinacin externa.
Ejemplo:
Observe como cambia el resultado de la consulta anterior agregando las rdenes LEFT, RIGHT, FULL.
LEFT
SELECT clientes.nombre, clientes.telefono, fecha, monto FROM PEDIDOS LEFT JOIN clientes;ON clientes.cedula = 2 AND pedidos.cedula = 2
En este caso la condicin del ON es especfica el campo cedula en ambas tablas debe ser igual a 2; pero LEFT indica a SQLque ingrese los campos a la izquierda de la palabra JOIN los cuales se muestran como .NULL., en vista que no cumplen conla condicin cedula = 2.
RIGHT
-
5/26/2018 Introduccin a Visual FOX Pro
21/60
SELECT clientes.nombre, clientes.telefono, fecha, monto FROM PEDIDOS RIGHT JOIN; clientes ON clientes.cedula = 2AND pedidos.cedula = 2
El resultado ser
Los campos a la derecha de JOIN se mostrarn como .NULL. en vista que no cumplen con la condicin cedula = 2.FULL
SELECT CLIENTES.NOMBRE, CLIENTES.TELEFONO, FECHA, MONTOFROM PEDIDOSFULL JOIN CLIENTES; ONCLIENTES.CEDULA= 2AND PEDIDOS.CEDULA= 2
En este caso se muestran los campos de ambas tablas coincidan o no con la condicin establecida.
Consultas De Unin Externas
Se utiliza la operacin UNION para crear una consulta de unin, combinando los resultados de dos o ms consultas o tablasindependientes. Su sintaxis es:
SELECT campos separados por comas FROM nombre tabla WHERE condicin UNION; SELECT campos separados porcomas FROM nombre tabla WHERE condicin
Los campos de ambos SELECT deben estar en igual nmero en ambas instrucciones y deben ser del mismo tipo.
EJEMPLO:
Suponga que tenemos una tabla VENDEDORES junto con la ya conocida tabla CLIENTES con la que hemos trabajadoanteriormente.
-
5/26/2018 Introduccin a Visual FOX Pro
22/60
Se le solicita que presente una vista por pantalla de todos los vendedores y clientes que se encuentran geogrficamenteubicados en la zona 5101.
La lnea SQL ser:
SELECT CEDULA, NOMBRE, TELEFONOAS CLIENTES_Y_VENDEDORES FROM CLIENTESWHERE COD_POSTAL ='5101'; UNION SELECT CEDULA, NOMBRE, TELEFONOFROM VENDEDORESWHERE ZONA= '5101'
Observe que el nico vendedor que cumple con la condicin aparece en la consulta en el ltimo lugar.
Ejemplo
Suponga ahora que desea ver a todos los vendedores y clientes en una sola vista la lnea de comando SQL ser ms sencillacomo se puede apreciar:
SELECT CEDULA, NOMBRE, TELEFONOAS CLIENTES_Y_VENDEDORES FROM CLIENTESUNION; SELECT CEDULANOMBRE, TELEFONOFROM VENDEDORES
Como podr observar (en la siguiente pgina) la vista de la consulta incluye a todos los registros de la tabla clientes y a losdos nicos vendedores registrados.
Vista de la consulta de todos los clientes y vendedores usando UNION.
-
5/26/2018 Introduccin a Visual FOX Pro
23/60
Unir Tablas con SQL
Explicacin Visual de los SQL JOIN
Supongamos que tenemos las dos siguientes tablas. La tabla A est a la izquierda, y la tabla B est a la derecha. Lasrellenaremos con cuatro registros cada una.
Ahora unamos estas dos tablas por el campo nombre de algunas formas distintas, y veamos si podemos obtener unarepresentaciones conceptuales con los ingeniosos diagramas de VENN.INNER JOIN slo produce los registros que coinciden en las dos tablas A y B.
1. SELECT * FROM TABLAA2. INNER JOINTABLAB3. ON TABLAA.NOMBRE = TABLAB.NOMBRE
FULL OUTER JOIN produce el conjunto de todos los registros en las tablas A y B, con registros coincidentes en amboslados cuando sea posible. Si no hay coincidencia, el lado que falta contendr NULL .
1. SELECT * FROM TABLAA2. FULL OUTER JOIN TABLAB3. ON TABLAA.NOMBRE = TABLAB.NOMBRE
LEFT OUTER JOIN produce el conjunto completo de registros de la tabla A, con los registros coincidentes (si estndisponibles) en la tabla B. Si no hay coincidencia, el lado derecho contendr NULL.
1. SELECT * FROM TABLAA2. LEFT OUTER JOIN TABLAB3. ON TABLAA.NOMBRE = TABLAB.NOMBRE
-
5/26/2018 Introduccin a Visual FOX Pro
24/60
Para producir el conjunto de registros en la tabla A, pero no en la tabla B, usamos el mismo LEFT OUTER JOIN, y luegoexcluimos los registros que no queremos del lado derecho mediante una clusula WHERE.
1. SELECT * FROM TABLAA2. LEFT OUTER JOIN TABLAB
3. ON TABLAA.NOMBRE = TABLAB.NOMBRE4. WHERE TABLAB.ID IS NULL5.
Para producir el conjunto de registros nicos de la tabla A y la tabla B, usamos el mismo FULL OUTER JOIN, y luegoexcluimos los registros que no queremos de los dos lados mediante una clusula WHERE.
1. SELECT * FROM TABLAA2. FULL OUTER JOIN TABLAB3. ON TABLAA.NOMBRE = TABLAB.NOMBRE
4. WHERE TABLAA.ID IS NULL5. OR TABLAB.ID IS NULL
Tambin hay un CROSS JOIN, el cul no puede ser expresado con un diagrama de VENN:
1. SELECT * FROM TABLAA
2.
CROSS JOINTABLA
B
Esto une todo con todo, dando como resultado 4 x 4 = 16 filas, muchas ms de las que tenamos en los conjuntos
originales. Si haces unos simples clculos, puedes ver por qu es un JOIN muy peligroso de ejecutar en tablas grandes.
-
5/26/2018 Introduccin a Visual FOX Pro
25/60
EJEMPLO DE SENTENCIA APLICADA A BASES DE DATOS DE ADMINPAQ
REPLACECOLUMNAB WITHCOLUMNAA Remplaza el dato seleccionado de ColumnaA en la Colu
REPLACECOLUMNAB WITHCOLUMNAA FORRECNO()>1Remplaza todos los datos de la ColumnaA, con losColumnaB en la misma tabla.
REPLACECRFC WITHXAXX010101000 FORRECNO()>1 Remplaza toda la columna Crfc con el texto XAXX01010
REPLACECRAZONSO01 WITHSTRTRAN(CRAZONSO01, "", "") FORRECNO()>1
Busca en todas las cadenas de la columna Crazons
carcter y lo remplaza por .SELECT * FROM MGW10005.DBF WHEREMGW10005.CCODIGOP01 ; IN(TA003)
Busca TA003 en la columna ccodigop01 de lamgw10005
UPDATE MGW10008 SET CFECHAEX01 = (SELECT CFECHA FROM MGW10008 WHERECIDDOCUM01 = 5)
Copia en toda la columna CFechaEx01 el valor qencuentra en la columna Cfecha en el renglcorresponde a Ciddocum01 igual a 5.
REPLACECTEXTOEX02 WITHALLTRIM(CTEXTOEX02) FORRECNO()>1Quita los espacios en blanco del principio y fin de los dtoda la columna Ctextoex02
REPLACECIMPORTE04 WITHVAL(CTEXTOEX03)FORRECNO()>1Copia lo que existe en la columna Ctextoex03 en la cCimporte04 convierto el texto en nmero.
SELECT * FROM MGW10008.DBF WHERECIDDOCUM01=34646Busca en la Tabla MGW10008 los registros que tengacampo Ciddocum01 el valor 1290
LOCATE NEXT 1FOR MGW10008.CIDDOCUM01=1890 Busca el siguiente registro en donde Ciddocum01 es 1290
SELECT CIDDOCUM01, RECNO() AS REGISTRO FROM MGW10008.DBF WHERECIDDOCUM01=1290
Devuelve el nmero de registro que tienen los campCiddocum01 igual a 1290
SELECT * FROM WHERE CIDDOCUM01NOT IN (SELECT CIDDOCUM01FROM ERR.DBF)Compara la tabla abierta Bien.dbf con la tabla existentmismo directorio Err.dbf y devuelvo los registros conten
Bien.dbf que no estn presentes en Error.dbfSELECT * FROM MGW10008.DBF WHERECIDCONCE01 = 3030
Realiza un filtro en la tabla mgw10008 y desplieregistros que tengan en el campo cidconce01 el valor 30
SELECT * FROM MGW10010.DBF WHERECTEXTOEX03 =MATRIZCOPY TO "C:\USERS\JORGE\DESKTOP\DOCUMENTOS DE COLONIAL.XLS" TYPE XL5 Exporta a un archivo en Excel la TablaGO1036 Va al registro 1036REINDEX Re indexa la tablaSELECT * FROM MGW10008.DBF WHERECIDDOCUM02 =4 ORCIDDOCUM02 =5UPDATEMGW10005 SETCFECCOSEX1 = (SELECT CFECCOSEX1 FROM MGW10005 WHERECIDPRODU01 = 0)REPLACECIDUNIVEN WITH2 FORRECNO()>2
Copia en toda la columna CFechaEx01 el valor qencuentra en la columna Cfecha en el renglcorresponde a Ciddocum01 igual a 5.
SELECT MGW10008 SET ORDER TO CFOLIOASCENDINGUPDATEMGW10002 SET CFECHAALTA =(SELECT CFECHAALTA FROM MGW10002 WHERECIDCLIEN01 =743)UPDATEMGW10002 SETCTEXTOEX01 = (SELECT CTEXTOEX01 FROM MGW10002 WHERECIDCLIEN01 = 1)
REPLACECIDMONEDA,CIDLISTAPR01 WITH2 FORRECNO()>2
UPDATEMGW10002 SETCDIASPRO01 = (SELECT CDIASPRO01 FROM MGW10002 WHERECIDCLIEN01 = 743)
SELECT * FROM mgw10008.dbf WHEREciddocum01=
Replace MGW10008.cFechaul01 WITH 12311899CIDDOCUM01= ThisForm.Text1.value
SET FILTER TO CRFC=""REPLACE ALL CRFC WITH "XAXX000000000"FOR EMPTY(CRFC) Pone en el campo CRFC la cadena XAXX=010101000SELECT CFECHAFROM MGW10008.DBF WHERECSERIEDO01=MFKF ANDCFOLIO=719 Bsqueda de 2 Referencias
REPLACE ALL CIDUNIDA01 WITH5FORCIDDOCUM02=4Pone un 5 en el campo CPORCENT06 para todregistros que donde el campo CIDOCUM04 sea igual a
REPLACE ALL CINTERES01 WITH5FORCTIPOCLI01=1
SELECT * FROM MGW10045 WHERE NOT EMPTY(CUUID)Selecciona en la tabla MGW10045 los registros en dovalor de la columna CUUID no est vaco.
REPLACE MGW10008.CFECHAWITH DATE(1899,12,30)Cambia el Campo Fecha del Documento de AdminPAQDefault (12/30/1899)
SELECT CIDDOCUM01 FROM MGW10008.DBF GROUP BY CIDDOCUM01 HAVINGCOUNT(CIDDOCUM01)> 1
Busca en toda la tabla MGW1000.DBF si existen duplicados en CIDDOCUM01
SELECT * FROM MGW10008.DBF WHERECSERIEDO01=MABF ANDCFOLIO=2684 25262REPLACE CCANCELADO WITH1 FORCIDDOCUM01 = 32368REPLACE CMETODOPAG,CNUMCTAPAG WITHNO IDENTIFICADOFORRECNO()>1UPDATE MGW10002 SET CEMAIL2 = (SELECT CEMAIL2 FROM MGW10002 WHERECIDCLIEN01 =20)SELECT TOP25 NOMBRE, APELLIDO FROMESTUDIANTES
ORDER BYNOTA DESC;SELECTCODIGO,VALORFROMVENTASORDERBYVALORDESC
GOBOTTBROWSE
CALCMAX(CFECHA)TOMVALOR FORCONDICIONES A CUMPLIR
-
5/26/2018 Introduccin a Visual FOX Pro
26/60
*EJEMPLOCALCMAX(FECHA)TOMFECHA FOR!ACTUALIZA ANDMONTH(FECHA)=GMES
SELECT TOP 1 * FROM MGW10008.DBF WHERE Ccodigoc01 = 0001 (SELECTCidclien01FROM mgw10008.dbf) AND Ciddocum01 > 0
SELECT * FROM mgw10010.WHERE Ciddocum01 NOT (SELECT Ciddocum01 Fmgw10008.dbf) AND Ciddocum0
0
SELECT * FROM mgw10002.dbf WhereCiddocum01FROM mgw10008.dbfSELECT * FROMMGW10008.DBFWH
MGW10002.Ccodigoc01SELECT MAX(CFECHA), CTOTAL , FROMMGW10008.DBF WHERECIDCLIEN01 =2 ANDCIDDOCUM02 = 35
SELECT TOP 1 CIDDOCUM01 FROM MGW10008.DBF WHERE CIDCLIEN01 =2 AND CIDDOCUM02 =35 ORDER BY CFECHA DESC
SELECT MGW10008.CIDCLIEN01, MGW10008.CFECHA, CIDPRODU01, MGW10010.CTOTAL,MGW10010.CIMPORTE04, MGW10010.CTEXTOEX01 FROM MGW10010 INNER JOIN MGW10008 ON
MGW10010.CIDDOCUM01 = MGW10008.CIDDOCUM01 WHERE MGW10010.CTEXTOEX01 = "ACTIVO" ORDERMGW10008.CIDCLIEN01 DESC INTO CURSOR DATOS
SELECT tabla1.*,tabla2.*,tabla3.* , ;FROM tabla1,tabla2,tabla3 ;WHERE tabla1.codigo = tabla2.codigo ;AND tabla1.codigo = tabla3.codigo ;
AND tabla2.codigo = tabla3.codigo
SELECT * FROM TABLA WHERE RECNO()=1 INTO CURSOR CCURSOR1READWRITE && PRIMER REGISTROSELECT * FROM TABLA WHERE RECNO()=RECCOUNT() INTO CURSORCCURSOR2 && ULTIMO REGISTROSELECT CCURSOR1APPEND FROM DBF("CCURSOR2")SELECT RECNO(1) AS INICIO, COUNT(1) AS FINAL; FROMMUNICIPIOS; INTO CURSOR SHA
SELECT TOP 1 ID FROM TABLA ORDER BY ID
DESC
EJEMPLO 1. PROGRAMA
CLOSE TABLES ALLSET EXCLUSIVE OFFHIDE WINDOWS SCREEN && Para ocultar las ventanas que generan las consultas
_SCREEN.WindowState = 1 && Para ocultar las ventanas que generan las consultas_SCREEN.VISIBLE = .F. && Para ocultar las ventanas que generan las consultasLOCAL VDIASMES, VDIASANO, VANOAS INTEGER
VDIASMES = DAY(GOMONTH(DATE()-DAY(DATE()),1)) + 1 && Calcula Das del MesVANO = (YEAR(DATE()))
IF MOD(VANO,4)=0 AND (MOD(VANO,100)#0 OR MOD(VANO,400)=0) && Calcula si el ao es bisiestoVDIASANO = 366
ELSE
-
5/26/2018 Introduccin a Visual FOX Pro
27/60
VDIASANO = 365ENDIF
USE MGW10010.DBF SHARED IN 0SCAN
REPLACE MGW10010.CIMPORTE04 WITH 0 && Reinicia el campo CIMPORTE04 en la tabla MGW10010.DBF que es la deMovimientos
REPLACE MGW10010.CTEXTOEX01 WITH "" && Reinicia el campo CTEXTOEX01 en la tabla MGW10010.DBF que es la deMovimientos
REPLACE MGW10010.CFECHAEX01 WITH DATE(1899,12,30) && Reinicia el campo CFECHAEX01 en la tablaMGW10010.DBF que es la de MovimientosENDSCANSCAN
REPLACE CIMPORTE04 WITH 1 FOR CIDPRODU01 = 34 && El Producto 34 es 1 da pagadoREPLACE CIMPORTE04 WITH 7 FOR CIDPRODU01 = 35 && El Producto 35 es Una SemanaREPLACE CIMPORTE04 WITH 15 FOR CIDPRODU01 = 36 && El Producto 36 es Una QuincenaREPLACE CIMPORTE04 WITH VDIASMES FOR CIDPRODU01 = 37 && El Producto 37 es 1 Mes, VDiaMes calcula los das
del mesREPLACE CIMPORTE04 WITH 183 FOR CIDPRODU01 = 38 && El Producto 38 es 1 SemestreREPLACE CIMPORTE04 WITH VDIASANO FOR CIDPRODU01 = 39 && El Producto 39 es 1 Ao, VDIASANO calcula los das
del aoREPLACE CFECHAEX01 WITH (DATE(YEAR(CFECHA), MONTH(CFECHA), DAY(CFECHA)) + CIMPORTE04) FOR
BETWEEN (CIDPRODU01,34,37) && Remplaza el Campo CFechaex01 con la fecha del pago ms los das pagadosREPLACE CTEXTOEX01 WITH "VENCIDO" FOR CFECHAEX01 < DATE() &&Si la fecha calculada es menor a la actual pone
VENCIDO en el campo CTEXTOEX01REPLACE CTEXTOEX01 WITH "ACTIVO" FOR CFECHAEX01 >= DATE() &&Si la fecha calculada es mayor a la actual pone
ACTIVO en el campo CTEXTOEX01ENDSCANUSE MGW10002.DBF SHARED IN 0USE MGW10008.DBF SHARED IN 0UPDATE MGW10002 SET CIMPORTE04 = (SELECT CIMPORTE04 FROM MGW10002 WHERE CIDCLIEN01 = 0) && Reinicia elcampo CIMPORTE04 en la tabla MGW10002.DBF que es la de ClientesUPDATE MGW10002 SET CTEXTOEX01 = (SELECT CTEXTOEX01 FROM MGW10002 WHERE CIDCLIEN01 = 0) && Reinicia el
campo CTEXTOEX01 en la tabla MGW10002.DBF que es la de ClientesUPDATE MGW10002 SET CFECHAEX01 = (SELECT CFECHAEX01 FROM MGW10002 WHERE CIDCLIEN01 = 0) && Reinicia elcampo CFECHAEX01 en la tabla MGW10002.DBF que es la de Clientes
SELECT COUNT(CIDCLIEN01)AS FINAL FROM MGW10002.DBF INTO CURSOR POSICION && Cuenta cuantos clientes estn dadosde altaSELECT MGW10008.CIDCLIEN01, MGW10010.CTEXTOEX01, MGW10010.CIMPORTE04, MGW10010.CFECHAEX01 FROMMGW10010 INNER JOIN MGW10008 ON MGW10010.CIDDOCUM01 = MGW10008.CIDDOCUM01 WHERE MGW10010.CTEXTOEX01= "ACTIVO" AND MGW10008.CCANCELADO = 0 ORDER BY MGW10008.CIDCLIEN01 DESC INTO CURSOR DATOS READWRITE&&Crea una tabla temporal con los datos de clientes que estn activosX = POSICION.FINAL
A = 1FOR X = 1 TO POSICION.FINAL && Inicia el Ciclo donde actualiza datos de clientes
SELECT CIDCLIEN01, CTEXTOEX01, CIMPORTE04, CFECHAEX01 FROM DATOS WHERE DATOS.CIDCLIEN01 = A INTOCURSORACTUALES &&Se usan cursores para que la consultaSELECT MGW10002SCAN
IF MGW10002.CIDCLIEN01 = ACTUALES.CIDCLIEN01REPLACE MGW10002.CTEXTOEX01 WITHACTUALES.CTEXTOEX01REPLACE MGW10002.CIMPORTE04 WITHACTUALES.CIMPORTE04REPLACE MGW10002.CFECHAEX01 WITHACTUALES.CFECHAEX01
ENDIFENDSCAN
-
5/26/2018 Introduccin a Visual FOX Pro
28/60
A = A + 1ENDFORCLOSE TABLES ALLWAIT "Los registros se han actualizado..." WINDOW AT 22,80 TIMEOUT 5
CLOSE TABLES ALLSET EXCLUSIVE OFFLOCAL VDIASMES, VDIASANO, VANO AS INTEGER
VDIASMES = DAY(GOMONTH(DATE()-DAY(DATE()),1)) + 1VANO = (YEAR(DATE()))
IF MOD(VANO,4)=0 AND (MOD(VANO,100)#0 OR MOD(VANO,400)=0)VDIASANO = 366
ELSE
VDIASANO = 365ENDIF
USE MGW10010.DBF SHARED IN 0SCAN
REPLACE CIMPORTE04 WITH 1 FOR CIDPRODU01 = 34REPLACE CIMPORTE04 WITH 7 FOR CIDPRODU01 = 35REPLACE CIMPORTE04 WITH 15 FOR CIDPRODU01 = 36REPLACE CIMPORTE04 WITH VDIASMES FOR CIDPRODU01 = 37REPLACE CIMPORTE04 WITH 183 FOR CIDPRODU01 = 38REPLACE CIMPORTE04 WITH VDIASANO FOR CIDPRODU01 = 39REPLACE CFECHAEX01 WITH (DATE(YEAR(CFECHA),
MONTH(CFECHA), DAY(CFECHA)) + CIMPORTE04) FOR BETWEEN(CIDPRODU01,34,37)
REPLACE CTEXTOEX01 WITH "VENCIDO" FOR CFECHAEX01 =DATE()ENDSCAN
CLOSE TABLES ALLUSE MGW10010.DBF SHARED IN 0USE MGW10002.DBF SHARED IN 0USE MGW10008.DBF SHARED IN 0LOCAL VTECTOEX01 AS STRINGLOCAL VCLIENTE AS INTEGER
-
5/26/2018 Introduccin a Visual FOX Pro
29/60
SELECT MGW10008.CIDCLIEN01, MGW10010.CTEXTOEX01 FROMMGW10010 INNER JOIN MGW10008 ON MGW10010.CIDDOCUM01 =MGW10008.CIDDOCUM01 WHERE MGW10010.CTEXTOEX01 = "ACTIVO"ORDER BY MGW10008.CIDCLIEN01 DESC INTO CURSOR DATOSREADWRITESELECT COUNT(CIDCLIEN01) AS FINAL FROM DATOS INTO CURSORPOSICIONX = POSICION.FINALI = 1FOR I = 1 TO X
SELECT DATOSGO ISELECT CTEXTOEX01 FROM DATOSVTEXTOEX01 = CTEXTOEX01
SELECT CIDCLIEN01 FROM DATOSVCLIENTE = CIDCLIEN01REPLACE MGW10002.CTEXTOEX01 WITH VTEXTOEX01 FOR
CIDCLIEN01 = VCLIENTEENDFORCLOSE TABLES ALLUSE MGW10002.DBF SHARED IN 0USE MGW10008.DBF SHARED IN 0USE MGW10010.DBF SHARED IN 0
SELECT MGW10008.CIDCLIEN01, MGW10008.CFECHA, CIDPRODU01,MGW10010.CTOTAL, MGW10010.CIMPORTE04 FROM MGW10010 INNERJOIN MGW10008 ON MGW10010.CIDDOCUM01 = MGW10008.CIDDOCUM01WHERE MGW10010.CTEXTOEX01 = "ACTIVO" ORDER BYMGW10008.CIDCLIEN01 DESC INTO CURSOR DATOS
SELECT * FROM MGW10010.DBF WHERE CTEXTOEX01 = "ACTIVO"ORDER BY CIDDOCUM01 ASC INTO CURSOR ACTIVOS
DO WHILE !EOF(ACTIVOS) && Begins loopIF EOF( )EXIT
ENDIFVDOCUMENTO = ACTIVOS.CIDDOCUM01VTEXTOEX01 = ACTIVOS.CTEXTOEX01
-
5/26/2018 Introduccin a Visual FOX Pro
30/60
SELECT CIDCLIENT01 FROM MGW10002.DBF WHERE CIDDOCUM01 =VDOCUMENTO
VCLIENTE = CIDCLIENT01REPLACE MGW10002.CTEXTOEX01 WITH VTEXTOEX01 FOR
CIDCLIEN01 = VCLIENTESKIPLOOP
ENDDO && Ends loopCLOSE TABLES ALL
CLOSE TABLES ALLSET EXCLUSIVE OFFLOCAL VDIASMES, VDIASANO, VANO AS INTEGER
VDIASMES = DAY(GOMONTH(DATE()-DAY(DATE()),1))VANO = (YEAR(DATE()))
IF MOD(VANO,4)=0 AND (MOD(VANO,100)#0 OR MOD(VANO,400)=0)VDIASANO = 366
ELSEVDIASANO = 365
ENDIF
USE MGW10010.DBF SHARED IN 0SCAN
REPLACE CIMPORTE04 WITH 1 FOR CIDPRODU01 = 34REPLACE CIMPORTE04 WITH 7 FOR CIDPRODU01 = 35REPLACE CIMPORTE04 WITH 14 FOR CIDPRODU01 = 36REPLACE CIMPORTE04 WITH VDIASMES FOR CIDPRODU01 = 37REPLACE CIMPORTE04 WITH 183 FOR CIDPRODU01 = 38REPLACE CIMPORTE04 WITH VDIASANO FOR CIDPRODU01 = 39
ENDSCANCLOSE TABLES ALL
USE MGW10002.DBF SHARED IN 0LOCAL VIDCLIENMIN, VIDCLIENMAX AS INTEGER
SELECT TOP 1 CCODIGOC01 FROM MGW10002.DBF ORDER BY CIDCLIEN01 DESCVIDCLIENMIN = CCODIGOC01SYSTEM.OUT.PRINTLN(VIDCLIENMIN);SELECT MAX(CFECHA), CTOTAL , FROM MGW10008.DBF WHERE CIDCLIEN01 = 2 AND CIDDOCUM02 =
35VIDCLIENMAX = CCODIGOC01SYSTEM.OUT.PRINTLN(VIDCLIENMAX);
-
5/26/2018 Introduccin a Visual FOX Pro
31/60
CLOSE TABLES ALLEXIT
SELECT CIMPORTE04 FROM MGW10010.DBF WHERE CIDDOCUM01 = NDOC1
USE MGW10008.DBF SHARED IN 0
LOCAL LDFECHA, LDANNO, LDMES, LDDIA, LDFECHAFINAL, LDANNOFINAL, LDMESFINAL, LDDIAFINAL,LDFECFINALLOCAL NDIAS1, NDOC1 AS INTEGER
SELECT TOP 1 CIDDOCUM01 FROM MGW10008.DBF WHERE CIDCLIEN01 = 2 AND CIDDOCUM02 = 35 ANDCCANCELADO = 0 ORDER BY CFECHA DESCNDOC1 = CIDDOCUM01
SELECT TOP 1 CFECHA FROM MGW10008.DBF WHERE CIDCLIEN01 = 2 AND CIDDOCUM02 = 35 ANDCCANCELADO = 0 ORDER BY CFECHA DESCLDFECHA = CFECHALDANNO = YEAR(LDFECHA)LDMES = MONTH(LDFECHA)
LDDIA = DAY(LDFECHA)
SELECT CIMPORTE04 FROM MGW10010.DBF WHERE CIDDOCUM01 = NDOC1NDIAS1 = CIMPORTE04
LDFECFINAL = DATE(LDANNO, LDMES, LDDIA) + NDIAS1LDANNOFINAL = YEAR(LDFECFINAL)LDMESFINAL = MONTH(LDFECFINAL)LDDIAFINAL = DAY(LDFECFINAL)
CLOSE TABLES ALLUSE MGW10002.DBF SHARED IN 0SCAN
REPLACE CFECHAEX01 WITH DATE(LDANNOFINAL, LDMESFINAL, LDDIAFINAL) FOR CIDCLIEN01 = 2ENDSCANCLOSE ALL
SELECT CIDDOCUM01, CIDPRODU01, CTOTAL, CIMPORTE04 FROM MGW10010 WHERE CIDPRODU01 BETWEEN 34AND 37
SELECT CIDDOCUM01, CIDPRODU01, CTOTAL, CIMPORTE04 FROM MGW10010 WHERE CIDPRODU01 BETWEEN 34AND 37;UNION SELECT CIDDOCUM01, CIDCLIEN01, CFECHA FROM MGW10008 WHERE CCANCELADO = 0
SELECT MGW10008.CIDCLIEN01, MGW10008.CFECHA, CIDPRODU01, MGW10010.CTOTAL,MGW10010.CIMPORTE04 FROM MGW10010 INNER JOIN MGW10008 ON MGW10010.CIDDOCUM01 =
MGW10008.CIDDOCUM01 WHERE MGW10008.CCANCELADO = 0 AND MGW10010.CIDPRODU01 >= 34MGW10010.CIDPRODU01
-
5/26/2018 Introduccin a Visual FOX Pro
32/60
SELECT MGW10008.CIDCLIEN01, MGW10008.CFECHA, CIDPRODU01, MGW10010.CTOTAL,MGW10010.CIMPORTE04 FROM MGW10010 INNER JOIN MGW10008 ON MGW10010.CIDDOCUM01 =MGW10008.CIDDOCUM01 WHERE MGW10008.CCANCELADO = 0 AND BETWEEN (MGW10010.CIDPRODU01,34,37)
ORDER BY MGW10008.CIDCLIEN01 DESC INTO CURSOR DATOS
SELECT MGW10010.CIDDOCUM01 AS IDENTIFICADOR MGW10008.CIDCLIEN01, MGW10008.CFECHA,
CIDPRODU01, MGW10010.CTOTAL, MGW10010.CIMPORTE04 FROM MGW10010 INNER JOIN MGW10008 ONMGW10010.CIDDOCUM01 = MGW10008.CIDDOCUM01 WHERE MGW10008.CCANCELADO = 0 AND BETWEEN(MGW10010.CIDPRODU01,34,36) ORDER BY MGW10008.CIDCLIEN01
SELECT * FROM mgw10010.dbf WHERE Ciddocum01 IN (SELECT Ciddocum01 FROM mgw10008.dbf) ANDCiddocum01 > 0
LOCAL viFolio AS Double
SET DECIMALS TO 0&&SET DEFAULT TO (THISFORM.edTabla.Value)SET EXCLUSIVE OFF
USE MGW10008.DBF IN 0
LOCATE FOR MGW10008.CIDDOCUM01=129THISFORM.vSentinel.ControlSource = 'mgw10008.cFechaul01'
GO TOPSTORE VAL(THISFORM.edtFolio.Value) TO viFolioLOCATE FOR MGW10008.cfolio = viFolio AND TRIM(UPPER(MGW10008.cseriedo01)) =TRIM(UPPER(THIS.Parent.edtSerie.Value))IF FOUND() = .F.
MESSAGEBOX('No Encontrado')ELSE
THISFORM.aiddocum01.ControlSource = 'mgw10008.ciddocum01'THISFORM.aidclien01.ControlSource = 'mgw10008.cidclien01'THISFORM.aFecha.ControlSource = 'mgw10008.cFecha'
THISFORM.aSeriedo01.ControlSource = 'mgw10008.cSeriedo01'THISFORM.aFolio.ControlSource = 'mgw10008.cFolio'THISFORM.aRazonso01.ControlSource = 'mgw10008.cRazonso01'THISFORM.aTotal.ControlSource = 'mgw10008.cTotal'
THISFORM.aFechave01.ControlSource = 'mgw10008.cFechave01'THISFORM.edFechaIntereses.ControlSource = 'mgw10008.cFechaul01'THISFORM.aTextoex03.ControlSource = 'mgw10008.cTextoex03'
THISFORM.aImporte03.ControlSource = 'mgw10008.cImporte03'THISFORM.aImporte04.ControlSource = 'mgw10008.cImporte04'
-
5/26/2018 Introduccin a Visual FOX Pro
33/60
ENDIFUSE MGW10002.DBF SHARED IN 1
LOCATE FOR MGW10002.cidclien01 = THISFORM.aidclien01.ValueTHISFORM.acodigoc01.ControlSource = 'mgw10002.ccodigoc01'
USE \tutorial\invoicesSELECT * FROM invoices WHERE cno IN ;
(SELECT cno FROM invoices GROUP BY cno HAVING COUNT(cno) > 1) ;ORDER BY cno ;INTO CURSOR xxx
UPDATE MGW10005 SET CIDFOTOP01 = (SELECT CIDFOTOP01 FROM MGW10005 WHERECIDPRODU01 = 15)
UPDATE MGW10005 SET CIDUNIDA01 = (SELECT CIDUNIDA01 FROM MGW10005 WHERECIDPRODU01 = 1)
UPDATE MGW10005 SET CIDVALOR01 = (SELECT CIDVALOR01 FROM MGW10005 WHERECIDPRODU01 = 15)
-
5/26/2018 Introduccin a Visual FOX Pro
34/60
UPDATE MGW10005 SET CIDVALOR02 = (SELECT CIDVALOR02 FROM MGW10005 WHERECIDPRODU01 = 15)
UPDATE MGW10005 SET CIDVALOR03 = (SELECT CIDVALOR03 FROM MGW10005 WHERECIDPRODU01 = 15)
UPDATE MGW10005 SET CIDVALOR04 = (SELECT CIDVALOR04 FROM MGW10005 WHERE
CIDPRODU01 = 15)
UPDATE MGW10005 SET CIDVALOR05 = (SELECT CIDVALOR05 FROM MGW10005 WHERECIDPRODU01 = 15)
UPDATE MGW10005 SET CIDVALOR06 = (SELECT CIDVALOR06 FROM MGW10005 WHERECIDPRODU01 = 15)
UPDATE MGW10005 SET CFECHAEX01 = (SELECT CFECHAEX01 FROM MGW10005 WHERECIDPRODU01 = 1)
UPDATE MGW10005 SET CTIMESTAMP = (SELECT CTIMESTAMP FROM MGW10005 WHERECIDPRODU01 = 1)
UPDATE MGW10005 SET CFECHAER01 = (SELECT CFECHAER01 FROM MGW10005 WHERECIDPRODU01 = 1)
UPDATE MGW10005 SET CFECCOSEX1 = (SELECT CFECCOSEX1 FROM MGW10005 WHERECIDPRODU01 = 15)
UPDATE MGW10005 SET CFECCOSEX2 = (SELECT CFECCOSEX2 FROM MGW10005 WHERECIDPRODU01 = 15)
UPDATE MGW10005 SET CFECCOSEX3 = (SELECT CFECCOSEX3 FROM MGW10005 WHERECIDPRODU01 = 15)
UPDATE MGW10005 SET CFECCOSEX4 = (SELECT CFECCOSEX4 FROM MGW10005 WHERECIDPRODU01 = 15)
UPDATE MGW10005 SET CFECCOSEX5 = (SELECT CFECCOSEX5 FROM MGW10005 WHERECIDPRODU01 = 15)
UPDATE MGW10005 SET CBANCOSEX = (SELECT CBANCOSEX FROM MGW10005 WHERECIDPRODU01 = 1)
UPDATE MGW10005 SET CESCUOTAI2 = (SELECT CESCUOTAI2 FROM MGW10005 WHERECIDPRODU01 = 15)
UPDATE MGW10005 SET CESCUOTAI3 = (SELECT CESCUOTAI3 FROM MGW10005 WHERECIDPRODU01 = 15)
UPDATE MGW10005 SET CDESGLOSAI = (SELECT CDESGLOSAI FROM MGW10005 WHERECIDPRODU01 = 15)
UPDATE MGW10005 SET CIDUNICOM = (SELECT CIDUNICOM FROM MGW10005 WHERECIDPRODU01 = 1)
-
5/26/2018 Introduccin a Visual FOX Pro
35/60
UPDATE MGW10005 SET CIDUNIVEN = (SELECT CIDUNIVEN FROM MGW10005 WHERECIDPRODU01 = 1)
UPDATE MGW10005 SET CIDUNIVEN = (SELECT CIDUNIVEN FROM MGW10005 WHERECIDPRODU01 = 15)
UPDATE MGW10005 SET CIDUNIVEN = (SELECT CIDUNIVEN FROM MGW10005 WHERECIDPRODU01 = 15)
UPDATE MGW10005 SET CIDUNIVEN = (SELECT CIDUNIVEN FROM MGW10005 WHERECIDPRODU01 = 15)
UPDATE MGW10005 SET CIDUNICOM = (SELECT CIDUNICOM FROM MGW10005 WHERECIDPRODU01 = 15)
UPDATE MGW10005 SET CIDUNIVEN = (SELECT CIDUNIVEN FROM MGW10005 WHERECIDPRODU01 = 15)
CLOSE TABLES ALL
USE "NOMBRE_DE_TABLA" EXCLUSIVE
FOR A=1150 TO 1207
GO RECORD A&&
DELETE
ENDFOR
PACK
CLOSE TABLES ALL
CASO PRACTICO 1.
Reinicio de Inters Moratorio en la empresa Mueblera 2012
ReplacecFechapr01 withcFecha forCIDDOCUM02 =4 orCIDDOCUM02 =5 andcPendiente >0 andcCancelado =0
ReplacecFechaen01 withcFecha forCIDDOCUM02 =4 orCIDDOCUM02 =5 and cPendiente >0 andcCancelado =0
-
5/26/2018 Introduccin a Visual FOX Pro
36/60
ReplacecFechaul01 withcFechave01 forCIDDOCUM02 = 4 orCIDDOCUM02 = 5 andcPendiente > 0 andcCancelado = 0
ReplacecPorcent06 with5 forCIDDOCUM02 = 4 orCIDDOCUM02 = 5 andcPendiente > 0 andcCancelado =0
Esta ltima instruccin es solo para filtrar los documentos que afectamos o afectaremos
SELECT * FROM mgw10008.dbf WHEREciddocum02 =4 orciddocum02 =5 andcPendiente >0 andcCancelado =0
CASO PRACTICO 2.
Bsqueda de un Movimiento Especifico en las tablas de AdminPAQ
Contexto: Encontrar el Movimiento de Inventario para el producto con cdigo D24071014 de la fecha 11 de Agosto de 2012
- En la tabla MGW10010.DBF que es la de movimientos filtramos el movimiento con la siguiente instruccin
SELECT * FROM mgw10010.dbf WHERE cFecha = DATE(2012,08,11) AND cIdProdu01 =1642
- En la tabla MGW1008.DBF que es la de documentos filtramos el ID del documento con la siguiente instruccin
SELECT * FROM mgw10008.dbfWHERE cIddocum01= 2578
Si lo encontr podemos ver el folio del documento para ir a AdminPAQ y analizarlo, pero si no es porque se borr el documentomanualmente y no los movimientos, con esta instruccin los ubicamos
SELECT * FROM mgw10010.dbf WHERE Ciddocum01 NOT IN (SELECT Ciddocum01 FROMmgw10008.dbf) AND Ciddocum01 > 0
Esto desplegar los movimientos que no tienen documento, para marcarlos para eliminacin lo hacemos con la siguiente instruccin
DELETE FROM mgw10010.dbf WHERE Ciddocum01 NOT IN (SELECT Ciddocum01 FROMmgw10008.dbf) AND Ciddocum01 > 0
Para buscar los registros marcados para eliminacin en una tabla utilizamos
SELECT * FROM mgw10010.dbf WHEREDELETED()
Y en la Tabla sin filtros activados ponemos esta para borrarlos fsicamente
PACK
-
5/26/2018 Introduccin a Visual FOX Pro
37/60
CASO PRACTICO 3.
Reinicio de Campos Adicionales de Datos capturados por el usuario
UPDATE MGW10008.DBFSET CTEXTOEX01= (SELECT CTEXTOEX01FROM MGW10008.DBF WHERECIDDOCUM01= 1)
UPDATE MGW10008.DBF SET CTEXTOEX02= (SELECT CTEXTOEX02FROM MGW10008.DBF WHERECIDDOCUM01= 1)
UPDATE MGW10008.DBF SET CTEXTOEX03= (SELECT CTEXTOEX03FROM MGW10008.DBF WHERECIDDOCUM01= 1)
UPDATE MGW10008.DBF SET CFECHAEX01= (SELECT CFECHAEX01FROM MGW10008.DBF WHERECIDDOCUM01= 73489)
UPDATE MGW10008.DBF SET CIMPORTE01= (SELECT CIMPORTE01FROM MGW10008.DBF WHERE
CIDDOCUM01= 1)UPDATE MGW10008.DBF SET CIMPORTE02= (SELECT CIMPORTE02FROM MGW10008.DBF WHERECIDDOCUM01= 1)
UPDATE MGW10008.DBF SET CNUMEROG01= (SELECT CNUMEROG01FROM MGW10008.DBF WHERECIDDOCUM01= 1)
UPDATE MGW10008.DBF SET CMENSAJE01= (SELECT CMENSAJE01FROM MGW10008.DBF WHERECIDDOCUM01= 1)
UPDATE MGW10008.DBF SET CCUENTAM01= (SELECT CCUENTAM01FROM MGW10008.DBF WHERECIDDOCUM01= 1)
UPDATE MGW10008.DBF SET CNUMEROC01= (SELECT CNUMEROC01FROM MGW10008.DBF WHERE
CIDDOCUM01= 1)
UPDATE MGW10008.DBF SET CPESO = (SELECT CPESO FROM MGW10008.DBF WHERECIDDOCUM01= 1)
UPDATE MGW10008.DBF SET CREFEREN01= (SELECT CREFEREN01FROM MGW10008.DBF WHERECIDDOCUM01= 1)
UPDATE MGW10008.DBF SET COBSERVA01= (SELECT COBSERVA01FROM MGW10008.DBF WHERECIDDOCUM01= 1)
UPDATE MGW10008.DBF SET CDESTINA01= (SELECT COBSERVA01FROM MGW10008.DBF WHERECIDDOCUM01= 1)
1.- Funciones de Ejemplo
=caracteresEspeciales('string a enviar')
-
5/26/2018 Introduccin a Visual FOX Pro
38/60
procedure caracteresEspecialeslparameters lstringfor i = 1 to len(lstring)if !betw(asc(substr(lstring,i,1)),65, 90) and ;!betw(asc(substr(lstring,i,1)),97,122) and ;!betw(asc(substr(lstring,i,1)),48, 57) and ;asc(substr(lstring,i,1))32
lstring = stuff(lstring,at(substr(lstring,i,1),lstring),1,'')
endifendforreturn lString
2.- Ciclos. Aplicaciones y EjemplosLocal i as integer
For i=1 to 10
(ACCION)
Endfor
2.-
Do While x > 1
(ACCION)
EndDo
Do Case
Case X = 1
(ACCION1)
Case X = 2
(ACCION2)
Otherwise
(OTRA ACCION)
EndCase
SENTENCIA CASE
DO CASECASE lExpression1[Commands]CASE lExpression2[Commands]]...CASE lExpressionN[Commands]]OTHERWISE[Commands]]
ENDCASE
-
5/26/2018 Introduccin a Visual FOX Pro
39/60
PROGRAMA 1. Este cambia las datos de CPESO a Ctextoex03 y Cnumeroc01 aCtextoex03 dejando limpias las anteriores
Replace Ctextoex03 with ALLtrim(Peso) for recno()>1
Replace Ctextoex02 with Alltrim(CNUMEROC01) for recno()>1UPDATE MGW10008 SET CPeso = (SELECT Cnumeroc01 FROM MGW10008 WHERE CIDDOCUM01 =1)UPDATE MGW10008 SET Cnumeroc01 = (SELECT CPeso FROM MGW10008 WHERE CIDDOCUM01 =1)UPDATE MGW10008 SET Cimporte02 = (SELECT Cimporte03 FROM MGW10008 WHERECIDDOCUM01 = 1)UPDATE MGW10008 SET Cimporte03 = (SELECT Cimporte02 FROM MGW10008 WHERECIDDOCUM01 = 1)UPDATE MGW10008 SET Cmensaje01 = (SELECT Cmensaje01 FROM MGW10008 WHERECIDDOCUM01 = 1)
Replace Cmensaje01 with Ctextoex03 for recno()>1Replace Ctextoex03 with Ctextoex02 for recno()>1Replace Ctextoex02 with Cmensaje01 for recno()>1
PROGRAMA 2. Este programa limpia los abonos calculados por el programaControlFact.exe para que los vuelva a calcular.
SCANIF Ciddocum02 = 1
REPLACE Creferen01 WITH IF Ciddocum02 = 2
REPLACE Creferen01 WITH IF Ciddocum02 = 3
REPLACE Creferen01 WITH IF Ciddocum02 = 4
REPLACE Creferen01 WITH ENDSCAN
2.- ProgramasEjemplo 1.
CLOSE TABLE ALLUSE mgw10008REPLACE Crazonso01 with STRTRAN(Crazonso01, "", "") for recno()>1SCAN
IF Cidclien01 = 9644REPLACE Cidclien01 WITH 9641
ENDIFIF Cidclien01 = 9641
REPLACE Cidclien01 WITH 9641
-
5/26/2018 Introduccin a Visual FOX Pro
40/60
ENDIFIF Cidclien01 = 9597
REPLACE Cidclien01 WITH 9641ENDIFIF Cidclien01 = 9632
REPLACE Cidclien01 WITH 9641
ENDIFIF Cidclien01 = 9589
REPLACE Cidclien01 WITH 9641ENDIF
ENDSCAN
Ejemplo 2.CLOSE TABLE ALLUSE mgw10008REPLACE Crazonso01 with STRTRAN(Crazonso01, "", "") for recno()>1SCAN
IF Cidclien01 = 9644
REPLACE Cidclien01 WITH 9647REPLACE CTEXTOEX03 WITH Crazonso01
ENDIFIF Cidclien01 = 9641
REPLACE Cidclien01 WITH 9647REPLACE CTEXTOEX03 WITH Crazonso01
ENDIFIF Cidclien01 = 9597
REPLACE Cidclien01 WITH 9647REPLACE CTEXTOEX03 WITH Crazonso01
ENDIFIF Cidclien01 = 9632
REPLACE Cidclien01 WITH 9647REPLACE CTEXTOEX03 WITH Crazonso01
ENDIFIF Cidclien01 = 9647
REPLACE Crazonso01 WITH "VENTA AL PUBLICO"ENDIF
ENDSCAN
Ejemplo 3.CLOSE TABLE ALLUSE mgw10008
SCAN IF Ciddocum02 = 1REPLACE Creferen01 WITH
IF Ciddocum02 = 2REPLACE Creferen01 WITH
IF Ciddocum02 = 3REPLACE Creferen01 WITH
IF Ciddocum02 = 4REPLACE Creferen01 WITH
-
5/26/2018 Introduccin a Visual FOX Pro
41/60
ENDSCAN
Ejemplo 4. Cambia series de los documentos facturaCLOSE TABLE ALLUSE mgw10008SCAN
IF Cidconce01 = 3035REPLACE Cseriedo01 WITH CFCOENDIF
IF Cidconce01 = 3002REPLACE Cseriedo01 WITH CFCR
ENDIFIF Cidconce01 = 3039
REPLACE Cseriedo01 WITH CRCOENDIF
IF Cidconce01 = 3006REPLACE Cseriedo01 WITH CRCR
ENDIF
IF Cidconce01 = 3036REPLACE Cseriedo01 WITH DFCO
ENDIFIF Cidconce01 = 5
REPLACE Cseriedo01 WITH DFCRENDIF
IF Cidconce01 = 3038REPLACE Cseriedo01 WITH DRCO
ENDIFIF Cidconce01 = 3035
REPLACE Cseriedo01 WITH DRCRENDIF
IF Cidconce01 = 3034REPLACE Cseriedo01 WITH MFCO
ENDIFIF Cidconce01 = 4
REPLACE Cseriedo01 WITH MFCRENDIF
IF Cidconce01 = 3037REPLACE Cseriedo01 WITH MRCO
ENDIFIF Cidconce01 = 3004
REPLACE Cseriedo01 WITH MRCRENDIF
ENDSCAN
Ejemplo 3. Reiniciado de ClculosCLOSE TABLE ALLUSE mgw10008SCAN
-
5/26/2018 Introduccin a Visual FOX Pro
42/60
IF Ciddocum02 = 1REPLACE Creferen01 WITH
IF Ciddocum02 = 2REPLACE Creferen01 WITH
IF Ciddocum02 = 3REPLACE Creferen01 WITH
IF Ciddocum02 = 4REPLACE Creferen01 WITH
ENDSCAN
Apndice A . Normas de codificacin enVisual FoxPro
ResumenAplicar buenas normas de codificacin es importante para el desarrollo de cualquier proyecto; pero esparticularmente importante cuando muchos desarrolladores estn trabajando en el mismo proyecto. Tenerestablecido pautas de codificacin contribuye a garantizar que el cdigo es de alta calidad, con pocos errores y de
fcil mantenimiento.
Estas normas o pautas se basan en aos de desarrollo de aplicaciones con Visual FoxPro y de aprendizaje de culestcnicas de codificacin trabajan mejor. Adems, muchos conceptos han sido adaptados a partir de Code Complete(Microsoft Press, ISBN 1-55615-484-4) escrito por Steve McConnell. Este libro, es considerado una de las guas msimportantes en prcticas de codificacin. Puede que usted no est de acuerdo con stas normas, no hay problemas.Para m, estas normas han funcionado bien.
Normas de codificacin
Convenciones de variables.
No utilice guiones bajos en nombres de variables. Mezclar maysculas y minsculas mejora la legibilidad. La primeraletra de la variable debe indicar su alcance y debe ser siempre minscula. Trate de evitar el uso de variables pblicas(PUBLIC) y privadas. En su lugar utilice propiedades de los objetos de su aplicacin, propiedades de formularios yvariables locales.
l - Local g - Global p - Private
-
5/26/2018 Introduccin a Visual FOX Pro
43/60
t - Parameter
La segunda letra indica el tipo de dato.
c - Character n - Numeric d - Date t - DateTime l - Logical m - Memo a - Array o - Object x - Indeterminate
Ejemplos de nombres de variables vlidos:
lcFirstName
tdBeginDate
Tenga en mente el alcance de la variable. Preferiblemente deben utilizarse variables locales (LOCAL). Las variablespblicas (PUBLIC) deben evitarse tanto como sea posible. Las declaraciones de variables, tales como: LOCALlcMyVar se deben colocar todas al inicio de la rutina a ejecutar, en lugar de dispersarlas por el cdigo. Declare todaslas variables al inicio de la rutina, en lugar de entremezclarlas por todo el cdigo y asigne su valor predeterminado.
Forma incorrecta:
LOCAL lnMyNum
lnMyNum = 12
LOCAL lcMyString
lcMyString = "ABCD"
LOCAL lnCounter
lnCounter = 0
Forma correcta:
-
5/26/2018 Introduccin a Visual FOX Pro
44/60
LOCAL lnMyNum, lcMyString, lnCounter
lnMyNum = 12
lcMyString = "ABCD"
lnCounter = 0
Convenciones para nombrar objetos.
Las primeras tres letras del nombre de un objeto deben ser utilizadas para indicar el tipo del objeto.
chk - Check box cbo - Combo box
cmd - Command button cmg - Command Group cnt - Container ctl - Control cus - Custom edt - Edit box frm - Form frs - Form set grd - Grid grc - Grid Column grh - Grid Column Header img - Image
lbl - Label lin - Line lst - List box olb - OLE Bound Control ole - OLE Object como un ActiveX Control opg - Option Group pag - Page pgf - Pageframe sep - Separator shp - Shape spn - Spinner txt - Text box
tmr - Timer tbr - Toolbar
Normas para el cdigo fuente:
1. Utilice abundantes espacios en blanco. Har ms legible su cdigo.2. Utilice tabuladores, en lugar de espacios para indentar.
-
5/26/2018 Introduccin a Visual FOX Pro
45/60
3. Los comandos y funciones de Visual FoxPro deben escribirse en maysculas y con la totalidad de sus letras, el restodel cdigo debe estar escrito con combinacin de maysculas y minsculas. Mantenga lneas cortas, tanto como seaposible, para evitar desorden (line wrap) durante la impresin. Si una lnea de cdigo, ocupa fsicamente ms de unalnea, utilice las expresiones de unin como primer carcter de la lnea siguiente. Las expresiones de unin son deltipo +, AND, OR, NOT, etc. Recuerde adems, que la lnea debe ser tan vlida como si fuera una sola lnea. Coloqueun espacio antes del punto y coma.
Ejemplos de malas separaciones de lneas:
lcCommand = "Hoy es Mircoles, 16 de Octubre de 2003" + ;
"Son las 2:00 PM"
IF ldBeginDate >= DATE() OR ;
ldEndDate >= DATE()
Ejemplos de buenas separaciones de lneas:
lcCommand = " Hoy es Mircoles, 16 de Octubre de 2003" ;
+ "Son las 2:00 PM"
IF ldBeginDate >= DATE() ;
OR ldEndDate >= DATE()
Por lo visto, cada uno combina las maysculas y minsculas de forma diferente. Aunque no existe va
correcta o incorrecta en este aspecto, si hay algunas normas que ayudan a la legibilidad. Adems, utilice expresiones
CASE en lugar de IF, cuando parezca que se pueden agregar posteriormente ms opciones, incluso si existen slo dosopciones en el momento en que es escrito el cdigo o, para liberarse de las instrucciones IF, ELSE, IF. Separe cada
CASE por una lnea en blanco. El comentario para el CASE debe ir por debajo del mismo.
Forma incorrecta:
DO CASE
-
5/26/2018 Introduccin a Visual FOX Pro
46/60
* Este es el comentario para el caso 1
CASE lnCount = 1
lcRetVal = "Uno"
* Este es el comentario para el caso 2
CASE lnCount = 2
lcRetVal = "Dos"
* Este es el comentario para otherwise
OTHERWISE
lcRetVal = "Otro"
ENDCASE
Forma correcta:
DO CASE
CASE lnCount = 1
* Este es el comentario para el caso 1
lcRetVal = "Uno"
CASE lnCount = 2
* Este es el comentario para el caso 2
lcRetVal = "Dos"
OTHERWISE
* Este es el comentario para otherwise
lcRetVal = "Otro"
ENDCASE
-
5/26/2018 Introduccin a Visual FOX Pro
47/60
Trate de evitar macro sustitucin. A veces la macrosutitucin es la nica va para lograr algo. Asegrese dedocumentar, por qu utiliza macrosustitucin y cul es el propsito del cdigo. En la mayora de los casos, lamacrosustitucin hace que el cdigo sea menos legible. Utilice la funcin EVALUATE(). Si es posible, peronuevamente los comentarios son importantes para ayudar a leer el cdigo.
Evite utilizar STORE. Utilice "[]" en lugar de parntesis en los arreglos. As, el cdigo es ms legible. Coloque espacios entre los operadores matemticos. Esto mejora la legibilidad. Utilice parntesis cuando llame mtodos o funciones, incluso, si no pasa ningn parmetro. Evite el uso de m. a la izquierda del signo igual. Esto mejorar el rendimiento. Al concatenar cadenas, coloque la variable a la izquierda del signo +. Esto mejorar el rendimiento.
Normas para comentar cdigo
Los comentarios son parte importante de cualquier aplicacin. Utilcelos abundantemente. Los comentarios deben
explicar por qu se han hecho algunas cosas e indicar cules son las lneas de cdigo que estn afectadas. Debeexplicar solamente cmo se hizo algo, en caso de estar utilizando complejos algoritmos o clculos.
No emplee comentarios al final de las lneas con &&. Cada comentario debe ocupar una lnea propia.
Encabezados de programa, mtodo y procedimiento.
Los encabezados de programa, mtodo y procedimiento deben indicar el nombre de la rutina, la fecha en que fuecreada originalmente, el autor y una descripcin del objetivo del procedimiento o mtodo. En caso de existirparmetros y valores devueltos, incluya una descripcin de los mismos. Para los mtodos, incluya la jerarqua deobjetos.
Ejemplo 1:
*********************************************************
* Mtodo........: frmQueue.cmdNext.Click
* Descripcin...: Displays the next item in the selected queue
* Fecha.........: 01-Oct-2001
* Autor.... ....: Fred Flintstone
*********************************************************
* Modification Summary
*
*********************************************************
Ejemplo 2:
*********************************************************
-
5/26/2018 Introduccin a Visual FOX Pro
48/60
* Funcin......: CalcIntrest
* Descripcin...: Calculate the interest in dollars on the loan
* Parmetros....: tnBalance: Required: The balance amount
* : tnRate: Required: The interest rate to apply
* Devuelve......: Numeric: The dollar amount of the interest
* Fecha.........: 01-Oct-2001
* Autor.........: Bullwinkle J. Moose
*********************************************************
* Modification Summary (Resumen de modificaciones)
*
*********************************************************
Comentar modificaciones
Es importante poner comentarios al hacer modificaciones para saber cules fueron las modificaciones realizadas, ypor qu las realiz. La seccin Modification Summary (Resumen de modificaciones) en el encabezado explicar por
qu, cundo y por quin fueron realizadas las modificaciones. En cada lugar del cdigo, donde fue realizada una
modificacin, debe comentar el cdigo viejo e indicar cul es el cdigo nuevo que fue aadido. Cada modificacindebe ser numerada. Los cambios pueden ser borrados despus de un ao; pero el Resumen de modificaciones debepermanecer.
Ejemplo:
*********************************************************
* Modification Summary
*
* /01 05-Oct-2001 George Jetson
* Changed interest calculation to include a date range factor.
* /02 10-Oct-2001 Tennessee Tuxedo
* 1. Added code to handle interest on widgets. The calculation is different.
-
5/26/2018 Introduccin a Visual FOX Pro
49/60
* 2. Changed the return value from numeric to character.
*********************************************************
*/01 lcNote = "This is the old line commented out "
*/01
lcNote = "This is the new line of code. "
*/02-1 lnInterest = a * b
*/02-1 lnInterest = lnInterest / 43
*/02-1 - Begin - Multiple lines are being added, so indicate they start here
IF UPPER(tcIntType) = "WIDGETS "
lnInterest = a * c
ELSE
lnInterest = a * b
lnInterest = lnInterest / 43
ENDIF
*/02-1End
Las lneas de comentario deben indentarse al mismo nivel del cdigo.
Este ejemplo es incorrecto:
IF lnTotalInterest = 0
*/01Begin
FOR lnCount = 1 TO lnTotal
lnTotalInterest = lnTotalInterest + laLoans[lnCount, 2]
ENDFOR
*/02End
-
5/26/2018 Introduccin a Visual FOX Pro
50/60
ENDIF
Este ejemplo es correcto:
IF lnTotalInterest = 0
*/01Begin
FOR lnCount = 1 TO lnTotal
lnTotalInterest = lnTotalInterest + laLoans[lnCount, 2]
ENDFOR
*/02End
ENDIF
Al comentar lneas que continan, hay que comentar cada lnea fsica.
Incorrecto:
*/01 lcString = "Esta cadena contiene mucho texto porque es un " ;
+ "ejemplo de una lnea verdaderamente larga "
Correcto:
*/01 lcString = "Esta cadena contiene mucho texto porque es un " ;
*/01 + "ejemplo de una lnea verdaderamente larga "
Normas para interfaz de usuarioNormas generales para interfaz de usuario (UI)
Cuando sea posible, la interfaz de usuario debe cumplir con las directivas de Windows Standards descritas en ellibro "Microsoft Windows User Experience ", Microsoft Press, ISBN 0-7356-0566-1. Este libro se encuentra disponibleen:http://msdn.microsoft.com/library/en-us/dnwue/html/welcome.asp.Tenga en mente todo el tiempo al usuario. Mientras ms sencillasea la funcionalidad para el usuario, mejor ser la aplicacin. Esto puede significar que el cdigo que est detrs deesta funcionalidad es ms complejo.
http://msdn.microsoft.com/library/en-us/dnwue/html/welcome.asphttp://msdn.microsoft.com/library/en-us/dnwue/html/welcome.asphttp://msdn.microsoft.com/library/en-us/dnwue/html/welcome.asphttp://msdn.microsoft.com/library/en-us/dnwue/html/welcome.asp -
5/26/2018 Introduccin a Visual FOX Pro
51/60
Formularios de entrada de datos
1. Todos los campos aptos para entrada deben utilizar Select On Entry.2. Los campos numricos deben ser formateados con comas y signos negativos cuando sea necesario.
3. Si un campo es de slo lectura, establezca la propiedad TabStop en .F., Establezca la propiedad ReadOnly a .T. o lapropiedad Enabled a .F., segn sea el caso. La propiedad ReadOnly se utiliza cuando el campo nunca es modificable.La propiedad Enabled se utiliza cuando el campo es modificable cuando se cumple una determinada condicin (esevaluada a .F.)
4. Utilice la barra de estado para mostrar un mensaje al usuario que indique el propsito del campo.5. Muestre siempre los valores predeterminados, en los casos en que se aplique.6. Inhabilite (Enabled = .F.) los objetos cuando sea necesario. Esto proporciona indicacin visual al usuario de que el
objeto no puede ser modificado en ese momento.
Mensajes
1. No utilice WAIT WINDOW para mostrar mensajes importantes al usuario. Es muy fcil que el usuario no note elmensaje. En su lugar utilice MESSAGEBOX. Incluya siempre el icono apropiado en el cuadro de mensaje (messagebox). Evite la utilizacin del parmetro TIMEOUT, ya que el usuario puede perder informacin importante.
2. Utilice la barra de estado para mostrar ayuda en lnea para el objeto actual, ya sea en un formulario o un men.
Objetos de formulario
1. Text box. (cuadros de texto) El cuadro de texto es el control ms comnmente utilizado. Puede contener valores decaracteres, numricos o fecha.
2. Check box. (casilla de verificacin) La casilla de verificacin es un control sencillo que est establecido en ON u OFF.Son utilizadas tpicamente para indicar un estado de S o No.
3. Command button. (Botn de comando) El botn de comandos es utilizado para iniciar una accin. Los botones mscomnmente utilizados son OK (Aceptar) y Cancel (Cancelar). Algunas veces los botones de comandos sonagrupados en los command group (grupos de comandos). Intente evitar los grupos de comandos, los botonesindividuales son ms fciles de mantener.
4. Option button. (Botn de opcin) En ocasiones se les llama radio button. Se utiliza para indicar que el usuario puedeseleccionar una opcin de un grupo de opciones. Los botones de opciones son frecuentemente agrupados en Optiongroup (grupo de opciones). Esto simplifica el cdigo para el proceso de seleccin. Se recomienda que los grupos deopciones se utilicen en lugar de los botones de opciones. Los grupos de opciones deben ser preferiblementeordenados verticalmente antes que horizontalmente.
5. Drop-down list. (Lista desplegable) Una lista desplegable permite al usuario hacer una seleccin de una lista de variosobjetos, como con un botn de opcin. Sin embargo, la lista desplegable requiere de menos espacio en pantalla.
6. Combo box. (Cuadro combinado) Los cuadros combinados se identifican como un textbox en una flecha hacia abajo.
Se llama cuadro combinado, porque es una combinacin de un cuadro de texto y una lista desplegable. El usuariopuede escribir un nuevo valor o seleccionarlo de la lista.7. List box. (Cuadro de lista) Un cuadro de lista puede ser utilizado uno o varios objetos de una lista.8. Spinner. Un control spinner es una es