introducción a visual fox pro

60
Introducción a Visual Fox Pro Capítulo 1. Funciones de Búsqueda y Remplazo. Consultas de Selección (SELECT) Las consultas de selección se utilizan para indicar al motor de datos que devuelva información de las bases de datos, esta información es devuelta en forma de conjunto de registros que se pueden almacenar en un objeto recordset. Este conjunto de registros es modificable. Consultas Básicas. La sintaxis básica de una consulta de selección es la siguiente: SELECT CAMPOS FROM 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, TELEFONO FROM CLIENTES; Esta consulta devuelve un recordset con el campo nombre y teléfono de la tabla clientes. En Introduciendo SQL en Access podemos observar cómo se introducen consultas directamente en una base de datos 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 claúsula ORDER BY Lista de Campos. En donde Lista de campos representa los campos a ordenar. Ejemplo: SELECT CODIGOPOSTAL, NOMBRE, TELEFONO FROM CLIENTES  ORDER 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 mas de un campo, como por ejemplo: SELECT CODIGOPOSTAL, NOMBRE, TELEFONO FROM CLIENTES  ORDER BY CODIGOPOSTAL, NOMBRE; Incluso se puede especificar el orden de los registros: ascendente mediante la claúsula (ASC -se toma este valor por defecto) ó descendente (DESC) SELECT CODIGOPOSTAL, NOMBRE, TELEFONO FROM CLIENTES ORDER BY CODIGOPOSTAL DESC , NOMBRE ASC; Consultas con Predicado (ALL, TOP, DISTINCT) El predicado se incluye entre la cláusula y el primer nombre del campo a recuperar, los posibles predicado s son: Comando Descripción

Upload: bodrobodro

Post on 16-Oct-2015

307 views

Category:

Documents


1 download

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