BASE DE DATOS(Banco de Datos)
|
||||
Win |
y Objetos |
y Procedimiento |
S Q L |
Modelos de bases de datos:
1) Bases de datos jerárquicas:
Organizadas como un árbol invertido, en donde un nodo padre de información(raíz) puede tener varios hijos
(un hijo solo puede tener un padre) y los nodos sin hijos, son las hojas.
2) Base de datos de red:
Cada nodo permite tener varios padres
3) Bases de datos transaccionales:
Usados para el envío y recepción de datos a grandes velocidades (Ej. transacción de dinero entre cuentas bancarias).
4) Bases de datos relacionales:
Usa "relaciones", en forma lógica como conjuntos de datos llamados "tuplas".
Cada relación es una tabla compuesta por registros (filas de la tabla), que son tuplas, y campos (columnas la tabla).
SQL(Structured Query Language) se usa para consultas a bases de datos relacionales.
5) Bases de datos orientadas a objetos:
Incorpora las propiedades del paradigma de objetos:
5.1.- Encapsulación - Permite ocultar la información al resto de los objetos, impidiendo así accesos incorrectos o conflictos.
5.2.- Herencia - Los objetos heredan comportamiento dentro de una jerarquía de clases.
5.3.- Polimorfismo - Operación mediante la cual puede ser aplicada a distintos tipos de objetos.
Fox que pertenece a este ámbito, se usa para construir sistemas de administración de bases de datos. Superó a los añejos lenguajes
Fortran, Basic, Pascal, Cobol, Clipper, Fox, C++ y otros que ya son solo historia del viejo milenio.!!.
En este enfoque, están Visual Fox Pro, Visual C++, C++Builder, Visual Basic, Delphi, Visual J++ y otros.
6) Bases de datos deductivas (o lógicas):
Permite hacer deducciones a través de inferencias basadas en lógica matemática, con reglas y hechos almacenados en la base de datos.
F O X: Clases y Objetos | ||||
---|---|---|---|---|
Clases y Objetos |
Funcion y Procedimiento |
Mantenimiento | S Q L | Fox Pro Win |
Conceptualmente cada objeto es la materialización de una clase, por lo tanto es un ente tangible y operable, como puedes apreciar en este ejemplo, tiene un formato de una botonera de comandos, espesífico de acuerdo a la tarea para el que fue creado.
Este objeto tiene determinadas propiedades o atributos que lo caracterizan y lo diferencia de los demás. Así, esta botonera tiene una forma, color y un tamaño propio; además cuando se lo usa, tiene una determinada ubicación sobre otro ojeto contenedor.
Mediante un mensaje adecuado, denominado evento, cada objeto es requerido para realizar un servicio, que será concretado sin que el usuario se entere cómo fué efectuado. Una vez creados los objetos adecuados y definidos los eventos convenientes, un programa es la coordinación secuencial donde los objetos pueden ser llamados.
En cambio, la clase es un ente intangible que registra la información sobre las especificaciones de apariencia y comportamiento de un objeto. La clase es algo similar al plano del objeto. En cambio el objeto es la corporización de la clase.
Por ello, en la práctica de la programación, tanto las clases como los objetos son bloques funcionales de aplicaciones, los cuales a pesar de estar muy vinculados, tienen distintos conceptos.
Un ejemplo, para aclarar estos conceptos, es decir que la clase es el plano de conexiones eléctricas internas del teclados, mientras que el objeto, que es una instancia de esa clase y es el propio teclado.
La codificación para generar una clase dentro de este entorno posee la siguiente estructura sintáctica:
DEFINE CLASS nombreClaseDefinida ADD OBJECT nombreObjeto AS nombreClase WITH Propiedades PROCEDURE / FUNCTION Instrucciones . . . . . ENDPROC / RETURN ENDDEFINE
Es de vital importancia que captes y retengas esta estructura sintáctica y a partir de ella los siguientes conceptos:
Para conceptualizarlo diremos que, cuando se conecta un teclado a una PC, si no se trata de un técnico
capacitado en el tema, generalmente a nadie le interesa el funcionamiento de los circuitos eléctricos
y de sus conexiones internas dentro del aparato.
Todos estos elementos, por suerte, quedan ocultos; pues el usuario solo desea conocer el procedimiento necesario para lograr la comunicación del teclado con la computadora.
Tal ventaja que permite ignorar todos los detalles internos del objeto y que ovbiamente, posibilita al operador únicamente a concentrarse en los aspectos de utilización, es la ABSTRACCION.
El encapsulamiento, que consiste en empaquetar el código de los métodos, las propiedades y sus valores en un mismo objeto, contribuyen a tal abstracción.
Gracias a esta propiedad, el programador cuando efectúa mantenimiento o
actualización de sus algoritmos y debe realizar un cambio en una clase, este afecta a todas las
subclases basadas en ella.
Por la misma razón, si detecta un error en una clase, solo se efectúa la corrección en ella y por lo tanto, ya no es necesario cambiar el código de todas las subclases correspondientes.
Esta actualización simple y automática ahorra tiempo y trabajo y por lo tanto $$$$.
Es la clase generada a partir de otra clase base de la cual hereda una serie de
características primarias.
La subclase, además de la funcionalidad y controles adicionales propios, podrá tener toda la funcionalidad de una clase base existente.
De este modo, la creación de subclases reduce la cantidad de código a escribir, por que gracias a herencia muchas características no deben volver a definirse.
Las alternativas que tienes para definir el formato físico (Color, tamaño, ubicación, etc) que
tendrán tus objetos, son:
Primario.Objeto.Propiedad = Valor
Ejemplo:
WITH MiFormulario.MiGrilla.Colum1 Width = 69 BackColor=RGB(255,255,255) ENDWITH
Con este fin, diremos que los objetos que son creados bajo entorno de un lenguaje Visual, también tienen propiedades que están determinadas por la clase en la que se basan tales objetos y que pueden establecerse durante el tiempo de diseño o en tiempo de ejecución.
Ejemplo, algunas de estas propiedades que puede tener los objetos son:
Caption (Etiqueta del objeto) Visible (Muestra u Oculta el objeto) Enabled (Habilita el objeto) Left (Absisa del Objeto Top (Ordenada del objeto) ForeColor(Color del texto) Value (Valor del Objeto) . . . y muchos otros..!!!
Recuerda que los métodos registran en código de instrucciones la tarea que debe cumplir el objeto, pero
este no actua solo, requiere que lo invoques.
Para llamar a un método de un objeto desde cualquier parte de una aplicación, debe utilizarse la sintaxis
Primario .Objeto . Metodo
Para que el objeto haga lo que tu dispongas es preciso que lo convoques y para esto tienes dos alternativas
Ejemplo: ConjuntoForm.Form1.BotonComando1
Case.This.Value=1
Sobre un objeto, si es del tipo contenedor o formulario, puedes "pegar" todos los objetos que te hagan falta para procesar tu sistema.
Para esto, puedes usar las siguientes alternativas:
Ejemplo:
DEFINE CLASS ClaseCreada As ClaseBase Add Object ObjetoAdicionado1 As ObjetoBase1 With Propiedades Add Object ObjetoAdicionado2 As ObjetoBase2 With Propiedades Add Object ObjetoAdicionado3 As ObjetoBase3 With Propiedades ........... END Define
Como ya habrás sospechado los objetos son adicionados en tiempo de diseño del objeto contenedor.
PROCEDURE NombreProcedimiento This.AddObject(ObjetoAdicionado1, ObjetoBase1) This.AddObject(ObjetoAdicionado2, ObjetoBase2) This.AddObject(ObjetoAdicionado3, ObjetoBase3) ............... ENDProc
En esta segunda opción los objetos se pegan en tiempo de ejecución, cuando el procedimiento sea convocado.
Las acciones del usuario que producen eventos son:
También hay eventos iniciados por el sistema, por ejemplo cuando se crea un objeto y luego se ejecuta una línea de código que produce un error.
En el siguiente ejemplo puedes ver en acción a los eventos Click y MoveMouse
********************************************* * ACTIVAR MENU DE ABM ********************************************* PROCEDURE Modificar.Click DO ActivarPantallaPrincipal ThisForm.Caption = 'BASE DE DATOS: SELECCIONA UNA OPCION' ThisForm.VerSuerte.Visible=.F. ThisForm.LogoUTN.Visible=.F. This.Visible=.F. ThisForm.MenuPrincipal.Visible=.T. ENDPROC ********************************************* * VISUALIZAR CONTAINER DE INGRESO DE FECHA ********************************************* PROCEDURE VerSuerte.MouseMove PARAMETER a, b, c, d, e DO ActivarPantallaPrincipal ThisForm.Caption = 'INGRESA EL DIA QUE NACISTE, luego ENTER' ThisForm.Modificar.Visible=.F. ThisForm.LogoUTN.Visible=.F. This.Visible=.F. ThisForm.LeeFecha.Visible=.T. ENDPROC
Los métodos son instrucciones o procedimientos codificados por el programador y que están asociados a un objeto. Serian algo parecido al código fuente tradicional.
Los métodos se diferencian de los procedimientos estándar del lenguaje, porque están vinculados intrínsecamente a un objeto y además se les asigna nombres distintos que los procedimientos normales.
En este mundo todo lo bueno, o es pecado, o engorda, o preña....!!
Los métodos también pueden existir independientemente de los eventos, en tal caso, se debe llamar a tales métodos de forma explícita en el código. El conjunto de eventos es limitado pero amplio y aunque no se pueden crear nuevos eventos, el conjunto de métodos puede ampliarse indefinidamente. Tanto las propiedades, como los eventos y los métodos de todo objeto se deben especificar durante la definición de las clases.
Los métodos adoptan la forma de bloques operativos o subprogramas denominados procedimientos o funciones que tienen múltiples aplicación, con similar criterio que los paradigmas procedurales y por ello, pueden operar con parámetros o prescindir de ellos, como puede apreciarse en el siguiente ejemplo.
PROCEDURE DatosAFicha MenuCambios.Caption = 'Corrige esta ficha Nº '+Str(Recno()) MenuCambios.Hojas.ActivePage = 2 MenuCambios.Hojas.Page2.TexBoxLegajo.Value =Taller.Legajo MenuCambios.Hojas.Page2.TexBoxNombre.Value =Taller.Nombre MenuCambios.Hojas.Page2.TexBoxComision.Value=Taller.Comision MenuCambios.Hojas.Page2.TexBoxFecha.Value =Taller.Fecha MenuCambios.Hojas.Page2.TexBoxParcial.Value =Taller.Parcial MenuCambios.Hojas.Page2.TexBoxRecupera.Value=Taller.Recupera RETURN
Ademas del uso de los procedimientos y funciones insertas en los métodos de las clases; también los métodos pueden operar, usando estructuras propias, predefinidas por el propio lenguaje de codificación.
F O X: Función y Procedimiento | ||||
---|---|---|---|---|
Clases y Objetos | Funcion y Procedimiento | Mantenimiento | S Q L | Fox Pro Win 2.6 |
Las funciones son métodos o subprogramas, que actuan como bloques operativos independientes, que se deben usar cuando determinado comportamiento de un objeto va a repetirse varias veces,
Cada vez que la función sea convocada en un método, generará como resultado un nuevo dato, por ello se dice que las funciones devuelven valores..!!
Para su cometido, las funciones pueden requerir o no de parámetros, los cuales son valores que reciben desde el exterior a su estructura, como se aprecia en el siguiente ejemplo, cuya estructura sintáctica conviene que retengas.
Siguiendo el mismo criterio de la programación tradicional donde las funciones son
subprogramas que al activarlas devuelven un valor o una acción; también en el entorno
visual las funciones tienen la misma valiosa aplicación, para ello el criterio es
prácticamente el mismo, ademas ellas, pueden operar con parámetros o prescindir de ellos
Un ejemplo típico es la siguiente función de búsqueda:
FUNCTION EstaGrabado PARAMETER LegajoLeido YaEsta = .F. GO Top LOCATE FOR Taller.Legajo = AllTrim(LegajoLeido) IF Found() =MessageBox('Ya fué grabada esta ficha',0+64,legajo+' '+nombre) YaEsta = .T. MenuCambios.Hojas.Page1.BotonGuardar.Enabled = .F. ENDIF RETURN YaEsta
Los procedimientos en la programación orientada a objetos se estructura con la misma filosofía que el de la programación procedural. Actuan de modo similar a las funciones, solo que no necesariamente devuelven un valor.
Conceptualmente representan subprogramas que pueden estar constituidas por todos los elementos del mismo programa, que funcionan internamente en forma independiente y que pueden recibir información desde el exterior, pero que también pueden trabajar sin ellos.
PROCEDURE BotonBuscar.Click Set Near On Set Exact Off Buscado = Upper(AllTrim(ThisForm.ModNombre.Value)) GO Top LOCATE FOR Upper(Telf.Nombre) = Buscado IF Found() ThisForm.ModNombre.Visible = .F. ThisForm.ModDireccion.Visible = .F. ThisForm.ModTelefono.Visible = .F. ThisForm.BoxNombre.Visible = .T. ThisForm.BoxDireccion.Visible = .T. ThisForm.BoxTelefono.Visible = .T. ThisForm.CancelaBuscar.Visible = .F. This.Visible = .F. ThisForm.BotonBajas.Visible = .T. ThisForm.BotonAltas.Visible = .T. ThisForm.Modificacion.Visible = .T. Formulario.Refresh ELSE =MessageBox('No esta registrado',0+64,Buscado) ENDIF Set Exact On ENDPROC
TU PRIMERA VEZ..!!
Para ver toda esta teoría en acción, te recomiendo seguir los siguientes pasos:
Copia textualmente el siguiente código:
***************************** * WILO CARPIO CACERES * Visual Fox 7 Español * 26/08/98 * FUENTE: MiDebut.PRG ***************************** Formulario = CREATEOBJECT('FormularioWilo') Formulario.SHOW READ EVENTS ***************************************** * CREACION de la CLASE PRINCIPAL ***************************************** DEFINE CLASS FormularioWilo AS Form Caption ='AGENDA 2003 de WILO '+ Dtoc(date()) ShowTips = .T. Top = 10 Left = 10 Height = 300 Width = 500 FontBold = .T. ControlBox = .T. Closable = .F. minButton = .T. maxButton = .T. BorderStyle= 3 BackStyle = 1 Picture = 'Rayado.bmp' ********************************************** * OBJETOS DE LA PAGINA PRINCIPAL ********************************************** ADD OBJECT VerAutor AS ContainerAutor ADD OBJECT Volar AS Image WITH Top=250, Left=450,Picture = 'Llave.bmp', ToolTipText='Salir de este programa..!' ********************************************** * METODOS DE LA PAGINA PRINCIPAL ********************************************** PROCEDURE Volar.Click Mensaje=Messagebox('Confirma tu Opción',4+32+256,'DESEAS CERRAR ESTE PROGRAMA') IF Mensaje=6 Clear Events ENDIF ENDPROC ENDDEFINE ********************************************** * CREACION DE LA CLASE DEL AUTOR ********************************************** DEFINE CLASS ContainerAutor AS Container ToolTipText='El Autor' TOP = 10 LEFT = 100 WIDTH = 340 HEIGHT = 280 Picture= 'mitapiz.bmp' VISIBLE=.F. BorderStyle = 2 BackColor = 32768 ADD OBJECT Foto AS Image WITH TOP=10, Left=10, Picture = 'Pavaroti.jpg',ToolTipText='Londres Marzo 1998', Visible=.T. ADD OBJECT Salir AS Image WITH TOP=240, Left=130,Picture = 'Volar.bmp', ToolTipText='Cerrar esto',BackStyle=0 ENDDEFINE
OOHHH...!!! aparecerá el resultado..!!
Todo sistema requiere de una clase contenedora primaria, que definirá las características del objeto base, sobre el que luego se alojaran todos los demás objetos de tu sistema.
Con ese fin, te propongo la siguiente clase con sus correspondientes propiedades y objetos, los cuales puedes modificar en función de tus propias necesidades.
Por razones de simplificar este modelo solo utilizo una clase base, pero si deseas usar nuevos formularios, recuerda que el tratamiento es similar a este ejemplo.
***************************************** * CREACION de la CLASE PRINCIPAL ***************************************** DEFINE CLASS FormularioWilo AS Form Caption ='AGENDA 2003 de WILO '+ Dtoc(date()) ShowTips = .T. Top = 10 Left = 10 Height = 300 Width = 500 FontBold = .T. ControlBox = .T. Closable = .F. minButton = .T. maxButton = .T. BorderStyle= 3 BackStyle = 1 Picture = 'Rayado.bmp' ********************************************** * OBJETOS DE LA PAGINA PRINCIPAL ********************************************** ADD OBJECT VerAutor AS ContainerAutor ADD OBJECT Volar AS Image WITH Top=250, Left=450,Picture = 'Llave.bmp', ToolTipText='Salir de este programa..!' ********************************************** * METODOS DE LA PAGINA PRINCIPAL ********************************************** PROCEDURE Volar.Click Mensaje=Messagebox('Confirma tu Opción',4+32+256,'DESEAS CERRAR ESTE PROGRAMA') IF Mensaje=6 Clear Events ENDIF ENDPROC ENDDEFINE
En Visual Fox Pro, los eventos se codifican de manera similar a los demás entornos visuales orientados a objeto, tales como Delphi, Builder, Visual Basic, etc. La sintaxis es simple y se ajusta al órden
Cada objeto reconoce y responde a acciones llamadas eventos, estos son actividades específicas, predeterminadas y que pueden ser iniciadas por el usuario, como ocurre en la mayor parte de los casos, pero también pueden ser desencadenadas por el propio sistema.
********************************************** * METODOS DE LA PAGINA PRINCIPAL ********************************************** PROCEDURE Volar.CLICK Mensaje=Messagebox('Confirma tu Opción',4+32+256,'DESEAS CERRAR ESTE PROGRAMA') IF Mensaje=6 Clear Events ENDIF ENDPROC ENDDEFINE
Cada clase define el formato físico del objeto, en nuestro caso:
Caption ='AGENDA 2003 de WILO '+ Dtoc(date()) ShowTips = .T. Top = 10 Left = 10 Height = 300 Width = 500 FontBold = .T. ControlBox = .T. Closable = .F. minButton = .T. maxButton = .T. BorderStyle= 3 BackStyle = 1 Picture = 'Rayado.bmp'
ToolTipText='El Autor' TOP = 10 LEFT = 100 WIDTH = 340 HEIGHT = 280 Picture= 'mitapiz.bmp' VISIBLE=.F. BorderStyle = 2 BackColor = 32768
Esta propuesta está codificado en Visual Fox Pro, desde la versión 5 en adelante, maneja una base de datos, que deberás crear, en función de los campos, que seguramente puedes deducir de este documento, que especifica la visualización de los respectivos campos.
Si es tu primera vez.!!..te felicito..!!, por que ingresarás al exclusivo mundo de los programadores en el entorno visual orientado a objetos..!!..Ya verás..que es mucho más simple que la vieja filosofía de la programación procedural...
Ah..!! la calidad de tus productos informáticos serán muy superiores en los aspectos de estética, amigabilidad, seguridad, credibilidad y... todas esos aspectos que debes aplicar en tus diseños personales..!!
Lee el procedimiento LOAD y deduce el nombre y la estructura de la tabla usada
*************************************************** * WILO CARPIO CACERES 16/09/2003 * Visual Fox 7 Español Modelo2003.prg * PROGRAMA AGENDA: Formulario único *************************************************** Close Data Clear All Set Date To French Set Point To '.' Set Optimize On Public DatoDelCombo, Elegido Formulario = CREATEOBJECT('FormularioWilo') Formulario.SHOW READ EVENTS DEFINE CLASS FormularioWilo AS Form Caption ='AGENDA 2003 de WILO '+ Dtoc(date()) ShowTips = .T. Top = 10 Left = 10 Height = 300 Width = 500 FontBold = .T. ControlBox = .T. Closable = .F. minButton = .T. maxButton = .T. BorderStyle= 3 BackStyle = 1 Picture = 'Rayado.bmp' ********************************************** * OBJETOS DE LA PAGINA PRINCIPAL ********************************************** ADD OBJECT PanelBoxesDatos AS DatosContainer ADD OBJECT PanelGrilla AS GrillaContainer ADD OBJECT MenuPrincipal AS BotonesContainer ADD OBJECT MenuConsulta AS VerDatosContainer ADD OBJECT PanelBuscar AS BuscarContainer ADD OBJECT PanelAutor AS AutorContainer ADD OBJECT PanelFrame AS FrameContainer ADD OBJECT LogoUTN AS Image WITH Top=90, Left=150,Picture = 'BebeWilo.gif', ToolTipText='Autor',BackStyle=0 ********************************************** * METODOS DEL FORMULARIO PRINCIPAL ********************************************** PROCEDURE Load SET DELETE ON USE Agenda.dbf ALIAS Telf IN 1 GO Top ENDPROC PROCEDURE LogoUTN.MouseMove PARAMETER a, b, c, d, e This.TOP = 10 This.LEFT = 450 This.Picture = 'Wilin.bmp' ENDPROC PROCEDURE LogoUTN.Click ThisForm.MenuPrincipal.Visible=.F. ThisForm.PanelAutor.Visible=.T. ENDPROC ENDDEFINE ******************************** * FIN DEL FORMULARIO PRINCIPAL ********************************
************************************************************************* * CLASES EXTERNAS AL FORMULARIO PRINCIPAL * MENU PRINCIPAL ******************************** DEFINE CLASS BotonesContainer AS MiContainer TOP = 5 LEFT = 10 WIDTH = 365 HEIGHT = 70 VISIBLE=.T. ADD OBJECT Consultas AS UnBoton ADD OBJECT Altas AS UnBoton WITH Left=77, Caption = '\< Altas', Picture='ABM.bmp', ToolTipText=' Grabar nuevos datos ' ADD OBJECT Modificar AS UnBoton WITH Left=147,Caption = '\< Cambios',Picture='Modificar.ico',ToolTipText=' Modificar registros ' ADD OBJECT Bajas AS UnBoton WITH Left=217,Caption = '\< Bajas', Picture='Borrar.ico', ToolTipText=' Eliminar registros ' ADD OBJECT Cerrar AS UnBoton WITH Left=287,Caption = '\< Salir', Picture='Llave.bmp', ToolTipText=' Cierra este programa ' PROCEDURE Consultas.Click Formulario.Caption = 'Elige una opción de consulta' Formulario.MenuPrincipal.Visible = .F. Formulario.MenuConsulta.Visible = .T. ENDPROC PROCEDURE Altas.Click Formulario.Caption = 'DIGITA LOS NUEVOS DATOS, luego graba' Formulario.MenuPrincipal.Visible = .F. DO LimpiarBoxes DO OcultarAutor Formulario.PanelBoxesDatos.Grabar.Visible = .F. Formulario.PanelBoxesDatos.Limpiar.Visible = .T. Formulario.PanelBoxesDatos.Visible = .T. ENDPROC PROCEDURE Modificar.Click Formulario.Caption ='SELECCIONA LA FICHA A CAMBIAR, Luego pulsa Aceptar' Formulario.PanelBoxesDatos.Grabar.Visible = .T. Formulario.PanelBoxesDatos.Limpiar.Visible = .T. Formulario.MenuPrincipal.Visible = .F. Formulario.PanelBuscar.MiCombo.Visible = .T. Formulario.PanelBuscar.Ordenar.Visible = .T. Formulario.PanelBuscar. Visible = .T. DO OcultarAutor ENDPROC PROCEDURE Bajas.Click Formulario.Caption ='ELIGE LA FICHA A BORRAR, Luego pulsa Aceptar' Formulario.MenuPrincipal.Visible = .F. Formulario.PanelBuscar.MiCombo.Visible = .T. Formulario.PanelBuscar. Visible = .T. DO OcultarAutor ENDPROC PROCEDURE Cerrar.Click Mensaje=Messagebox('Confirma tu Opción',4+32+256,'DESEAS CERRAR ESTE PROGRAMA') IF Mensaje=6 Clear Events ENDIF ENDPROC ENDDEFINE ************************************************ * CLASE CONTAINER DE CONSULTA ************************************************ DEFINE CLASS VerDatosContainer AS BotonesContainer WIDTH = 365 Visible = .F. ADD OBJECT PanelGrilla AS UnBoton WITH Left=7, Caption = '\ < Grilla', Picture='Grilla.ico', ToolTipText=' Grabar nuevos datos ' ADD OBJECT Buscar AS UnBoton WITH Left=77, Caption = '\ < Combo', Picture='Combo.ico', ToolTipText=' Modificar registros ' ADD OBJECT UnaFicha AS UnBoton WITH Left=147,Caption = '\ < UnaFicha', Picture='Ficha.ico', ToolTipText=' Eliminar registros ' ADD OBJECT CerrarEsto AS UnBoton WITH Left=217,Caption = '\ < Volver', Picture='Salir.ico', ToolTipText=' Cierra este programa ' PROCEDURE PanelGrilla.Click Formulario.Caption = 'GRILLA: de '+STR(RECCOUNT())+' FICHAS GRABADAS' Formulario.PanelBuscar.Ordenar.Visible = .F. Formulario.MenuConsulta.Visible=.F. Formulario.PanelGrilla.Refresh Formulario.PanelGrilla.Visible=.T. DO OcultarAutor ENDPROC PROCEDURE Buscar.Click Formulario.Caption ='SELECCIONA EL DATO A BUSCAR, luego presiona Aceptar' Formulario.MenuConsulta.Visible = .F. Formulario.PanelBuscar.MiCombo.Requery Formulario.PanelBuscar.MiCombo.Refresh Formulario.PanelBuscar.MiCombo.Visible = .T. Formulario.PanelBuscar.BoxDato.Visible = .F. Formulario.PanelBuscar. Visible = .T. DO OcultarAutor ENDPROC PROCEDURE UnaFicha.Click Formulario.Caption ='DIGITA EL DATO A BUSCAR, luego presiona ENTER' Formulario.MenuConsulta.Visible = .F. Formulario.PanelBuscar.MiCombo.Visible = .F. Formulario.PanelBuscar.BoxDato.Visible = .T. Formulario.PanelBuscar.BoxDato.SetFocus Formulario.PanelBuscar. Visible = .T. DO OcultarAutor ENDPROC PROCEDURE CerrarEsto.Click Formulario.MenuConsulta.Visible= .F. DO ActivarPantallaPrincipal ENDPROC ENDDEFINE DEFINE CLASS UnBoton AS CommandButton TOP = 7 Left = 7 Width = 70 Height= 55 FontBold=.T. Caption = '\< Consultas' Picture='Ver.ico' Visible = .T. ToolTipText='Ver datos grabados ' ENDDEFINE DEFINE CLASS BotonAceptar AS UnBoton TOP = 70 Left= 427 Width = 50 Caption = '\< Acepto' Picture='OK.bmp' Visible = .F. ToolTipText='Aceptar la Operación' ENDDEFINE DEFINE CLASS MiContainer AS Container TOP = 10 LEFT = 10 WIDTH = 485 HEIGHT = 250 Picture= 'mitapiz.bmp' VISIBLE=.F. ADD OBJECT Salir AS UnBoton WITH Caption='\< Cerrar',TOP=10,Left=427,Width=50,Picture='Llave.bmp', ToolTipText='Cerrar esto', BackStyle=0 PROCEDURE Salir.Click DO ActivarPantallaPrincipal Formulario.PanelFrame.Visible = .F. Formulario.PanelBoxesDatos.Visible = .F. ENDPROC ENDDEFINE DEFINE CLASS GrillaContainer AS MiContainer ADD OBJECT MiGrilla AS Grid WITH TOP=10, Left=10, Width=410,Height=230,ReadOnly=.T.,FontBold=.T. ENDDEFINE DEFINE CLASS AutorContainer AS MiContainer ADD OBJECT Foto AS Image WITH TOP=15, Left=20, Picture = 'Pavaroti.jpg',ToolTipText='Londres Marzo 1998', Visible=.T. ENDDEFINE DEFINE CLASS DatosContainer AS MiContainer ADD OBJECT RotNombre AS Label WITH TOP=15, LEFT=10,Autosize=.T.,HEIGHT=10, FONTBOLD = .T.,Caption=' Nombre' ADD OBJECT RotDirecc AS Label WITH TOP=60, LEFT=10,Autosize=.T.,HEIGHT=10, FONTBOLD = .T.,Caption='Domicilio' ADD OBJECT RotTelefo AS Label WITH TOP=105,LEFT=10,Autosize=.T.,HEIGHT=10, FONTBOLD = .T.,Caption=' Teléfono' ADD OBJECT BoxNombre AS TextBox WITH TOP=15, LEFT=80, WIDTH=230,HEIGHT=23,ReadOnly=.F., ToolTipText='Nombre y Apellido' ADD OBJECT BoxDirecc AS TextBox WITH TOP=60, LEFT=80, WIDTH=230,HEIGHT=23,ReadOnly=.F., ToolTipText='Direccion del Mono' ADD OBJECT BoxTelefo AS TextBox WITH TOP=105,LEFT=80, WIDTH=130,HEIGHT=23,ReadOnly=.F., ToolTipText='Teléfono del Mono' ADD OBJECT Limpiar AS UnBoton WITH Caption='\< Limpiar',TOP=70, Left=427,Width=50,Picture='Borrar.ico',ToolTipText='Limpia los datos',BackStyle=0 ADD OBJECT Grabar AS UnBoton WITH Caption='\< Grabar', TOP=130,Left=427,Width=50,Picture='Grabar.bmp',ToolTipText='Graba estos datos' PROCEDURE Limpiar.Click Formulario.Caption = 'DIGITA LOS NUEVOS DATOS, luego graba' DO LimpiarBoxes ENDPROC PROCEDURE BoxNombre.LostFocus PARAMETER a, b, c, d, e IF NOT(Formulario.PanelBoxesDatos.BoxNombre.Value=' ') Formulario.PanelBoxesDatos.Grabar.Visible = .T. ENDIF ENDPROC PROCEDURE Grabar.Click Mensaje=Messagebox('Estas seguro ?',4+32+256,'Deseas Grabar la FICHA NUEVA') IF Mensaje=6 IF Formulario.Caption = 'DIGITA LOS NUEVOS DATOS, luego graba' DO GrabarLaNuevaFicha ENDIF IF Formulario.Caption = 'DIGITA LOS CAMBIOS, Luego pulsa -> Grabar' DO GrabarLosCambios Formulario.PanelBoxesDatos.Visible=.F. Formulario.MenuPrincipal.Visible=.T. Formulario.MenuPrincipal.Consultas.SetFocus ENDIF DO IndexarTabla Formulario.PanelBoxesDatos.Grabar.Visible = .F. DO LimpiarBoxes ENDIF ENDPROC ENDDEFINE DEFINE CLASS BuscarContainer AS MiContainer ADD OBJECT MiCombo AS ComboNombre ADD OBJECT BoxDato AS TextBox WITH TOP=10, Left=10, Width=190,Height=25,Visible = .F.,FontBold=.T. ADD OBJECT Ordenar AS CheckBox WITH TOP=70, Left=10, Visible = .F.,Caption = '\< Mantenimiento' ADD OBJECT Aceptar AS BotonAceptar PROCEDURE MiCombo.InteractiveChange Formulario.PanelBuscar.Aceptar.Visible=.T. ENDPROC PROCEDURE BoxDato.LostFocus Formulario.PanelBuscar.Aceptar.Visible=.T. ENDPROC PROCEDURE Ordenar.Click Formulario.Caption ='MANTENIMIENTO DE LA BASE DE DATOS' Formulario.PanelBuscar. Visible = .F. Formulario.PanelBuscar.Ordenar.Value = .F. Formulario.PanelFrame. Visible = .T. DO OcultarAutor ENDPROC PROCEDURE Aceptar.Click Formulario.PanelBuscar.Visible = .F. DO CASE CASE Formulario.Caption = 'SELECCIONA EL DATO A BUSCAR, luego presiona Aceptar' GO UbicaFicha() Formulario.MenuConsulta.Visible = .F. Formulario.PanelBoxesDatos.Grabar.Visible = .F. Formulario.PanelBoxesDatos.Limpiar.Visible = .F. DO MostrarLosDatos CASE Formulario.Caption = 'DIGITA EL DATO A BUSCAR, luego presiona ENTER' Set Near On Set Exact Off DatoBuscado = Upper(AllTrim(Formulario.PanelBuscar.BoxDato.Value)) GO Top LOCATE FOR Upper(Telf.Nombre) = DatoBuscado IF Found() DO MostrarBrowser ELSE =MessageBox('No esta registrado',0+64,DatoBuscado) ENDIF Set Exact On DO ActivarPantallaPrincipal CASE Formulario.Caption = 'SELECCIONA LA FICHA A CAMBIAR, Luego pulsa Aceptar' GO UbicaFicha() Mensaje=Messagebox(nombre+' Dirección: '+Direccion,4+32+256,'DESEAS CAMBIAR LA FICHA') IF Mensaje=6 Formulario.Caption = 'DIGITA LOS CAMBIOS, Luego pulsa -> Grabar' DO MostrarLosDatos Formulario.PanelBoxesDatos.BoxNombre.SetFocus ELSE DO ActivarPantallaPrincipal ENDIF CASE Formulario.Caption ='ELIGE LA FICHA A BORRAR, Luego pulsa Aceptar' GO UbicaFicha() Mensaje=Messagebox(nombre+' Dirección: '+Direccion,4+32+256,'DESEAS BORRAR LA FICHA DE') IF Mensaje=6 dele DO ActivarPantallaPrincipal Formulario.PanelBuscar.MiCombo.Requery Formulario.PanelBuscar.MiCombo.Refresh ELSE DO ActivarPantallaPrincipal ENDIF Formulario.PanelBuscar.MiCombo.Value=1 ENDCASE ENDPROC ENDDEFINE DEFINE CLASS ComboNombre AS ComboBox ToolTipText = 'Abre esta lista y elige un Nombre' Left = 300 Top=10 Left=10 Width=190 Visible=.T. TabIndex = 1 RowSourceType = 3 RowSource="SELECT Nombre FROM Agenda ORDER BY Agenda.Nombre INTO CURSOR Dato" PROCEDURE Init This.Value = 1 && Valor seleccionado es 1º de la lista. This.Refresh ENDPROC ENDDEFINE
F O X: Mantenimiento | ||||
---|---|---|---|---|
Clases y Objetos | Funcion y Procedimiento | Mantenimiento | S Q L | Fox Pro Win 2.6 |
*************************************************************** * OBJETOS PARA MANTENIMIENTO DE LAS BASES DE DATOS * INDEXACIÓN, ORDENAMIENTO y BACKUP *************************************************************** ************************************** * CLASE TIPO FRAME O PAGINAS ************************************** DEFINE CLASS FrameContainer AS MiContainer ADD OBJECT Folios AS MiFrame WITH TOP=10, LEFT=10 ENDDEFINE DEFINE CLASS MiFrame AS PageFrame PageCount=3 Page1.Caption='Indexar' Page2.Caption='Ordenar' Page3.Caption='Backup' Width=320 Height=230 Visible=.T. PROCEDURE Init This.Page1.ADDOBJECT('OpcionIndexar','Opciones') This.Page1.OpcionIndexar.Buttons(1).Caption='\Agenda.CDX',0+64,'TABLA INDEXADA Tipo CDX') ELSE *************************************** * IDX: Genera InIDXNom.IDX *************************************** DO IndexarTabla =MessageBox('Se generó-> InIDXNom.IDX',0+64,'TABLA INDEXADA Tipo IDX') ENDIF ENDIF ENDPROC ENDDEFINE ************************************** * ORDENAMIENTO DE UNA TABLA ************************************** DEFINE CLASS AceptarOrdenar AS BotonAceptar PROCEDURE Click Mensaje=Messagebox('Estas seguro ?',4+32+256,'QUERES ORDENAR LA TABLA') IF Mensaje=6 IF ThisForm.PanelFrame.Folios.Page2.OpcionOrdenar.Buttons(1).Value=1 SORT TO OrdenNom.dbf ON Nombre =MessageBox('POR NOMBRE',0+64,'TABLA ORDENADA') ELSE SORT TO OrdenDir.dbf ON Direccion =MessageBox('POR DIRECCION',0+64,'TABLA ORDENADA') ENDIF ENDIF ENDPROC ENDDEFINE ************************************** * COPIAR LA TABLA EN DISCO ************************************** DEFINE CLASS AceptarCopiar AS BotonAceptar PROCEDURE Click Mensaje=Messagebox('Estas seguro ?',4+32+256,'QUERES COPIAR LA TABLA') IF Mensaje=6 IF ThisForm.PanelFrame.Folios.Page3.OpcionCopiar.Buttons(1).Value=1 Mensaje=Messagebox('Estas seguro ?',4+32+256,'COPIAR TABLA EN TU RÍGIDO') IF Mensaje=6 ************************* * COPIA EN EL RIGIDO ************************* COPY TO C:\Mis documentos\BackDato.dbf =MessageBox(' EN EL RIGIDO..!!',0+64,'LA TABLA YA FUE COPIADA') ENDIF ELSE Mensaje=Messagebox('Insertaste el disquete..??',4+32+256,'COPIAR TABLA POR DISKETERA') IF Mensaje=6 ************************* * COPIA EN DISKETE ************************* COPY TO A:\BackDato.dbf =MessageBox(' EN EL DISQUETE..!!',0+64,'LA TABLA YA FUE COPIADA') ENDIF ENDIF ENDIF ENDPROC ENDDEFINE
PARADIGMA:
Para obtener éxito en el mundo
hay que parecer loco y ser sabio
(Montesquieu)
Además de copiar textualmente los siguientes códigos, compara los siguientes procedimientos y funciones con los del primer link y deduce la diferencia..!!
******************************************************************* * FUNCIONES Y PROCEDIMIENTOS EXTERNOS ******************************************************************* ************************************** * BUSCAR UNA FICHA POR COMBO BOX ************************************** FUNCTION UbicaFicha FOR Ficha = 1 TO Formulario.PanelBuscar.MiCombo.ListCount IF Formulario.PanelBuscar.MiCombo.Selected(Ficha) DatoDelCombo=AllTrim(Formulario.PanelBuscar.MiCombo.List(Ficha)) ENDIF ENDFOR LOCATE FOR '&DatoDelCombo'$Nombre Ubicacion = RECNO() RETURN Ubicacion PROCEDURE LimpiarBoxes Formulario.PanelBoxesDatos.BoxNombre.Value = '' Formulario.PanelBoxesDatos.BoxDirecc.Value = '' Formulario.PanelBoxesDatos.BoxTelefo.Value = '' Formulario.PanelBoxesDatos.BoxNombre.SetFocus RETURN PROCEDURE MostrarLosDatos Formulario.PanelBoxesDatos.BoxNombre.Value = Nombre Formulario.PanelBoxesDatos.BoxDirecc.Value = Direccion Formulario.PanelBoxesDatos.BoxTelefo.Value = Telefono Formulario.PanelBoxesDatos.Visible = .T. RETURN PROCEDURE ActivarPantallaPrincipal Formulario.Caption = 'AGENDA 2003 de WILO '+ Dtoc(date())+ STR(RECCOUNT())+' Fichas' Formulario.Picture = 'Esterilla.bmp' Formulario.MenuPrincipal.Visible = .T. Formulario.PanelGrilla.Visible = .F. Formulario.LogoUTN.Top=90 Formulario.LogoUTN.Left=200 Formulario.LogoUTN.Picture = 'LogoUTN.bmp' Formulario.LogoUTN.Visible = .T. Formulario.PanelAutor.Visible = .F. Formulario.PanelBuscar.Visible = .F. Formulario.PanelBuscar.Aceptar.Visible=.F. Formulario.PanelBuscar.Ordenar.Visible = .F. Formulario.Refresh RETURN PROCEDURE MostrarBrowser DEFINE WINDOW Ventana FROM 2,2 TO 20,50 TITLE 'RESULTADO de la BUSQUEDA' CLOSE FLOAT GROW ZOOM MINIMIZE ACTIVATE WINDOW Ventana BROW FIELDS Nombre, Direccion FOR Upper(Telf.Nombre) = DatoBuscado NoAppe NoDele NoModi NORMAL IN WINDOW Ventana DEACTIVATE WINDOW Ventana RETURN PROCEDURE GrabarLaNuevaFicha INSERT INTO Agenda (Nombre, Direccion, Telefono) ; VALUES (Formulario.PanelBoxesDatos.BoxNombre.Value,; Formulario.PanelBoxesDatos.BoxDirecc.Value,; Formulario.PanelBoxesDatos.BoxTelefo.Value) Formulario.PanelBuscar.MiCombo.Requery Formulario.PanelBuscar.MiCombo.Refresh RETURN PROCEDURE GrabarLosCambios REPLACE; Telf.Nombre WITH Formulario.PanelBoxesDatos.BoxNombre.Value,; Telf.Direccion WITH Formulario.PanelBoxesDatos.BoxDirecc.Value,; Telf.Telefono WITH Formulario.PanelBoxesDatos.BoxTelefo.Value RETURN PROCEDURE IndexarTabla Set Safety Off Select Telf GO Top Index On Nombre To IndexNom Set Safety On RETURN PROCEDURE OcultarAutor Formulario.PanelAutor.Visible = .F. Formulario.LogoUTN.Visible = .F. RETURN
Puedes destacar la aplicación del esqueleto sobre el que se apoya todo el sistema
Formulario = CREATEOBJECT('MiFormulario')
Formulario.SHOW
READ EVENTS
DEFINE CLASS MiFormulario AS Form
.......
ENDDEF
************************************************************************** * WILO CARPIO CACERES PROGRAMA AGENDA: Modelo con un solo Formulario * Visual Fox 6 Español 01/09/2000 * mode2000.prg ************************************************************************** Close Data Clear All Set Date To French Set Point To '.' Set Optimize On Public DatoDelCombo, Elegido Formulario = CREATEOBJECT('MiFormulario') Formulario.SHOW READ EVENTS DEFINE CLASS MiFormulario AS Form Caption ='AGENDA DE WILO Modelo 2000 '+ Dtoc(date()) ShowTips = .T. Top = 10 Left = 10 Height = 300 Width = 500 FontBold = .T. ControlBox = .T. Closable = .F. minButton = .T. maxButton = .T. BorderStyle= 3 BackStyle = 1 Picture = 'Esterilla.bmp' ********************************************** * OBJETOS DE LA PAGINA PRINCIPAL ********************************************** ADD OBJECT BoxesDeDatos AS ContainerDatos ADD OBJECT VerGrilla AS ContainerGrilla ADD OBJECT MenuPrincipal AS ContainerBotones ADD OBJECT MenuConsulta AS ContainerVerDatos ADD OBJECT UnDatoBuscado AS ContainerBuscar ADD OBJECT VerAutor AS ContainerAutor ADD OBJECT Volar AS Image With Top=250, Left=450,Picture = 'Llave.bmp', ToolTipText='Salir de este programa..!' ADD OBJECT UTN AS Image With Top=50, Left=200,Picture = 'LogoUTN.bmp', ToolTipText='Autor',BackStyle=0 ******************************************************** * METODOS DE ALTAS DE NUEVAS FICHAS ******************************************************** PROCEDURE MenuPrincipal.Altas.Click ThisForm.Caption = 'DIGITA LOS NUEVOS DATOS, luego graba' ThisForm.MenuPrincipal.Visible = .F. DO LimpiarBoxes ThisForm.BoxesDeDatos.Grabar.Visible = .F. ThisForm.BoxesDeDatos.Limpiar.Visible = .T. ThisForm.BoxesDeDatos.Visible = .T. ENDPROC PROCEDURE BoxesDeDatos.Salir.Click ThisForm.Caption = 'AGENDA DE WILO Modelo 2000 '+ Dtoc(date()) ThisForm.BoxesDeDatos.Visible = .F. DO ActivarPantallaPrincipal ENDPROC PROCEDURE BoxesDeDatos.Limpiar.Click IF ThisForm.Caption = 'PARA BORRAR ESTA FICHA, Pulsa -> Limpiar' DELETE Wait Window 'Se eliminó la ficha de '+nombre ThisForm.BoxesDeDatos.Visible = .F. ThisForm.MenuPrincipal.Visible = .T. ELSE ThisForm.Caption = 'DIGITA LOS NUEVOS DATOS, luego graba' DO LimpiarBoxes ENDIF ENDPROC PROCEDURE BoxesDeDatos.BoxNombre.LostFocus PARAMETER a, b, c, d, e IF NOT(ThisForm.BoxesDeDatos.BoxNombre.Value=' ') ThisForm.BoxesDeDatos.Grabar.Visible = .T. ENDIF ENDPROC PROCEDURE BoxesDeDatos.Grabar.Click Mensaje=Messagebox('Estas seguro ?',4+32+256,'Deseas Grabar la FICHA NUEVA') IF Mensaje=6 IF ThisForm.Caption = 'DIGITA LOS NUEVOS DATOS, luego graba' APPEND BLANK ENDIF REPLACE; Telf.Nombre With ThisForm.BoxesDeDatos.BoxNombre.Value,; Telf.Direccion With ThisForm.BoxesDeDatos.BoxDirecc.Value,; Telf.Telefono With ThisForm.BoxesDeDatos.BoxTelefo.Value Set Safety Off Select Telf GO Top Index On Nombre To IndexNom Set Safety On ENDIF ThisForm.BoxesDeDatos.Grabar.Visible = .F. DO LimpiarBoxes IF ThisForm.Caption = 'DIGITA LOS CAMBIOS, Luego pulsa -> Grabar' ThisForm.BoxesDeDatos.Visible=.F. ThisForm.MenuPrincipal.Visible=.T. ThisForm.MenuPrincipal.Consultas.SetFocus ENDIF ENDPROC ENDDEFINE
USE Agenda.dbf ALIAS Telf IN 1
En esta page revisa tus conceptos para abrir bases de datos por programa y algunas de las estructuras típicas en todo sistema
********************************************** * METODOS DE LA PAGINA PRINCIPAL ********************************************** PROCEDURE Load SET DELETE ON USE Agenda.dbf ALIAS Telf IN 1 GO Top ENDPROC PROCEDURE Volar.Click Mensaje=Messagebox('Confirma tu opción',4+32+256,'DESEAS CERRAR ESTE PROGRAMA') IF Mensaje=6 Clear Events ENDIF ENDPROC PROCEDURE UTN.MouseMove PARAMETER a, b, c, d, e This.TOP = 10 This.LEFT = 450 This.Picture = 'Wilin.bmp' ENDPROC PROCEDURE UTN.Click ThisForm.VerAutor.Visible=.T. ENDPROC ******************************************************** * METODOS DE VISUALIZACION DE FICHAS GRABADAS ******************************************************** PROCEDURE MenuPrincipal.Consultas.Click ThisForm.Caption = 'Elige una opción de consulta' ThisForm.MenuPrincipal.Visible = .F. ThisForm.MenuConsulta.Visible = .T. ENDPROC PROCEDURE MenuConsulta.Salir.Click ThisForm.Caption = 'AGENDA DE WILO Modelo 2000 '+ Dtoc(date()) ThisForm.MenuConsulta.Visible = .F. DO ActivarPantallaPrincipal ENDPROC ********************************** * VISUALIZAR EL AUTOR ********************************** PROCEDURE VerAutor.Salir.Click ThisForm.Caption = 'AGENDA DE WILO Modelo 2000 '+ Dtoc(date()) ThisForm.VerAutor.Visible = .F. DO ActivarPantallaPrincipal ThisForm.UTN.Top=50 ThisForm.UTN.Left=200 ThisForm.UTN.Picture = 'LogoUTN.bmp' ENDPROC ********************************** * VISUALIZAR TOTAL POR GRILLA ********************************** PROCEDURE MenuConsulta.TeclaVerTabla.Click ThisForm.Caption = 'GRILLA DE FICHAS GRABADAS' ThisForm.MenuConsulta.Visible=.F. ThisForm.VerGrilla.Visible=.T. ENDPROC PROCEDURE VerGrilla.Salir.Click ThisForm.Caption = 'AGENDA DE WILO Modelo 2000 '+ Dtoc(date()) ThisForm.VerGrilla.Visible = .F. ThisForm.MenuPrincipal.Visible=.T. ENDPROC
COMBO BOX
El manejo de los combo box te simplifican la vida y especialmente de los usuarios de los sistemas que tu generes..!!
********************************** * BUSCAR POR COMBO O TextBox ********************************** PROCEDURE MenuConsulta.TeclaDeBuscar.Click ThisForm.Caption ='SELECCIONA EL DATO A BUSCAR, luego presiona Aceptar' ThisForm.MenuConsulta.Visible = .F. ThisForm.UnDatoBuscado.MiCombo.Visible = .T. ThisForm.UnDatoBuscado.BoxDato.Visible = .F. ThisForm.UnDatoBuscado. Visible = .T. ENDPROC PROCEDURE MenuConsulta.TeclaUnaFicha.Click ThisForm.Caption ='DIGITA EL DATO A BUSCAR, luego presiona Aceptar' ThisForm.MenuConsulta.Visible = .F. ThisForm.UnDatoBuscado.MiCombo.Visible = .F. ThisForm.UnDatoBuscado.BoxDato.Visible = .T. ThisForm.UnDatoBuscado.BoxDato.SetFocus ThisForm.UnDatoBuscado. Visible = .T. ENDPROC PROCEDURE UnDatoBuscado.Salir.Click ThisForm.Caption = 'AGENDA DE WILO Modelo 2000 '+ Dtoc(date()) ThisForm.UnDatoBuscado.Visible = .F. DO ActivarPantallaPrincipal ENDPROC
¿Hasta dónde se lavan la cara los pelados?
¿Por qué apretamos más fuerte los botones del control remoto cuando tiene poca batería??
PROCEDURE MenuPrincipal.Modificar.Click
Solo deben estar visibles los objetos que serán usados en la transacción..!!
******************************************************** * ACTIVAR MenuPrincipal DE MODIFICACION DE FICHAS GRABADAS ******************************************************** PROCEDURE MenuPrincipal.Modificar.Click ThisForm.Caption ='SELECCIONA LA FICHA A CAMBIAR, Luego pulsa Aceptar' ThisForm.BoxesDeDatos.Grabar.Visible = .T. ThisForm.BoxesDeDatos.Limpiar.Visible = .T. ThisForm.MenuPrincipal.Visible = .F. ThisForm.UnDatoBuscado.MiCombo.Visible = .T. ThisForm.UnDatoBuscado. Visible = .T. ENDPROC ******************************************************** * ACTIVAR MenuPrincipal DE BAJAS DE FICHAS GRABADAS ******************************************************** PROCEDURE MenuPrincipal.Bajas.Click ThisForm.Caption ='ELIGE LA FICHA A BORRAR, Luego pulsa Aceptar' ThisForm.MenuPrincipal.Visible = .F. ThisForm.UnDatoBuscado.MiCombo.Visible = .T. ThisForm.UnDatoBuscado. Visible = .T. ENDPROC
¿Por qué la luz negra no es negra?
SELECCIONA EL DATO A BUSCAR
Elige tus fichas para modificar o hacerlos pelota..!!
******************************************************** * ACEPTAR LA BUSQUEDA O MODIFICACION ******************************************************** PROCEDURE UnDatoBuscado.Aceptar.Click ThisForm.UnDatoBuscado. Visible = .F. DO CASE CASE ThisForm.Caption = 'SELECCIONA EL DATO A BUSCAR, luego presiona Aceptar' GO UbicaFicha() ThisForm.MenuConsulta.Visible = .F. ThisForm.BoxesDeDatos.Grabar.Visible = .F. ThisForm.BoxesDeDatos.Limpiar.Visible = .F. DO MostrarLosDatos CASE ThisForm.Caption = 'DIGITA EL DATO A BUSCAR, luego presiona Aceptar' Set Near On Set Exact Off DatoBuscado = Upper(AllTrim(ThisForm.UnDatoBuscado.BoxDato.Value)) GO Top LOCATE FOR Upper(Telf.Nombre) = DatoBuscado IF Found() ThisForm.BoxesDeDatos.Grabar.Visible = .F. ThisForm.BoxesDeDatos.Limpiar.Visible = .F. DO MostrarLosDatos ELSE =MessageBox('No esta registrado',0+64,UnDatoBuscado) ENDIF Set Exact On CASE ThisForm.Caption = 'SELECCIONA LA FICHA A CAMBIAR, Luego pulsa Aceptar' GO UbicaFicha() Mensaje=Messagebox(nombre+' Dirección: '+Direccion,4+32+256,'DESEAS CAMBIAR LA FICHA') IF Mensaje=6 ThisForm.Caption = 'DIGITA LOS CAMBIOS, Luego pulsa -> Grabar' DO MostrarLosDatos ThisForm.BoxesDeDatos.BoxNombre.SetFocus ELSE ThisForm.MenuPrincipal.Visible = .T. ENDIF CASE ThisForm.Caption ='ELIGE LA FICHA A BORRAR, Luego pulsa Aceptar' GO UbicaFicha() Mensaje=Messagebox(nombre+' Dirección: '+Direccion,4+32+256,'DESEAS BORRAR LA FICHA DE') IF Mensaje=6 ThisForm.Caption = 'PARA BORRAR ESTA FICHA, Pulsa -> Borrar' DO MostrarLosDatos ELSE ThisForm.MenuPrincipal.Visible = .T. ENDIF ENDCASE ENDPROC
Al mundo redondo lo llamamos planeta. Si fuese plano... ¿lo llamaríamos redondeta.??
Si un abogado enloquece... ¿pierde el juicio?
CONTENEDORES..!!
Cuanto más contenedores uses tus programas, ademas menos laboriosos, serán más simples para su actualización y mántenimiento..!!
***************************************** * OBJETOS EXTERNOS ***************************************** DEFINE CLASS ContainerDatos AS Container ToolTipText='Container de Datos' TOP = 5 LEFT = 5 WIDTH = 350 HEIGHT = 200 Picture= 'mitapiz.bmp' VISIBLE=.F. ADD OBJECT RotNombre AS Label WITH TOP=15, LEFT=10,Autosize=.T.,HEIGHT=10, FONTBOLD = .T.,Caption = ' Nombre' ADD OBJECT RotDirecc AS Label WITH TOP=60, LEFT=10,Autosize=.T.,HEIGHT=10, FONTBOLD = .T.,Caption = ' Domicilio' ADD OBJECT RotTelefo AS Label WITH TOP=105,LEFT=10,Autosize=.T.,HEIGHT=10, FONTBOLD = .T.,Caption = ' Teléfono' ADD OBJECT BoxNombre AS TextBox WITH TOP=15, LEFT=80, WIDTH=230,HEIGHT=23,ReadOnly=.F., ToolTipText='Nombre y Apellido' ADD OBJECT BoxDirecc AS TextBox WITH TOP=60, LEFT=80, WIDTH=230,HEIGHT=23,ReadOnly=.F., ToolTipText='Direccion del Mono' ADD OBJECT BoxTelefo AS TextBox WITH TOP=105,LEFT=80, WIDTH=130,HEIGHT=23,ReadOnly=.F., ToolTipText='Teléfono del Mono' ADD OBJECT Grabar AS Image WITH TOP=150, LEFT=90, Picture='Grabar.bmp',ToolTipText='Graba estos datos' ADD OBJECT Limpiar AS Image WITH TOP=150, LEFT=150,Picture='Borrar.ico',ToolTipText='Limpia los datos',BackStyle=0 ADD OBJECT Salir AS Image With Top=155, Left=280,Picture='Volar.bmp', ToolTipText='Cerrar esto', BackStyle=0 ENDDEFINE DEFINE CLASS ContainerBotones AS Container ToolTipText='Container de Modificaciones' TOP = 5 LEFT = 5 WIDTH = 85 HEIGHT = 270 Picture= 'mitapiz.bmp' VISIBLE=.T. ADD OBJECT Consultas AS CommandButton With Top=7, Left=7,Width=70,Height=60,Caption = ' Consultas',Picture='Ver.ico', Visible = .T.,ToolTipText = ' Ver datos grabados ' ADD OBJECT Altas AS CommandButton With Top=72, Left=7,Width=70,Height=60,Caption = ' Altas', Picture='ABM.bmp', Visible = .T.,ToolTipText = ' Grabar nuevos datos ' ADD OBJECT Modificar AS CommandButton With Top=137,Left=7,Width=70,Height=60,Caption = ' Cambios', Picture='Modificar.ico',Visible = .T.,ToolTipText = ' Modificar registros ' ADD OBJECT Bajas AS CommandButton With Top=202,Left=7,Width=70,Height=60,Caption = ' Bajas', Picture='Borrar.ico', Visible = .T.,ToolTipText = ' Eliminar registros ' ENDDEFINE
PEGANDO OBJETOS
DEFINE CLASS ContainerVerDatos AS Container ToolTipText='Container de Consultas' TOP = 5 LEFT = 5 WIDTH = 80 HEIGHT = 150 Picture= 'mitapiz.bmp' VISIBLE=.F. ADD OBJECT TeclaVerTabla AS CommandButton With Top=7, Left=5, Width=70,Height=30,Caption = ' Ver Tabla',ToolTipText='Muestra toda la tabla de datos' ADD OBJECT TeclaDeBuscar AS CommandButton With Top=42, Left=5, Width=70,Height=30,Caption = ' Buscar', ToolTipText='Permite Buscar por ComboBox' ADD OBJECT TeclaUnaFicha AS CommandButton With Top=77, Left=5, Width=70,Height=30,Caption = ' Una Ficha',ToolTipText='Busca ficha por Teclado' ADD OBJECT Salir AS Image With Top=120, Left=20, Picture = 'Volar.bmp', ToolTipText='Cerrar esto',BackStyle=0 ENDDEFINE DEFINE CLASS ContainerBuscar AS Container ToolTipText='Container de Búsqueda' TOP = 10 LEFT = 100 WIDTH = 300 HEIGHT = 100 Picture= 'mitapiz.bmp' VISIBLE=.F. ADD OBJECT BoxDato AS TextBox With Top=10, Left=10, Width=190,Height=25,Visible = .F.,FontBold=.T. ADD OBJECT MiCombo AS ComboBox With Top=10, Left=10, Width=190,RowSourceType = 3,Visible=.T.,Value=1,; RowSource="SELECT Nombre FROM Agenda ORDER BY Agenda.Nombre INTO CURSOR Dato",ToolTipText='Selecciona un dato' ADD OBJECT Aceptar AS CommandButton With Top=10, Left=220, Width=70,Height=30,Caption = ' Aceptar',ToolTipText='Aceptar el dato' ADD OBJECT Salir AS Image With Top=55, Left=240,Picture = 'Volar.bmp', ToolTipText='Cerrar esto',BackStyle=0 ENDDEFINE DEFINE CLASS ContainerGrilla AS Container ToolTipText='Grilla de datos grabados' TOP = 10 LEFT = 100 WIDTH = 340 HEIGHT = 280 Picture= 'mitapiz.bmp' VISIBLE=.F. ADD OBJECT MiGrilla AS Grid With Top=10, Left=10, Width=320,Height=220, Visible = .T.,ReadOnly=.T.,FontBold=.T. ADD OBJECT Salir AS Image With Top=240, Left=140,Picture = 'Volar.bmp', ToolTipText='Cerrar esto',BackStyle=0 ENDDEFINE DEFINE CLASS ContainerAutor AS Container ToolTipText='El Autor' TOP = 10 LEFT = 100 WIDTH = 340 HEIGHT = 280 Picture= 'mitapiz.bmp' VISIBLE=.F. BorderStyle = 2 BackColor = 32768 ADD OBJECT Foto AS Image With Top=10, Left=10, Picture = 'Pavaroti.jpg',ToolTipText='Londres Marzo 1998', Visible=.T. ADD OBJECT Salir AS Image With Top=240, Left=130,Picture = 'Volar.bmp', ToolTipText='Cerrar esto',BackStyle=0 ENDDEFINE
Si la piscina es honda, ¿el mar es Toyota.???
FUNCIONES Y PROCEDIMIENTOS
Tus sistemas serán más cortos y por lo tanto más ágiles cuanto más subprogramas adoptes..!!!
************************************************ * FUNCIONES Y PROCEDIMIENTOS EXTERNOS ************************************************ FUNCTION UbicaFicha FOR Ficha = 1 TO Formulario.UnDatoBuscado.MiCombo.ListCount IF Formulario.UnDatoBuscado.MiCombo.Selected(Ficha) DatoDelCombo=AllTrim(Formulario.UnDatoBuscado.MiCombo.List(Ficha)) ENDIF ENDFOR LOCATE FOR '&DatoDelCombo'$Nombre Ubicacion = RECNO() RETURN Ubicacion PROCEDURE LimpiarBoxes Formulario.BoxesDeDatos.BoxNombre.Value = '' Formulario.BoxesDeDatos.BoxDirecc.Value = '' Formulario.BoxesDeDatos.BoxTelefo.Value = '' Formulario.BoxesDeDatos.BoxNombre.SetFocus RETURN PROCEDURE MostrarLosDatos Formulario.BoxesDeDatos.BoxNombre.Value = Nombre Formulario.BoxesDeDatos.BoxDirecc.Value = Direccion Formulario.BoxesDeDatos.BoxTelefo.Value = Telefono Formulario.BoxesDeDatos.Visible = .T. RETURN PROCEDURE ActivarPantallaPrincipal Formulario.MenuPrincipal.Visible = .T. Formulario.Picture = 'Esterilla.bmp' Formulario.Refresh RETURN
F O X: Lenguaje S Q L | ||||
---|---|---|---|---|
Clases y Objetos | Funcion y Procedimiento | Mantenimiento | S Q L | Fox Pro Win 2.6 |
Si el programador desea ubicar un dato que se encuentra en alguna de sus bases o tablas de datos. Las alternativas de métodos pueden ser los procedimientos tipo Locate, Seek, Select
Este último lo ofrece la técnica SQL y es la de mayor eficiencia, cuya sintaxis completa puede verse en el manual corrrespondiente, pero que en su forma simplificada, responde a la siguiente estructura:
SELECT FROM Tabla ORDER BY Tabla.Campo
INTO CURSOR/ARRAY/DBF/TABLE [ TO PRINTER/SCREEN/FILE ] Destino
WHERE Condición
Para ampliar tus conocimientos de esta metodología que es válida para todos los lenguajes modernos, te recomiendo leer detenidamente los CD de ayuda que trae el paquete M Estudio.
Por ejemplo:
Imprime.MiEleccion.RowSource =
SELECT DISTINCT comision FROM alumnos ORDER BY alumnos.comision
INTO CURSOR LaComision
En esta primera parte puedes ver la metodología que utilizan los comandos SQL, válidos para la mayoría
de los lenguajes, para efectuar altas, bajas, modificaciones y consultas.
COMANDO INSERT - SQL
Agrega un registro al final de una tabla que contiene los valores de campo especificados.
SINTAXIS: Tienes dos alternativas..
Argumentos
Si la tabla que especifica no está ya abierta, se abrirá en modo exclusivo en una área de trabajo nueva y se anexará el registro. El área de trabajo nueva no se selecciona, sino que permanece seleccionada el área de trabajo actual.
Se ignora cualquier valor predeterminado de los campos cuando se incluye la cláusula FROM ARRAY.
El nuevo registro contiene los datos indicados en la cláusula VALUES o incluidos en la matriz o las variables de memoria especificadas. El puntero de registro se coloca en el nuevo registro.
EJEMPLOS INSERT - SQL
En el siguiente ejemplo se abre la tabla Alumnos y se agrega un registro.
USE Alumnos INSERT INTO Alumnos (Legajo, Nombre, Comision) ; VALUES (1322, "Pirulo", "3ro 2da")
El ejemplo siguiente abre la tabla customer de la base de datos testdata.
El contenido del registro actual se reparte en variables, y la estructura de la tabla se copia a una nueva tabla llamada MiTabla.
Se usa INSERT - SQL para insertar un registro nuevo en la tabla MiTabla y se ejecuta BROWSE para mostrar el nuevo registro.
CLOSE DATABASES CLEAR OPEN DATABASE (HOME(2) + 'Data\testdata') USE Alumnos && Abre la tabla Alumnos * Esparcir el registro actual a variables de memoria SCATTER MEMVAR * Copiar estructura de la tabla actual a la tabla de ejemplo COPY STRUCTURE TO MiTabla * Insertar registro desde variable de memoria INSERT INTO MiTabla FROM MEMVAR SELECT MiTabla BROWSE * Cerrar y eliminar tabla de ejemplo USE DELETE FILE MiTabla.dbf
COMANDO DELETE - SQL
Marca registros para eliminarlos.
SINTAXIS
DELETE FROM [NombreBaseDatos!]NombreTabla [WHERE CondiciónFiltro1 [AND | OR CondiciónFiltro2 ...]]
Argumentos
Especifica la tabla en la que se marcan registros para eliminar.
Los registros marcados para eliminación no se eliminan físicamente de la tabla hasta que se ejecute PACK. Los registros marcados para eliminación pueden recuperarse (quitarles la marca) con RECALL.
Si se establece SET DELETED como ON, todos los comandos que incluyan un alcance pasarán por alto los registros marcados para eliminación.
A diferencia de DELETE, DELETE - SQL utiliza el bloqueo de registros cuando marca varios registros para eliminarlos de las tablas abiertas para acceso compartido. Este hecho disminuye la contención de registros en situaciones de varios usuarios, pero puede ralentizar el rendimiento. Para conseguir el máximo rendimiento, abra la tabla para uso exclusivo o utilice FLOCK( ) para bloquear la tabla.
EJEMPLO de DELETE - SQL
El ejemplo siguiente abre la tabla customer de la base de datos testdata. Se usa DELETE - SQL para marcar todos los registros para eliminar cuyo campo country contenga EE.UU. Se muestran todos los registros marcados para eliminar. Se usa RECALL ALL para quitar las marcas de todos los registros marcados para eliminar.
CLOSE DATABASES CLEAR OPEN DATABASE (Home(2)+ 'Data\testdata') USE Alumnos && Abre la tabla Alumnos. DELETE FROM Alumnos WHERE comision = "2do 3ra" && Marcar para eliminar. CLEAR LIST FIELDS Legajo, Nombre FOR DELETED( ) && Muestra los registros marcados. * Si el archivo estuviera empaquetado en este punto, se eliminarían los registros. WAIT WINDOW "Registros actualmente marcados para eliminación"+CHR(13) + ; "Tecla para desmarcar..." * Quita las marcas de todos los registros marcados para eliminar. RECALL ALL CLEAR * Comprueba los registros revertidos. COUNT FOR DELETED( )=.T. TO nDeleted * Convierte nEliminado en una cadena de caracteres y muestra información. WAIT WINDOW ALLTRIM(STR(nEliminado)) + " registros marcados para eliminación"
COMANDO MODIFY QUERY
Sintaxis
MODIFY QUERY [NombreArchivo | ?]
[[WINDOW NombreVentana1]
[IN SCREEN]
[NOWAIT]
[SAVE]
[AS nPáginaCódigos]
Argumentos
La consulta se guarda en su página de códigos original cuando se cierra.
Si omite la cláusula AS nPáginaCódigos o nPáginaCódigos es 0, la consulta no se convierte a la página de códigos actual de Visual FoxPro. Si especifica para nPáginaCódigos un valor no admitido, Visual FoxPro genera un mensaje de error.
En Visual FoxPro, las consultas se pueden agregar a un proyecto, y el usuario puede especificar la página de códigos de la consulta desde el Contenedor de proyectos. El Contenedor de proyectos conserva un registro de la página de códigos de la consulta. No obstante, si utiliza MODIFY QUERY para abrir una consulta fuera del Contenedor de proyectos, debe incluir AS nPáginaCódigos para especificar la página de códigos de la consulta.
Al ejecutar MODIFY QUERY sin ningún argumento se muestra el cuadro de diálogo Abrir. Si elige “Nuevo” en este cuadro de diálogo, se asigna el nombre CONSULTA1 a la consulta. Puede guardar la consulta con otro nombre distinto al salir del Diseñador de consultas.
Después de crear una consulta, ésta se almacena como un archivo de programa de Visual FoxPro con la extensión .qpr. Puede ejecutar un programa de consulta con DO, pero es necesario incluir la extensión .qpr con el nombre del archivo de consulta.
COMANDO CREATE QUERY
Abre el Diseñador de consultas.
Sintaxis
CREATE QUERY [NombreArchivo | ?] [NOWAIT]
Argumentos
NOWAIT sólo es efectivo desde dentro de un programa. No tiene ningún efecto en CREATE QUERY cuando se ejecuta desde la ventana Comandos.
Para recuperar datos de las tablas se utiliza un comando SELECT de SQL. SELECT es muy eficaz y puede reemplazar a varios comandos de Visual FoxPro. Puesto que un comando SELECT de SQL realiza las funciones de varios comandos de Visual FoxPro, SELECT optimiza el rendimiento del programa.
Piense en SELECT como en una forma de presentar una consulta a Visual FoxPro para que obtenga información de tablas. SELECT le permite especificar la información que quiere sin tener que decirle a Visual FoxPro cómo ha de obtener la información. Visual FoxPro determina la forma óptima de obtener la información.
Después de crear una consulta, la consulta se almacenará en un archivo de programa de Visual FoxPro
con una extensión .qpr.
Un programa de consulta puede ejecutarse mediante DO.
Cuando ejecute una consulta con DO debe incluir la extensión del archivo de consulta,
como se muestra en el ejemplo siguiente.
DO mi_cons.qpr
Si se ejecuta el comando CREATE QUERY sin ningún argumento adicional, se abrirá una nueva ventana de consulta. A la consulta se le asigna el nombre CONSULTA1. Cuando salga de la ventana Consulta, podrá guardar la consulta con un nombre diferente.
Si la tabla que especifica está abierta, INSERT anexa el registro a la tabla. Si la tabla está abierta en una área de trabajo distinta del área de trabajo actual, no se seleccionará después de anexar el registro; el área de trabajo actual permanecerá seleccionada.
SELECT
SELECT [ALL | DISTINCT] [TOP nExpresión [PERCENT]] [Alias.] Elemento_Selección [AS Nombre_Columna] [, [Alias.] Elemento_Selección [AS Nombre_Columna] ...]
Especifica los campos, constantes y expresiones que se mostrarán en el resultado de la consulta.
Puede especificar desde 1 a 32,767 filas. Las filas de valores idénticos para las columnas especificadas en la cláusula ORDER BY se incluyen en el resultado de la consulta.
A partir de entonces, si especifica 10 para nExpr, el resultado de la consulta podrá obtener más de 10 filas si hay más de 10 filas con valores idénticos para las columnas especificadas en la cláusula ORDER BY.
Si se incluye la palabra clave PERCENT, se redondeará al número entero más alto el número de columnas devuelto en el resultado.
Los valores permitidos para nExpr cuando se incluye la palabra clave PERCENT son 0.01 a 99.99.
Elemento_Selección especifica un elemento a incluir en el resultado de la consulta. Un elemento puede ser uno de los siguientes:
El nombre de un campo de una tabla de la cláusula FROM.
Una constante especificando que el mismo valor constante ha de aparecer en cada fila del resultado de la consulta.
Una expresión que puede ser el nombre de una función definida por el usuario (FDU).
F R O M
FROM [FORCE][NombreBaseDatos!]Tabla [[AS] Local_Alias] [[INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] JOIN NombreBaseDatos!]Tabla [[AS] Local_Alias] [ON CondiciónCombinación …]
Enumera las tablas que contienen los datos que ha obtenido la consulta. Si no hay ninguna tabla abierta, Visual FoxPro mostrará el cuadro de diálogo Abrir para permitirle especificar la ubicación del archivo. Una vez abierta, la tabla permanecerá abierta cuando la consulta se haya terminado.
I N T O
[[INTO Destino] | [TO FILE NombreArchivo [ADDITIVE] | TO PRINTER [PROMPT] | TO SCREEN]]
Determina donde se almacenan los resultados de la consulta. Si incluye una cláusula INTO y una cláusula TO en la misma consulta, la cláusula TO se pasará por alto. Si no incluye la cláusula INTO, los resultados de la consulta se mostrarán en la ventana Examinar. Los resultados de la consulta pueden dirigirse también a la impresora o a un archivo mediante la cláusula TO.
Destino puede ser uno de los siguientes:
Después de que se ejecute SELECT, el cursor temporal permanecerá abierto y estará activo pero solamente para lectura. Una vez que cierre este cursor temporal, se borrará. Los cursores pueden existir como un archivo temporal en la unidad SORTWORK.
Incluya NOFILTER para crear un cursor que se pueda usar en consultas posteriores.
En versiones anteriores de Visual FoxPro, era necesario incluir una expresión o una constante adicional como un filtro para crear un cursor utilizable en consultas posteriores.
Ejemplo, la adición de un Logical verdadero como una expresión de filtro creaba una consulta utilizable en consultas posteriores:
SELECT *, .T. FROM customers INTO CURSOR myquery
Si se incluye NOFILTER es posible que disminuya el rendimiento de la consulta, puesto que se creará una consulta temporal en el disco. Cuando se cierre el cursor se eliminará del disco la consulta temporal.
Incluya DATABASE NombreBaseDatos para especificar una base de datos a la que se agregará la tabla. Incluya NAME NombreLargoTabla para especificar un nombre largo para la tabla. Los nombres largos pueden contener un máximo de 128 caracteres y pueden utilizarse en lugar de nombres cortos en la base de datos.
[PREFERENCE NombrePreferencia] [NOCONSOLE] [NOWAIT]
Si el resultado de una consulta se envía a una ventana Examinar, podrá incluir PREFERENCE para guardar los atributos y opciones de la ventana Examinar para utilizarlos después.
Ejecutando SELECT con un NombrePreferencia de PREFERENCE, la primera vez se crea la preferencia. Ejecutando posteriormente SELECT con el mismo nombre de preferencia, se restaurará la ventana Examinar con el mismo estado de preferencia. Cuando se cierra la ventana Examinar, se actualiza la preferencia.
Si sale de una ventana Examinar presionando CTRL+Q+W, no se guardarán los cambios de la ventana Examinar en el archivo de recurso.
WHERE
[WHERE CondiciónCombinación [AND CondiciónCombinación ...] [AND | OR CondiciónFiltro [AND | OR CondiciónFiltro ...]]]
Indica a Visual FoxPro que incluya únicamente ciertos registros en el resultado de la consulta. WHERE es necesario para recuperar datos de varias tablas.
Las condiciones de combinación múltiple deben conectarse mediante el operador AND. Cada condición de combinación tiene la forma siguiente:
Operador Comparación
= Igual
== Exactamente igual
LIKE SQL LIKE
<>, !=, # Distinto de
> Mayor que
>= Mayor o igual que
< Menor que
<= Menor o igual que
Cuando la condición de filtro incluye ALL, el campo debe cumplir la condición de comparación para todos los valores generados por la subconsulta antes de que se incluya el registro en el resultado de la consulta.
company < ALL ;(SELECT company FROM customer WHERE country = "Reino Unido")
Cuando la condición de filtro incluye ANY o SOME, el campo debe cumplir la condición de comparación en al menos uno de los valores generados por la subconsulta.
company < ANY ; (SELECT company FROM customer WHERE country = "Reino Unido")
Este ejemplo comprueba si los valores del campo están dentro de un intervalo de valores especificado.
customer.postalcode BETWEEN 90000 AND 99999
Este ejemplo comprueba si al menos una línea cumple los criterios de la subconsulta. Cuando la condición de filtro incluye EXISTS, la condición de filtro se evalúa como verdadera (.T.) a no ser que la subconsulta sea un conjunto vacío.
EXISTS ; (SELECT * FROM orders WHERE customer.postalcode = orders.postalcode)
Cuando una condición de filtro incluye IN, el campo debe contener uno de los valores antes de que el registro se incluya en los resultados de la consulta.
customer.postalcode NOT IN ("98052","98072","98034")
Aquí, el campo debe contener uno de los valores devueltos por la subconsulta antes de que su registro se incluya en los resultados de la consulta.
customer.cust_id IN ; (SELECT orders.cust_id FROM orders WHERE orders.city="Seattle")
customer.country NOT LIKE "Reino Unido"
Esta condición de filtro busca cada uno de los campos que coinciden con cExpresión.
Puede utilizar el signo de porcentaje (%) y subrayado ( _ ) como parte de cExpresión. El signo de porcentaje representa a cualquier secuencia de caracteres desconocidos en la cadena. El subrayado representa un solo carácter desconocido en la cadena.
[GROUP BY ColumnaGrupo [, ColumnaGrupo ...]]
Agrupa las filas de la consulta basándose en los valores de una o más columnas. ColumnaGrupo puede ser el nombre de un campo normal de una tabla, o un campo que incluya una función de campo SQL, o una expresión numérica indicando la posición de la columna en la tabla resultado (la columna más a la izquierda tiene el número 1).
[HAVING CondiciónFiltro]
HAVING CondiciónFiltro: Especifica una condición de filtro que los grupos deben satisfacer para quedar incluidos en el resultado de la consulta. HAVING debe utilizarse con GROUP BY. Puede incluir tantas condiciones de filtro como se deseen, conectadas con el operador AND u OR. También puede utilizar NOT para invertir el valor de una expresión lógica.
CondiciónFiltro no puede contener una subconsulta.
Una cláusula HAVING sin una cláusula GROUP BY actúa como una cláusula WHERE. Puede utilizar alias locales y funciones de campo en la cláusula HAVING. Utilice una cláusula WHERE para acelerar el rendimiento si su cláusula HAVING no contiene funciones de campo. No olvide que la cláusula HAVING debería de aparecer antes de una cláusula INTO porque, de lo contrario, se producirá un error de sintaxis.
[UNION [ALL] SELECTCommand]
[UNION [ALL] ComandoSELECT]: Combina el resultado final de una SELECT con el resultado final de otra SELECT. De forma predeterminada, UNION comprueba el resultado combinado y elimina las filas duplicadas. Puede utilizar paréntesis para combinar múltiples cláusulas UNION.
Utilice la palabra clave opcional ALL para impedir que UNION elimine filas duplicadas de los resultados combinados.
Las cláusulas UNION siguen las reglas siguientes:
ORDER BY
[ORDER BY Elemento_Orden [ASC | DESC] [, Elemento_Orden [ASC | DESC] ...]]
Únicamente el SELECT final puede tener una cláusula ORDER BY, que debe referirse a las columnas de los resultados por su número. Si se incluye otra cláusula ORDER BY, afectará al resultado completo. ORDER BY Elemento_Orden
Ordena el resultado de la consulta basándose en los datos de una o varias columnas. Cada Elemento_Orden debe corresponder a una columna del resultado de la consulta, y puede ser uno de los siguientes:
Un campo de una tabla FROM que también es un elemento de selección en la cláusula principal SELECT (no en una subconsulta).
Una expresión numérica que indica la ubicación de la columna en la tabla resultante. (La columna de la izquierda es la número 1.)
ASC especifica un orden ascendente para los resultados de la consulta, de acuerdo con el elemento o los elementos de orden, y es el valor predeterminado para ORDER BY.
DESC especifica un orden descendente para los resultados de la consulta.
SELECT ES...
SELECT es un comando SQL que está incorporado en Visual FoxPro como cualquier otro comando de Visual FoxPro.
Cuando utiliza SELECT para componer una consulta, Visual FoxPro interpreta la consulta y recupera los datos especificados de las tablas. Puede crear una consulta SELECT:
Cuando ejecuta SET TALK ON y ejecuta SELECT, Visual FoxPro muestra la duración de la consulta y el número de registros del resultado. _TALLY contiene el número de registros del resultado de la consulta.
SELECT no respeta la condición de filtro actual especificada con SET FILTER.
Una subconsulta, a la que se hace referencia en los argumentos siguientes, es un comando SELECT dentro de otro SELECT y debe incluirse entre paréntesis.
Puede tener múltiples subconsultas al mismo nivel (no anidadas) en la cláusula WHERE (consulte esta sección de los argumentos). Las subconsultas pueden contener múltiples condiciones de combinación.
Cuando se obtiene el resultado de una consulta, las columnas se denominarán según las siguientes reglas:
Salvando dichas limitaciones, las funciones definidas por el usuario son aceptables en la cláusula SELECT. Sin embargo, recuerde que la utilización de SELECT puede ralentizar el rendimiento.
Las siguientes funciones de campo están disponibles para ser utilizadas con un elemento seleccionado que sea un campo o una expresión que implique a un campo:
Combinaciones Visual FoxPro acepta sintaxis de combinación de 1992 SQL ANSI, lo que le permite crear consultas que vinculen las filas en dos o más tablas mediante la comparación de los valores de campos especificados. Por ejemplo, una combinación interna selecciona filas procedentes de dos tablas sólo cuando los valores de los campos combinados son iguales. Visual FoxPro admite combinaciones anidadas.
Dado que SQL se basa en la teoría de conjuntos matemática, se puede representar a cada tabla con un círculo. La cláusula ON que especifica las condiciones de la combinación determina el punto de intersección, el cual representa el conjunto de filas que coinciden. En el caso de una combinación interna, la intersección tendrá lugar en el interior o en una parte “interna” de los dos círculos. Una combinación externa incluye tanto las filas coincidentes que se han encontrado en la sección de intersección interna de las tablas, como las filas de la parte externa del círculo a la izquierda, o a la derecha, de la intersección.
Importante Tenga presente la siguiente información a la hora de crear condiciones de combinación:
Si incluyes dos tablas en una consulta y no especifica una condición de combinación, cada registro de la primera tabla se combinará con cada registro de la segunda tabla hasta que surtan efecto las condiciones del filtro. Una consulta tal puede producir unos resultados interminables.
Se prudente al utilizar, en condiciones de combinación, funciones tales como DELETED( ), EOF( ), FOUND( ), RECCOUNT( ), y RECNO( ), que aceptan un área de trabajo o un alias opcional. La inclusión de un alias o de un área de trabajo en dichas funciones puede producir resultados inesperados. SELECT no utiliza sus áreas de trabajo; realiza lo equivalente a USE ... AGAIN. Las consultas de una única tabla que utilizan estas funciones sin un área de trabajo o un alias opcional, tendrán resultados correctos. De todas formas, las consultas de varias tablas que utilicen dichas funciones (incluso sin un área de trabajo o un alias opcional) pueden tener resultados inesperados.
Se prudente al combinar tablas que contengan campos vacíos porque Visual FoxPro concuerda campos vacíos. Por ejemplo, si combina CUSTOMER.ZIP e INVOICE.ZIP, y CUSTOMER contiene 100 códigos postales vacíos e INVOICE contiene 400 códigos postales vacíos, el resultado de la consulta contendrá 40.000 registros más, como resultado de los campos vacíos. Use la función EMPTY( ) para eliminar los registros vacíos del resultado de la consulta.
EJEMPLOS
Ejemplo 1: Muestran los nombres de todas las compañías en customer (un campo de una tabla). CLOSE ALL CLOSE DATABASES OPEN DATABASE (HOME(2) + 'data\testdata') SELECT customer.company ; FROM customer Ejemplo 2: Muestra el contenido de tres campos de dos tablas y combina las dos tablas basándose en el campo clie_id. Utiliza alias locales para ambas tablas. CLOSE ALL CLOSE DATABASES OPEN DATABASE (HOME(2) + 'data\testdata') SELECT a.company, b.order_date, b.shipped_on ; FROM customer a, orders b ; WHERE a.cust_id = b.cust_id Ejemplo 3: Muestra únicamente registros con datos únicos en los campos especificados. CLOSE ALL CLOSE DATABASES OPEN DATABASE (HOME(2) + 'data\testdata') SELECT DISTINCT a.company, b.order_date, b.shipped_on ; FROM customer a, orders b ; WHERE a.cust_id = b.cust_id Ejemplo 4: Muestra los campos country, postalcode y company en orden ascendente. CLOSE ALL CLOSE DATABASES OPEN DATABASE (HOME(2) + ‘data\testdata’) SELECT country, postalcode, company ; FROM customer ; ORDER BY country, postalcode, company Ejemplo 5: Almacena el contenido de los campos de dos tablas en una tercera tabla. CLOSE ALL CLOSE DATABASES OPEN DATABASE (HOME(2) + 'data\testdata') SELECT a.company, b.order_date, b.shipped_on ; FROM customer a, orders b ; WHERE a.cust_id = b.cust_id ; INTO TABLE custship.dbf BROWSE Ejemplo 6: Muestra únicamente los registros con una fecha de factura anterior al 02/26/2001. CLOSE ALL CLOSE DATABASES OPEN DATABASE (HOME(2) + 'data\testdata') SELECT a.company, b.order_date, b.shipped_on ; FROM customer a, orders b ; WHERE a.cust_id = b.cust_id ; AND b.order_date < {^2001-02-26} Ejemplo 7: Muestra los nombres de todas las empresas de customer con un código postal que coincida con el código postal de la tabla orders. CLOSE ALL CLOSE DATABASES OPEN DATABASE (HOME(2) + 'data\testdata') SELECT company FROM customer a WHERE ; EXISTS (SELECT * FROM orders b WHERE a.postalcode = b.postalcode) Ejemplo 8: Muestra todos los registros de customer que tengan un nombre de empresa que comience por una C mayúscula y tenga cualquier longitud. CLOSE ALL CLOSE DATABASES OPEN DATABASE (HOME(2) + 'data\testdata') SELECT * FROM customer a WHERE a.company LIKE "C%" Ejemplo 9: Muestra todos los registros de customer que tengan un nombre de país que comience por U mayúscula seguido de un carácter desconocido. CLOSE ALL CLOSE DATABASES OPEN DATABASE (HOME(2) + 'data\testdata') SELECT * FROM customer a WHERE a.country LIKE "U_" Ejemplo 10: Muestra los nombres de todas las ciudades de customer en mayúsculas y llama CityList a la columna de los resultados. CLOSE ALL CLOSE DATABASES OPEN DATABASE (HOME(2) + 'data\testdata') SELECT UPPER(city) AS CityList FROM customer Ejemplo 11: Muestra cómo se puede realizar una consulta de datos que contenga signos de porcentaje (%). Se colocará una barra inversa (\) antes del signo de porcentaje para indicar que tendría que ser tratado como un literal, y la barra inversa se especifica como el carácter de escape en la cláusula ESCAPE. Dado que las tablas de ejemplo incluidas con Visual FoxPro no contienen el carácter de signo de porcentaje, esta consulta no devolverá ningún resultado. CLOSE ALL CLOSE DATABASES OPEN DATABASE (HOME(2) + 'data\testdata') SELECT * FROM customer; WHERE company LIKE "%\%%" ESCAPE "\" Ejemplo 12: Muestra cómo se puede realizar una consulta de datos que contenga signos de subrayado (_). Se colocará una barra inversa (\) antes del signo de subrayado para indicar que debería ser tratado como un literal, y se especificará la barra inversa como el carácter de escape en la cláusula ESCAPE. Dado que las tablas de ejemplo incluidas con Visual FoxPro no contienen el carácter de subrayado, esta consulta no devolverá ningún resultado. CLOSE ALL CLOSE DATABASES OPEN DATABASE (HOME(2) + 'data\testdata') SELECT * FROM customer; WHERE company LIKE "%\_%" ESCAPE "\" Ejemplo 13: El carácter Escape se utiliza a sí mismo como un literal. El guión es tanto el carácter escape como un literal. La consulta devuelve todas las filas en las que el nombre de la compañía contiene un signo de porcentaje seguido de un guión. Dado que las tablas de ejemplo proporcionadas con Visual FoxPro no contienen el carácter del signo de porcentaje, esta consulta no devolverá ningún resultado. CLOSE ALL CLOSE DATABASES OPEN
Lenguaje | Gramática | Autómata | Laplace | Series | Ecuación | Operador |
---|
Y para el cruel que me arranca
el corazón con que vivo,
cardo ni ortiga cultivo;
..cultivo una rosa blanca..!
José Martí
Te espero en: wilucha@gmail.com
Esta page está en: www.wilocarpio.com.ar
10/12/2003