![]() |
![]() |
![]() |
![]() |
![]()
Mi congenere virtual algorítmico, esta propuesta pretende servirte de modelo básico integral para diseñar
cualquier sistema dentro de la tecnología del entorno Windows del polpular Fox Pro o también Visual Fox Pro
BASES de DATOS
|
||||
Datos |
||||
Procedimiento |
||||
Clases |
||||
SQL |
Los algoritmos que te propongo los diseñé de manera que sean fáciles de comprender, que su lectura describa el objetivo de cada módulo y lo que es más importante, que pueda ser compilado en la última versión de su hermano mayor VISUAL FOX PRO..!!
Amigo digital.. te garantizo que todos estos algoritmos funcionan correctamente, pero seguramente que está vieja propuesta...puede ser fácilmente mejorada por ti.
Buena suerte..!! y que le saques provecho...!!!
* * | | * P R O G R A M A | FOX PRO WIN |FechaInicio: 15/05/96 * TALLER | Version 2.6 | * FOX | Wilo Carpio |UltimaModif: 11/08/96 * «» | | * do autor do ventana with " SINTAXIS Y SEMANTICA: TALLER DE FOX " * * M E N U D E O P C I O N E S * do while .t. @ 4,13 GET opcion FUNCTION '*B a:\Consulta.bmp;a:\Lapiz.ico;a:\volar.bmp ' SIZE 5,12,1.3 default 1 Message 'CONSULTAS, MODIDICACIONES y SALIR: Elije una Opción haciendo CLICK EN UN ICONO.!!!' read do case case opcion = 1 do Consultas case opcion = 2 if clave() do while opcion < 5 opcion = cincoTeclas('MODIFICAR','Altas','Corregir','Borrar','Indexar','Volver') do case case opcion = 1 do GrabaNuevaFicha case opcion = 2 do corrigeFicha case opcion = 3 do borraFicha case opcion = 4 do indexar endcase enddo endif case opcion = 3 do chau endcase enddo return
Lo importante es lo de adentro. (Jack el Destripador)
GRABACION DE DATOS EN LA BASE
Te aconsejo, si eres un principiante que copies textualmente codigos usados y pongas atención en los siguientes conceptos:
El funcionamiento de estos algoritmos están totalmente probados
* * A L T A S * procedure GrabaNuevaFicha use taller98 go bottom ultimo = legajo do while Cuestion('Deseas grabar una nueva ficha..?','Ultima Ficha: '+legajo+' '+alltrim(nombre)) okdatos = .f. do while okdatos = .f. do VentanaGrabar with "Registra los nuevos datos, luego cierra esta ventana",1,1,12,50 @ 0,0 say " Legajo Apellido y Nombre Comision " color gr+/W @ 4,0 say " Parcial Recuperación " color gr+/W buscado = space(10) @ 2,1 say ultimo @ 1,1 get buscado read locate for "&buscado" $ upper(legajo) if found() then deactivate window Grabar =Mensaje( nombre+" ya está en registro Nº " +alltrim(str(recno())),"&buscado"+": Este dato ya fue grabado") exit else nomb = space(30) @ 1,12 get nomb comi = space(1) @ 1,43 get comi parc = 0 @ 5,1 get parc recu = 0 @ 5,14 get recu @ 7,2 GET Ok FUNCTION '*h \!\
Cristobal no me rompas los huevos..!! ( La reina Isabel )
VISULIZACION DE DATOS DE LA BASE
Te aconsejo, si eres un principiante que copies textualmente codigos usados y pongas atención en los siguientes conceptos:
El funcionamiento de estos algoritmos están totalmente probados
* * CONSULTAS * procedure Consultas do while opcion < 5 use taller98 opcion = seisTeclas('BUSCAR DATOS DE:','Por Nombre','Un Legajo','Todos los alumnos','Comisiones','Aprobados y otros','Volver') do case case opcion = 1 n = LeeNombre('buscar') go n do abreVentana with 'FICHA Nº '+alltrim(str(n))+' : '+nombre,2,1,10,70 brow nomodi nodele FONT 'System', 15 STYLE 'N' case opcion = 2 * buscado = leeDato("Nº de Legajo") * locate for "&buscado" $ upper(legajo) * if recno() > reccount() then * =Mensaje('Lo lamento','El legajo ' + '&buscado'+ ' No esta registrado..!!') * else * =Mensaje('Leg: '+legajo +" esta en registro " +alltrim(str(recno())), nombre +'Comisión: '+ comision) * endif n = leeLegajo() go n do abreVentana with 'FICHA Nº '+alltrim(str(n))+' LEGAJO: '+legajo+' : '+nombre,2,1,10,70 brow nomodi nodele FONT 'System', 15 STYLE 'N' case opcion = 3 do abreVentana with "Nomina de "+alltrim(str(reccount())) +" Alumnos",1,1,20,60 brow nomodi FONT 'System', 15 STYLE 'N' if Confirma("Deseas copias impresas ?") buscado = leeDato("Nº de COMISION a imprimir ") do ImprimeCondicion with 'alumnos.frx',alltrim(buscado) endif case opcion = 4 buscado = alltrim(str(leeComision())) * buscado = leeDato("Comision buscada") count for "&buscado" $ upper(comision) to total do abreVentana with "COMISION "+buscado+" Total alumnos: "+ alltrim(str(total)),2,1,25,75 brow field legajo,nombre,grupo for "&buscado" $ alltrim(comision) nomodi FONT 'System', 15 STYLE 'N' case opcion = 5 opcion = seisTeclas('Alumnos..','Aprobados','Que Recuperan','Con Prácticos','Sin Prácticos','Libres','Volver') do case case opcion = 1 count for parcial => 4 to total do abreVentana with alltrim(str(total))+" ALUMNOS APROBARON EL EVALUATIVO",2,1,25,75 brow field legajo,nombre,parcial for parcial => 4 case opcion = 2 count for parcial < 4 to total do abreVentana with alltrim(str(total))+" ALUMNOS DESAPROBARON EL EVALUATIVO",2,1,25,75 brow field legajo,nombre,parcial for parcial < 4 case opcion = 3 count for practico = .T. to total do abreVentana with alltrim(str(total))+" ALUMNOS APROBARON LOS PRACTICOS",2,1,25,75 brow field legajo,nombre,parcial for practico = .T. case opcion = 4 count for practico = .F. to total do abreVentana with alltrim(str(total))+" ALUMNOS DEBEN LOS PRACTICOS",2,1,25,75 do abreVentana with "NOMINA DE ALUMNOS QUE DEBEN PRACTICOS",2,1,25,75 brow field legajo,nombre,parcial for practico = .F. case opcion = 5 count for parcial < 4 and practico = .F. to total do abreVentana with alltrim(str(total))+" ALUMNOS QUEDARON LIBRES",2,1,25,75 brow field legajo,nombre,parcial for parcial < 4 and practico = .F. endcase deactivate window ver endcase deactivate window ver enddo return
Al fin solos... ( El llanero solitario )
SACANDO DATOS DE LA BASE
Te aconsejo, si eres un principiante que copies textualmente codigos usados y pongas atención en los siguientes conceptos:
El funcionamiento de estos algoritmos están totalmente probados
* * B A J A S * procedure borraFicha use taller98 n = LeeNombre('borrar') go n if Cuestion('Registro Nº '+alltrim(str(n))+' Leg: '+legajo +' '+ nombre,'Deseas Borrar este registro.??') delete record n if Confirma("Borras Definitivamente Registro: "+alltrim(str(n))+' Leg:'+legajo +' '+ nombre) pack endif deactivate window otra endif return
Nuestra madre es una loba... (Rómulo y Remo)
REEMPLAZANDO DATOS EN LA BASE
Te aconsejo, si eres un principiante que copies textualmente codigos usados y pongas atención en los siguientes conceptos:
El funcionamiento de estos algoritmos están totalmente probados
* * M O D I F I C A C I O N E S * procedure corrigeFicha use taller98 opcion = seisTeclas('CORREGIR..','Otros Datos','Nombres','Legajos','Parciales','Practicos','Cancelar') do case case opcion = 1 opcion = seisTeclas('Modificar..','Todos los datos','Recuperación','Generar TXT','Ordenar Datos','Datos a Disquete','Cancelar') do case case opcion = 1 do abreVentana with "Cambia los Datos de la FICHAS ..luego, cierra esta ventana",2,1,25,65 brow FONT 'System', 15 STYLE 'N' case opcion = 2 do abreVentana with "Cambia las Notas de recuperatorios ..luego, cierra esta ventana",2,1,25,65 browse field legajo,nombre,recupera freeze recupera FONT 'System', 15 STYLE 'N' case opcion = 3 do abreVentana with "Se generó el archivo texto.txt",2,1,25,65 List To texto.TXT OFF wait window 'Fin generación de archivo texto.txt' case opcion = 4 copy to datosbak sort to alumalfa on nombre close data taller98 dele file taller98.dbf use alumalfa copy to taller98 use taller98 case opcion = 5 use taller98 copy to a:\CopiaDB endcase case opcion = 2 go LeeNombre('corregir') do abreVentana with "Cambia los Datos de la ficha ..luego, cierra esta ventana",2,1,10,65 brow FONT 'System', 15 STYLE 'N' case opcion = 3 buscado = leeDato("Nº de Legajo") locate for "&buscado" $ upper(legajo) if found() then if Confirma("Cambias el registro " +alltrim(str(recno()))+' Leg:'+legajo + nombre +'Com: '+ comision) do abreVentana with "Cambia los Datos de la ficha ..luego, cierra esta ventana",2,1,25,65 edit endif else =Mensaje('Lo lamento','&buscado'+ ' No esta registrado..!!') endif case opcion = 4 if Confirma("Deseas cambiar notas de parciales ") do abreVentana with "Cambia las Notas de Parciales ..luego, cierra esta ventana",2,1,25,65 browse field legajo,nombre,parcial freeze parcial endif case opcion = 5 if Confirma("Deseas cambiar datos de Trabajos Prácticos ") do abreVentana with "Cambia los datos de los Practicos ..luego, cierra esta ventana",2,1,25,65 browse field legajo,nombre,practico freeze practico endif endcase deactivate window ver return
Qué hermosa que es la humanidad..!! ( Un caníbal )
PROCEDIMIENTOS TIPICOS
Te aconsejo, si eres un principiante que copies textualmente codigos usados y pongas atención en los siguientes conceptos:
* * P R O C E D I M I E N T O S V A R I O S * procedure indexar if Cuestion('Deseas indexar la tabla ?','Indexación por nombre o legajo') use taller98 opcion = tresTeclas('INDEXAR BASES por:','Nombres','Legajo','Volver') do case case opcion = 1 index on nombre to alumnos use taller98 index alumnos case opcion = 2 index on legajo to legajos unique use taller98 index alumnos endcase do abreVentana with "Tabla Indexada",2,1,25,65 browse field legajo,nombre,comision nomodify FONT 'System', 15 STYLE 'N' deactivate window ver endif return procedure ImprimeCondicion parameter reporte,buscado report form '&reporte' for comision = '&buscado' preview if Confirma("Preparaste tu impresora...tiene papel ?") do otraVentana with "Imprimiendo reporte..",2,1,21,60 report form '&reporte' for comision = '&buscado' to printer deactivate window otra endif return procedure DeseasImprimir * Ejemplo: do DeseasImprimir with 'taller.frx' parameter reporte if Confirma('Deseas copias impresas ?') use taller98 report form '&reporte' preview if Confirma('Preparaste tu impresora...tiene papel ?') do otraVentana with 'Imprimiendo reporte..',2,1,21,60 report form '&reporte' to printer deactivate window otra endif endif return procedure chau if Confirma("Deseas salir de este programa y volver a Windows ?") deactivate window ventana close procedure clear program close database clear Cancel * quit endif return procedure tecla wait "Pulse Tecla p/Continuar" window return procedure ventana parameter titulo define window ventana from 0,0 to 28,79 title "&titulo" + dtoc(date()) system mdi minimize zoom fill file Fondo.bmp close grow color b activate window ventana @ 4,25 say 'cayopity.bmp' bitmap @ 17,60 say 'Utn.ico' bitmap @ 19,57 say ' Wilo Carpio ' FONT 'ARIAL',9 STYLE 't' Color br @ 20,60 say ' 1999 ' FONT 'ARIAL',7 STYLE 't' Color b @ 6,25 say ' Consultas ' FONT 'ARIAL',10 STYLE 'bt' Color Gr+ @ 12,25 say ' Modificar ' FONT 'ARIAL',10 STYLE 'bt' Color Gr+ @ 18,25 say ' Salir ' FONT 'ARIAL',10 STYLE 'bt' Color b+ return procedure ventanaDatos parameter titulo define window ventanaDatos from 3,3 to 20,60 in window ventana title '&titulo' system mdi minimize zoom close grow color w+/+gr activate window ventanaDatos return procedure Autor for i= 6 to 25 define window comenzar from 2,2 to i+8,2*i+8 title 'Programa Modelo Fox Pro Win' system mdi minimize zoom style 't' fill file Tejas.bmp grow color w+/r activate window comenzar if i>20 then @ 3,15 say 'WiloBaby.bmp' bitmap endif Wait Window 'Bienvenido al programa..!!' TimeOut 0.2 endfor for i= 2 to 12 @ i,1 say ' Wilo Carpio ' FONT 'PRESTIGE',2*i STYLE 'B' endfor @ 20,5 say ' PRESENTA ' FONT 'PRESTIGE',3*i STYLE 'B' Color +gr Wait window '..CLICK para Comenzar.!!' TimeOut 10 deactivate window comenzar return
Muerte a los comechingones. (Los chingones)
FUNCIONES TIPICAS
Te aconsejo, si eres un principiante que copies textualmente codigos usados y pongas atención en los siguientes conceptos:
El funcionamiento de estos algoritmos están totalmente probados
* F U N C I O N E S * function leeDato parameter etiqueta do otraVentana with "Digita "+"&etiqueta"+", luego pulsa ENTER",3,25,7,75 dato = space(30) @ 0,2 say "" get dato read dato = alltrim(upper(dato)) deactivate window otra return dato function leeNumero parameter membrete do otraVentana with membrete,2,2,6,30 @ 1,10 get numeroBuscado spinner 1,1,9999 default 10 size 1,5 font 'prestige new',12 style 'b' color b+/w read deactivate window otra return numeroBuscado function leeFecha do abreVentana with "Digite la fecha",2,2,5,20 fecha = date() @ 0,0 say "" get fecha font "prestige",14 style "n" read deactivate window ver return fecha function leeNombreCombo DIMENSION elementoVector(reccount()) for i = 1 to reccount() go i elementoVector(i) = nombre endfor do otraVentana with 'Selecciona un nombre',1,1,10,50 @ 1,1 GET Indice PICTURE '@^' FROM elementoVector SIZE 3,30 color w+/g+ default 1 @ 1,34 GET Opcion PICTURE '@*v \!\ < Aceptar;\!\ < Cancelar' SIZE 2,10,1 DEFAULT 1 read if Opcion = 1 elegido = elementoVector(Indice) endif deactivate window otra return elegido function LeeNombre parameter tema DIMENSION elementoVector(reccount()) for i = 1 to reccount() go i elementoVector(i) = nombre endfor do abreVentana with 'Selecciona el nombre a '+tema,1,1,10,50 @ 1,1 GET Indice PICTURE '@^' FROM elementoVector SIZE 3,30 color w+/g+ default 1 @ 1,34 GET Opcion PICTURE '@*v \!\ < Aceptar;\!\ < Cancelar' SIZE 2,10,1 DEFAULT 1 read if Opcion = 1 elegido = elementoVector(Indice) endif deactivate window ver return Indice function leeLegajo parameter tema DIMENSION VectorLegajo(reccount()) for i = 1 to reccount() go i VectorLegajo(i) = Legajo endfor do abreVentana with 'Selecciona legajo',1,1,10,50 @ 1,1 GET Indice PICTURE '@^' FROM VectorLegajo SIZE 3,30 color w+/g+ default 1 @ 1,34 GET Opcion PICTURE '@*v \!\ < Aceptar;\!\ < Cancelar' SIZE 2,10,1 DEFAULT 1 read if Opcion = 1 elegido = VectorLegajo(Indice) endif deactivate window ver return Indice function leeComision parameter tema n = 10 DIMENSION VectorComision(n) for i = 1 to 10 go i VectorComision(i) = i endfor do otraVentana with 'Selecciona Comisión',1,1,10,50 @ 1,1 GET Indice PICTURE '@^' FROM VectorComision SIZE 3,30 color w+/g+ default 1 @ 1,34 GET Opcion PICTURE '@*v \!\ < Aceptar;\!\ < Cancelar' SIZE 2,10,1 DEFAULT 1 read if Opcion = 1 elegido = VectorComision(Indice) endif deactivate window otra return Indice function clave do abreVentana with "Digita CLAVE.!!",3,32,6,50 set color to x,x,x,x clear klave = space(4) intento = 1 do while intento < 4 @ 0,0 say "" get klave read if klave = "oliw" retorno = .t. intento = 4 else retorno = .f. intento = intento + 1 endif enddo if retorno = .f. deactivate window ver =Mensaje('LO LAMENTO..','NO SOS OPERADOR AUTORIZADO..!!!') close procedure clear program close database deactivate window ventana clear quit endif deactivate window ver return retorno function abreVentana parameter rotulo, x1, y1, x2, y2 define window ver from x1, y1 to x2, y2 in window ventana title rotulo system Style 't' fill file Fondo4.bmp close float grow color w+/+gr activate window ver return function otraVentana parameter rotulo, x1, y1, x2, y2 define window otra from x1,y1 to x2,y2 in window ventana title rotulo system mdi minimize zoom style 't' fill file Aros.bmp grow color w+/r activate window otra return function VentanaGrabar parameter rotulo, x1, y1, x2, y2 define window Grabar from x1, y1 to x2, y2 in window ventana title rotulo system close float grow color w+/g activate window Grabar return function VentanaTecla parameter rotulo, largo define window ventana2 from 1,1 to largo,27 in window ventana title rotulo system close float grow color w+/g activate window ventana2 return function tresTeclas parameter rotulo, primera, segunda, tercera do VentanaTecla with rotulo,8.4 @ 0,0 GET opcion FUNCTION '*v \!\ <&primera;\!\ <&segunda;\!\ <&tercera' FONT 'PRESTIGE NEW' STYLE 'B' SIZE 2,28.4,0 DEFAULT 1 Message 'Con el mouse o la letra subrayada, Elije una opción' read read deactivate window ventana2 return opcion function cuatroTeclas parameter rotulo, primera, segunda, tercera, cuarta do VentanaTecla with rotulo,10.6 @ 0,0 GET opcion FUNCTION '*v \!\<&primera;\!\<&segunda;\!\<&tercera;\!\<&cuarta' FONT 'PRESTIGE NEW' STYLE 'B' SIZE 2,28.4,0 DEFAULT 1 Message 'Con el mouse o la letra subrayada, Elije una opción' read deactivate window ventana2 return opcion function cincoTeclas parameter rotulo, primera, segunda, tercera, cuarta, quinta do VentanaTecla with rotulo,12.6 @ 0,0 GET opcion FUNCTION '*v \!\<&primera;\!\<&segunda;\!\<&tercera;\!\<&cuarta;\!\<&quinta' FONT 'PRESTIGE NEW' STYLE 'B' SIZE 2,28.4,0 DEFAULT 1 Message 'Con el mouse o la letra subrayada, Elije una opción' read deactivate window ventana2 return opcion function seisTeclas parameter rotulo, primera, segunda, tercera, cuarta, quinta, sexta do VentanaTecla with rotulo,14.8 @ 0,0 GET opcion FUNCTION '*v \!\<&primera;\!\<&segunda;\!\<&tercera;\!\<&cuarta;\!\<&quinta;\!\<&sexta' FONT 'PRESTIGE NEW' STYLE 'B' SIZE 2,28.4,0 DEFAULT 1 Message 'Con el mouse o la letra subrayada, Elije una opción' read deactivate window ventana2 return opcion function Confirma parameter pregunta do otraVentana with 'CONFIRMA TU OPERACION.!!',2,2,11,75 @ 1,67 say 'Duda.bmp' bitmap retorno=.f. Elige = 1 @ 1,1 say Pregunta FONT 'PRESTIGE',12 STYLE 'B' Color +gr @ 3,1 GET Elige FUNCTION '*BH a:\Ok2.bmp;a:\Volver.ico ' SIZE 4,8,1 default 1 read deactivate window otra if Elige = 1 retorno=.t. endif return retorno function Cuestion parameter pregunta, rotulo do otraVentana with Rotulo,2,2,11,75 @ 1,67 say 'Duda.bmp' bitmap retorno=.f. Elige = 1 @ 1,1 say Pregunta FONT 'PRESTIGE',12 STYLE 'B' Color +gr @ 3,1 GET Elige FUNCTION '*BH a:\Ok2.bmp;a:\Volver.ico ' SIZE 4,8,1 default 1 read deactivate window otra if Elige = 1 retorno=.t. endif return retorno function Mensaje parameter rotulo, mensaje do otraVentana with rotulo,1,1,10,55 @ 1,1 say mensaje FONT 'PRESTIGE',12 STYLE 'B' @ 3,1 say 'Idea.bmp' bitmap @ 3,40 GET Elige FUNCTION '*B a:\Volver.ico ' SIZE 4,10 default 1 read deactivate window otra return
EL OBJETO TE OBEDECE..!!
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
EL OBJETO POSEE METODOS..!!
En el entorno de estos paradigmas, los métodos constituyen la definición del comportamiento de los objetos, cuando estos , sean convocados por el usuario o el propio sistema, mediante los la activacion de los eventos adecuados.
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
LA FUNCION DEVUELVE UN VALOR..
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..!!
Si la montaña no viene a mi... seguro que se me paso la borrachera...!!
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.
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
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
EL PROCEDIMIENTO CUMPLE TU ORDEN..!!
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.
A los 15 años era una bomba... a los 25 una reventada....!!
Un ejemplo típico es el siguiente procedimiento de búsqueda:
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
PARA MANEJAR DATOS LO MEJOR: S Q L..!!!
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.
Si estudiar hace grande al hombre, que estudien los petisos...!!
Por ejemplo:
Imprime.MiEleccion.RowSource =
SELECT DISTINCT comision FROM alumnos ORDER BY alumnos.comision
INTO CURSOR LaComision
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 adjunto..!!
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..!!
Te recomiendo copiar textualmente los siguientes códigos; por el momento no cambies nada, hasta tanto hayas visto su correcto funcionamiento..!!!
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 ********************************
Sigue copiando textualmente los siguientes códigos, que corresponden a las clases que se pegarán sobre el formulario principal del link anterior. Ojito.. No cambies nada..!!! (Por el momento)
************************************************************************* * 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
Te recomiendo además de copiar textualmente los siguientes códigos, que pongas atención a los procedimientos de:
*************************************************************** * 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
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
Puedo guardar el ratón de mi PC en el baúl del coche con el gato del auto.??
Si cuando comí huevos me pateó el hígado, cuando coma hígado... ¿me pateará los huevos?
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
Cuando se hace algo mucho tiempo, se hace cada vez mejor, ¿por qué los taxistas manejan tan mal.??
¿Por qué no hay comida para gatos 'con sabor a ratón'?
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?
¿Por qué los Kamikazes usaban cascos.??
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
¿Los infantes disfrutan la infancia tanto como los adultos el adulterio.??
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.???
¿Debería cortarme las venas o dejármelas largas.??
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
Colega virtual en este link podrás encontrar información sobre la forma más simple, moderna, estandar de concretar tus operaciones de actualización de tus tablas o bases de datos.
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
No hay tonto más molesto que el ingenioso..!!
Si tenes ganas de estudiar, sentate hasta que se te pase..!!!
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"
La verdad es hija del tiempo..!!. No de la autoridad..!!!
El amor como la gripe siempre terminan en la cama..!!!
COMANDO MODIFY QUERY
Abre el Diseñador de consultas para permitirle modificar o crear una consulta.
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.
Qué cuentan las ovejas para poder dormir..!!!
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).
Puedo guardar el ratón de mi PC en el baúl del coche con el gato del auto.??
FROM
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.
Si el congelador de una heladera está a 10 grados bajo
cero, y en el invierno de la Antártida la temperatura ambiente llega a 50 grados bajo cero.
¿No podrían calentarse las personas entrando a los congeladores?
¿Por qué no hay comida para gatos con sabor a ratón.?
INTO
[[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.
¿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??
[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.
¿Por qué la luz negra no es negra?
¿Por qué los Kamikazes usaban cascos.??
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.
Al mundo redondo lo llamamos planeta. Si fuese plano... ¿lo llamaríamos redondeta.??
Si un abogado enloquece... ¿pierde el juicio?
[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.
Los resultados de la consulta aparecerán desordenados si no especifica un orden con ORDER BY.
¿Los infantes disfrutan la infancia tanto como los adultos el adulterio.??
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.
Si el pez nada... ¿la vaca todo..???
¿Qué tiempo verbal es "no debería haber pasado"?... ¿preservativo imperfecto.??
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}
Si la piscina es honda, ¿el mar es Toyota.???
¿Debería cortarme las venas o dejármelas largas.??
MAS EJEMPLOS
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 DATABASE (HOME(2) + 'data\testdata') SELECT * FROM customer; WHERE company LIKE "%-%--%" Escape "-"
Te espero en: wilucha@gmail.com
Esta page está en: www.wilocarpio.com.ar
04/11/2004