Anda di halaman 1dari 114

Manual de Visual Foxpro

Nota: Este manual se encuentra en construccin, se aceptan dudas y sugerencias.



Introduccin VFP
Caractersticas Tcnicas VFP
Tipos de Datos que maneja VFP
Estndares de Programacin
Estructura TestData.dbc
Conociendo la Base de Datos :: Reglas, Procedimientos lmacenados y
Disparadores
Regas de Campo
Despiege de !n"omacin
Regas de Registros
Procedimientos #macenados $%tore Procedures&
Disparadores $Triggers&
E'portar !n"ormacin
!mportar !n"ormacin

Introduccin Programacin !rientada a !"#etos
Creacin de (bjetos
Creacin de Cases
E'porador de )indo*s
E'portacin de !n"ormacin
#gregar Propiedades
#gregar +todos

Introduccin $%&
%E,ECT - %.,
#,TER T#/,E - %.,
CRE#TE C0R%(R - %.,
CR#TE T#/,E - %.,
DE,ETE - %.,
!1%ERT - %.,
0PD#TE - %.,

Introduccin a Vistas &ocales
Creacin de Vistas ,ocaes mediante e #sistente
Creacin de Vistas ,ocaes mediante Cdigo
Ventajas de Vistas
Vistas Parametri2adas
#ctuai2acin de Vistas
+ediante e Dise3ador de Vistas
+ediante Cdigo
Introduccin a Vistas Remotas
Creacin (D/C
Creacin Cone'in
Creacin de Vistas Remotas +ediante e #sistente
Creacin de Vistas Remotas +ediante Cdigo

!ntroduccin %., Pass-T4roug $%PT&
!nstrucciones /sicas
Consuta de !n"ormacin
Ejecucin de Comandos en e %er5idor

'tiler(as
Foro de Discusin VFP
+ostrar E'porador de !nternet en Formas
Funcin %4eE'ec
Re"erencias 6 ,igas de 0tiidad

Javier Leal Pgina 1 de 114
Manual de Visual Foxpro
Introduccin a VFP
Visua Fo' Pro es una 4erramienta que desde sus inicios naci para manejar
datos7 contiene una gran cantidad de instrucciones para e manejo de os datos que
programaras en otros enguajes es una abor pesada.

,os inicios de esta 4erramienta se remontan a a3o 89:; en un sistema amado
Retrie)e e cu "ue comerciai2ado por *ym$+are Corporation7 este sistema "ue
utii2ado por ,et Propulsion &a"oratory $<P,& en Pasadena7 Cai"ornia.

# "inaes de os :; ,P& asigno a ,e" &ong7 un empeado de a empresa7 a tarea
de escribir un programa que 4iciera as mismas operaciones que Retrie5e 4aca. En
89=> <eb ,ong desarro un programa de manejo de arc4i5os amado ,P&DI$ $<et
Propusion ,aborator6 Dispa6 !n"ormation %6stem&7 este programa "u escrito en
F(RT#17 corra en una mquina 01!V#C 88;?.

<P,D!% "ue e precursor de D/#%E7 ,e" &ong junto con -ayne Ratli..
tradujeron D/ase en D/ase !!7 una 5ersin que corra en computadoras personaes7
todo esto en enguaje ensambador 6 "ormaron a empresa s+ton/*ate.

Posteriormente surgieron D/ase 6 Cipper7 estas 4erramientas son e'ceentes
para a manipuacin de Datos7 pero como todo7 se debe de e5oucionar.

0icroso.t adquiri Visua Fo' Pro de s+ton/*ate7 este producto estaba
incuido en e paquete Visual Estudio 4asta a 5ersin :7 de a 5ersin = en
adeante VFP se consigue como producto independiente7 esto 4a creado 5arios
mitos sobre e "uturo de VFP7 si 5en que un producto es @sacado@ de a %uite de
enguajes7 o mas gico es que sea porque e producto se 5a a descontinuar.

,a reaidad es mu6 distinta7 VFP se an2 como producto independiente por
5arias ra2ones como por ejempo7 e tiempo de iberacin7 e costo 6 e poder que
tiene con su base de datos integrada.

VFP es una 4erramienta integra con un gran potencia7 su motor de datos
integrado es e'ceente7 e tiempo de respuesta increbe7 es una 4erramienta
orientada a objetos7 puede ser e /acA End7 +idde )are7 Front End o as tres de un
sistema. Pude ser un Ciente 6 %er5idor C(+7 %e puede trabajar en !nternet 6
muc4as cosas mas. 1o te morti"iques si a nomencatura no es entendibe7 segBn
5a6amos a5an2ando en e ibro 5eremos as de"iniciones de cada una de eas.

E conocer e "uncionamiento de VFP te 5a a permitir reai2ar apicaciones
poderosas en un apso de tiempo mu6 peque3o7 todo est en a imaginacin que
tengas7 puedes 4acer desde un simpe catogo con atas7 bajas7 cambios7 consutas
4asta sistemas en !nternet7 #picaciones Cordas o Degadas $Fat Cient D T4in
Cient&7 todo esto con un soo producto.

VFP cuenta con una comunidad 5irtua en !nternet7 a cua se 5er mas adeante7
esta comunidad est "ormada por gente de 5arios pases que se juntan con a Bnica
"inaidad de compartir sus conocimientos 6 a6udarse mutuamente7 reamente es un
gran apo6o en e momento de que ests desarroando apicaciones.

Javier Leal Pgina 2 de 114
Manual de Visual Foxpro
Caractersticas Tcnicas VFP...
#s como cuando se compra un carro es importante conocer as caractersticas
tcnicas de 5e4cuo7 es importante conocer as caractersticas de VFP para conocer
sus capacidad 6 imitaciones7 esta sonE

*a"las e 1ndices.
Cantidad m'ima de registros por taba 8 /in
Tama3o m'imo de taba F Cigab6tes
Cantidad m'ima de caracteres por
registro
:G7G;;
Cantidad m'ima de campos por taba FGG
Cantidad m'ima de tabas abiertas a
mismo tiempo
FGG
Cantidad m'ima de caracteres por
campo
FGH
Cantidad m'ima de b6tes por a5e
ndice no-campacto
8;;
Cantidad m'ima de b6tes por a5e
ndice campacto
FH;
Cantidad m'ima de ndices abiertos por
taba
!imitado
Cantidad m'ima de ndices abiertos en
todas as reas de trabajo
!imitado
Cantidad m'ima de reaciones !imitado
Cantidad m'ima de e'presiones
reacionaes
!imitado

Caracter(sta de Campos
Cantidad m'ima de caracteres por
campo
FGH
Cantidad m'ima de campos numricos 6
"otantes
F;
Cantidad m'ima de nombre de campos
en tabas ibres
8;
Cantidad m'ima de nombre de campos
en tabas asignadas a una base de datos
8F?
Vaor mnimo de un entero -F78H=7H?>7:H=
Vaor m'imo de un entero IF78H=7H?>7:H=
Cantidad de dgitos de precision en
ccuos
8:

Varia"les y rreglos
Javier Leal Pgina 3 de 114
Manual de Visual Foxpro
Cantidad de 5ariabes por omisin 87;FH
Cantidad m'ima de 5ariabes :G7;;;
Cantidad m'ima de arregos :G7;;;
Cantidad m'ima de eementos por
arrego
:G7;;;

Programas y Procedimientos
Cantidad m'ima de ineas en programas !imitado
Tama3o m'imo de moduo en programa
compiado
:HJ
Cantidad m'ima de procedimientos por
arc4i5o
!imitado
Cantidad m'ima de amadas D(
anidados
8F?
Cantidad m'ima de amadas RE#D
anidadas
G
Cantidad m'ima de amadas de
comandos estructurados
>?H
Cantidad m'ima de parmetros en5iados F=
Cantidad m'ima de transacciones G

Reportes
Cantidad m'ima de objetos !imitado
,argo m'imo F; pugadas
Cantidad m'ima de ni5ees de grupos 8F?
Cantidad m'ima de caracteres por
5ariabes
FGG

!tras capacidades
Cantidad m'ima de 5entanas abiertas !imitado
Cantidad m'ima de 5entanas /ro*se
abiertas
FGG
Cantidad m'ima de caracteres por
5ariabe
8:7===78?H
Cantidad m'ima de caracteres por nea
de comando
?789F
Cantidad m'ima de caracteres por
etiqueta en reporte
FGF
Cantidad m'ima de caracteres por nea
de +acrosustitucin
?789F
Cantidad m'ima de arc4i5os abiertos ,imitado por sistema
Cantidad m'ima de campos permitidos
en causua %., %E,ECT
FGG
Javier Leal Pgina 4 de 114
Manual de Visual Foxpro

Nota:
&as caracter(sticas dependen de espacio y memoria disponi"les en el
e2uipo

*ipos de Datos en VFP...
,os tipos de datos que +aneja VFP sonE
*ipo de
Dato
Represe
ntacin
Descripcin *ama3o Rango
C4aracter C Cuaquier te'to 8 b6te por caracter
4asta FGH
Cuaquier Te'to
Currenc6 4 Cantidades +onetarias ? b6tes - 9FF>>=F;>:?GH==.G?;= a 9FF>>=F;>:?GH==.G?;=
Date D Fec4as "ormadas por +es7
#3o 6 Da
? b6tes KL;;;8-;8-;8M78o Enero DC - KL9999-8F->8M7
Diciembre >8 9999 DC
DateTime * Fec4as "ormadas por +es7
#3o7 Da7 Nora7 +inutos 6
%egundos
? b6tes KL;;;8-;8-;8M78o Enero DC - KL9999-8F->8M7
Diciembre >8 9999 DC mas ;;E;;E;; a.m. a 88EG9EG9
p.m.
,ogica & Vaores booeanos
$Verdadero D Faso&
8 b6te True $.T.& or Fase $.F.&
1umeric N Enteros o Fracciones ? b6tes en memoriaO
8 a F; b6tes en taba
- .9999999999EI89 to .9999999999EIF;
Doube B
1Bmero con precisin de
punto "otante
? b6tes ID-H.9H;:G:HG?H8FH=E->FH a ID-?.9??H:G:=H>88GE>;=
Foat F !gua que 1umrico
? b6tes en memoriaO
8 a F; b6tes en taba
- .9999999999EI89 a .9999999999EIF;
Cenera 5
Nacer re"erencia a un
objeto (,E
H b6tes en taba ,imitado a a memoria disponibe
!nteger I Vaores enteros H b6tes -F8H=H?>:H= a F8H=H?>:H=
+emo 0
Nace re"erencia a un bocA
de datos
H b6tes en taba ,imitado a a memoria disponibe
C4aracter
$/inar6&
C
Cuaquier caracter que se
quiere mantener sin
cambiar cdigos de pginas
8 b6te por caracter
4asta FGH
Cuaquier caracter
+emo
$/inar6&
0
Cuaquier campo memo
que se quiere mantener sin
cambiar cdigos de pginas
H b6tes en taba
,imitado a a memoria disponibe




Javier Leal Pgina 5 de 114
Manual de Visual Foxpro
Est6ndares de Programacin...
1o te 4a sucedido que despus de escribir un programa 6 a cabo de tiempo e
tienes que dar mantenimiento no te acuerdas de signi"icado de as 5ariabes7 ni de
que tipo son.. o peor aBn7 tienes que 4acere un cambio a un sistema que aguien
mas program 6 oo444 sorpresa.. no e entiendes ni pi de o que 4i2o.. no puedes
o bataas para seguir su gica7 e acance de as 5ariabes no o conoces7 sern..
PocaesQ7 PpBbicasQ7 Ppri5adasQ7 Pes un objetoQ7 todo un s4o*.. bueno... eso no 5a
a cambiar7 pero si utii2as os estndares de programacin te 5as a a4orrar muc4o7
muc4o trabajo.

PPPPor qu es importante programar con os estndares de programacin de
+icroso"tQQQ... Por una sencia ra2n.. no ests soo en e uni5erso 6 es importante
todos ponernos de acuerdo7 +icroso"t sugiere utii2ar a nomencatura 78ngara..
PPPqu es estoQQQ "ci...

%upongamos que queremos 4acer un programa que cuente de 8 a 8;..
normamente como se 4ace.. se crea una 5ariabe 6 se 5a despegando e
resutado7 ago as como estoE

Contador R 8
D( )N!,E Contador S 8;
Q Contador
Contador R Contador I 8
E1DD(

Con a notacin NBngara as 5ariabes 5ienen precedidas por dos etras7 a
primera etra indica e alcance de a 5ariabe 6 a segunda etra e tipo de 5ariabe
que es.. os acances pueden

E lcance de a Variabe puede serE

lcance &etra
,oca
Pri5ada p
Coba g
Parmetro t

T e *ipo de 5ariabe puede serE

*ipo &etra
#rrego a
Caracter c
+oneda 6
Fec4a d
Fec4a 6 Nora t
Javier Leal Pgina 6 de 114
Manual de Visual Foxpro
Dobe b
Fotante "
,gico
1umrico n
(bjeto o
Desconocido u

De esta "orma7 en e ejempo anterior tenemos a 5ariabe @Contador@7
utii2ando a notacin 4Bngara quedara de a siguiente manera $%uponiendo que
son 5ariabes ocaes&E

,nUContador R 8
D( )N!,E ,nUContador S 8;
Q ,nUContador
,nUContador R ,nUContador I 8
E1DD(

P%impe 6 e"iciente noQ de esta manera cuaquier otro desarroador a 5er este
cdigo7 entiende que a 5ariabes utii2adas es de tipo numrico 6 oca7 de esta
"orma se puede tener e mismo nombre de una 5ariabe pero de distintos tipos 6
alcance distinto7 por ejempo en as siguientes 5ariabesE

,aU+es #rrego $#rra6& con os nombres de os meses
,nU+es 1Bmero de +es o +eses
,cU+es 1ombre de +es

(A7 (A.. esto "unciona bien.. Ppero que 4a6 de os objetosQ Pno que VFP es un
enguaje (rientado a (bjetosQ.. bueno7 a 1otacin NBngara tambin se utii2a en
os objetos7 pero a di"erencia es que e objeto 5iene precedido por tres etras7 a
cua indica e objeto a que se e esta 4aciendo re"erencia.

!"#eto Pre.i#o !"#eto Pre.i#o
#cti5eDoc acd ,abe b
C4ecA/o' c4A ,ine in
Combo/o' cbo ,ist/o' st
Command/utton cmd (,E/oundContro ob
CommandCroup cmg (,E oe
Container cnt (ption/utton opt
Contro ct (ptionCroup opg
Custom Sde"inido-por-
usuarioV
Page pag
Edit/o' edt PageFrame pg"
Form "rm ProjectNooA prj
Form%et "rs %eparator sep
Crid grd %4ape s4p
Coumn grc %pinner spn
Neader gr4 Te't/o' t't
N6per,inA 4p Timer tmr
!mage img tbr tbr
T siguiendo a misma gica7 e nombre de una 5ariabe puede ser e mismo 6 e
pre"ijo distinto e indicar objetos distintos7 por ejempoE
!"#eto Comentario
Javier Leal Pgina 7 de 114
Manual de Visual Foxpro
T'tUCiudad
Te't/o' amado
Ciudad
CboUCiudad
Combo/o' con
Ciudades
,stUCiudad
,ist/o' con
Ciudades

# utii2ar a notacin NBngara estamos utii2ando una nomencatura estndar
que nos permite eer mas "cimente nuestro cdigo.


Diagrama Entidad Relacin *estData...

# instaar VFP se insta una base de datos de prueba amada @TestData.dbc@7
esta base de datos es sobre ordenes de compra7 por o genera est ocai2ada enE

C:9rc+i)os de programa90icroso.t Visual Fo:Pro
;9$amples9Data9*estData.d"c

Esta base de datos se utii2ar en e curso7 por o que es importante conocer as
tabas 6 estructura que "orman esta base de datos. TestData est "ormada por
cinco tabas7 estas sonE

*a"la Descripcin
Customer !n"ormacin genera de os cientes
Empo6ee !n"ormacin genera de os empeados
(rders (rdenes de compra 4ec4as por os cientes
(rd!tems Detae de as ordenes de compra
Products Catogo de productos que se 5enden

E diagrama Entidad-Reacin en donde se muestran as tabas7 os campos que
tiene cada una7 as como as reaciones que 4a6 entre eas es a siguienteE

Javier Leal Pgina 8 de 114
Manual de Visual Foxpro

Fcimente7 este diagrama puede ser edo $de !2quierda a derec4a& comoE 0n
ciente 4ace una o muc4as compras7 un Empeado 4ace una o muc4as 5entas7 una
(rden de Compra tiene una o muc4as partidas 6 una partida tiene un producto 6 un
producto puede estar en una o muc4as partidas.


Conociendo la Base de Datos de Visual Fo: Pro :: Reglas, Procedimientos
lmacenados y Disparadores.
Introduccin.
Introduccin.

0na de as grandes 5entajas con as cuaes cuenta VFP es su /ase de Datos7 ,as
/ase de Datos nos permiten manejar as tabas de una mejor manera7 no 4a6 que
con"undir una taba con una /ase de Datos. en VFP as tabas tienen e'tensin .d".
mientras que a base de datos cuentan con a e'tensin .d"c.

#gunas de as Ventajas que tenemos a utii2ar una /ase de Datos en VFP sonE
+anejar nombres argos en Tabas 6 en Campos
Permite 5aidar a in"ormacin que ingresa a ni5e campo o a ni5e registro
Estabecer 5aores predeterminados en os campos
Permite +apear Campos a nuestra ibrera de Cases
De"inicin de Vistas ,ocaes7 Vistas Remotas 6 Cone'iones
De"inir Procedimientos #macenados $%tore Procedures&
Javier Leal Pgina 9 de 114
Manual de Visual Foxpro
+anejo de Comentarios a ni5e Campos 6 a ni5e tabas
De"inicin de Wndices
Disparadores $Triggers&
!ntegridad Re"erencia
Reaciones Persistentes entre tabas 6 /ase de Datos
Estabecer acciones en E5entos de a /ase de Datos $VFP = 6 superior&.
etc7 etc7 etc.
E primer paso que 5amos a
4acer es crear una peque3a
/ase de Datos. Para 4acer
esto7 en nuestro pro6ecto
seeccionamos a pesta3a Data
6 Cic en Ne<7 seeccionamos
Ne< Data"ase e indicamos e
nombre de nuestra base datos7
en este ejempo7 a
amaremos
0i=Base=De=Datos.



(A7 a /ase de Datos
@0i=Base=De=Datos@ 6a "ue creada7 si
obser5amos bien7 se puede obser5ar que a
base de datos est "ormada por G
eementosE
*a"las $Tables&
Vistas &ocales $Local Views&
Vistas Remotas $Remote Views&
Cone:iones $Connections&
Procedimientos lmacenados
$Stored Procedures&
como se muestra en a "igura de a
derec4a.


Javier Leal Pgina 1 de 114
Manual de Visual Foxpro
Como dijo <acA e
Destripador7 5amonos
por partes. Vamos a
empe2ar creando una
taba7 %impemente nos
posicionamos en e
eemento *a"les -V
Ne< -V Ne< *a"le7 e
ingresamos e nombre
de a taba7 en este
caso7 Cliente 6 nos
aparece e Dise3ador
de Tabas.
#4ora empe2amos
ingresando os nombres
de os campos7 os
tipos7 e argo7 as
decimaes7 si es dice 6
si acepta 5aores nuos.
En este ejempo
5amos a de"inir a
siguiente estructuraE
!d de Ciente
$nId_Cliente&
1ombre de
Ciente
$cNombre&
#peido Paterno
$cApellido_Pater
no&
Direccin
$cDireccion&
Casado
$lCasado&
1ombre de
Cn6uge
$cConyuge&
,a idea de esta
taba es tener un
registro bsico de
nuestros cientes 6 de
nombre de cn6uge en
caso que este casado.
Como se obser5a7
podemos utii2ar
nombres de campos
argos
$cpellido=Paterno&
sin ningBn probema.

Javier Leal Pgina 11 de 114
Manual de Visual Foxpro

#qu se e'picaran cmo se estabecen as regas de campo 6 de registro7 e
despiege de os datos7 os procedimientos amacenados $%tore Procedures& 6 os
disparadores $Triggers&.
Validacin por Campo >Field Validation?
(A7 a4ora si se obser5a bien en e dise3ador de taba7 en a parte in"erior
derec4a 4a6 una seccin amada Validacin Campo $ield Validation& aqu
indicamos as regas que debe de cumpir un dato para ser ingresado en un
campo. Esta seccin est "ormada por tres eementosE

Rega $Rule&
+ensaje $!essage&
Vaor por (misin
$De"ault Value&
#qu especi"icamos as
regas a segir para ingresar
un dato7 si no cumpe con a
condicin indicada
simpemente no se permite
ingresar e dato 6 se
muestra un mensaje de
error7 de esta "orma
estamos empe2ando a
proteger nuestra base de
datos7 con a in"ormacin
que entra.




Vamos a empe2ar indicando a siguiente rega de Vaidacin de Campo. E !d de
Ciente $nId_Cliente& no puede estar 5aco 6 debe ser un nBmero ma6or a cero.
PCmo se 4ara esa 5aidacin por cdigoQ %impe7 con e siguiente cdigoE

N!*>E0P*4>nId=Cliente?? ND nId=Cliente @ A

Na6 que tomar en cuenta que a e'presin que se ingrese en una rega debe de
dar un resutado &gico7 o cumpe con a condicin o no cumpe con a condicin7
as de simpe. Esta e'presin es coocada en a Rega.

#4ora bien7 Pqu pasa si un dato no se cumpe a rega7 que mensaje apareceQ
bueno7 para esto e'iste e campo +ensaje $!essage&7 a4 indicamos e mensaje a
mostrar cuando un dato no cumpe con una instruccin. E dato a mostrar debe de
ser de tipo Caracter. De esta "orma7 podemos utii2ar e siguiente mensajeE

BIngrese un N8mero de Cliente V6lidoB

Javier Leal Pgina 12 de 114
Manual de Visual Foxpro
Nota: E 5aor de Campo +ensaje debe de ser de tipo Caracter7 sin embargo7 es posibe utii2ar "unciones
que regresen un 5aor de tipo caracter7 como por ejempo IIF$Condicion7@+ensaje 8@7@+ensaje F@&.

Por Btimo7 podemos indicar cu 5a a ser e 5aor por omisin en un campo7 este
5aor puede ser un nBmero asignado por nosotros7 asignado por una "uncin que
de"inamos o una "uncin propia de VFP7 por ejempo7 si tenemos un campo "ec4a
amado Fec+a=Ingreso=Pedido podemos poner como 5aor predeterminado a
"ec4a de sistema con D*E>?.

Para este campo e 5aor predeterminado 5a a ser C.
#4ora bien7 en a parte in"erior podemos ingresar un
comentario sobre e campo7 esto es soamente para
nuestro uso.
!ngresando a Rega de Vaidacin7 e +ensaje7 e
Vaor por omisin 6 un comentario quedara como en a
"igura de a derec4a.
#4ora simpemente grabamos a taba 6 istoX 6a
tenemos nuestra primera rega de campo7 e siguiente
paso es probara.

#4ora 4acemos o siguiente7 abrimos nuestra taba $Con un /ro*se& 6 en e +enB
%eeccionamos Vie<Dppend 0ode7 a 4acer esto podemos obser5ar que se
inserta un registro7 en e cua en e Campo nId=Cliente tiene como 5aor
predeterminado e 5aor de uno. #qu 5emos que se cumpi correctamente e Vaor
por omisin.

Cambiamos e 5aor de campo nId=Cliente de uno a cero e intentamos
pasarnos a siguiente campo7 Pqu sucedeQ. Como e 5aor cero no cumpe con a
rega de 5aidacin de campo7 a taba no permite que se ingrese e dato 6 aparece
e +ensaje de error que 4abamos especi"icado.

Este mensaje nos da tres
opciones7 (A7 Re5ert o Nep.
%i seeccionamos (J nos
regresa a campo 6 nos deja e
5aor que ingresamos $cero&7
si seeccionamos Re5ert nos
regresa a campo con e 5aor
que tena antes que
ingresaramos e cero $uno&.
De a misma "orma7 si
ingresamos un nBmero
negati5o se 5ioa a rega 6
nos aparece e mismo error.

De esta .orma
compro"amos 2ue se
cumpli la regla de
Validacin de Campo, 2ue
apareci el mensa#e 2ue
especi.icamos y el )alor
por omisin.

Javier Leal Pgina 13 de 114
Manual de Visual Foxpro
Despliege de In.ormacin >Display?
Nasta este punto se mostr como ingresar una
Validacin de Campo 7 a4ora 5amos a 5er como se
despiegan os datos7 a a i2quierda de Vaidacin de
Campo 4a6 una seccin amada Despliege $Display&7
en esta parte indicamos cmo se 5an a capturar 6
mostrar os datos. Esta seccin est "ormada por tres
eementosE
Formato $ormat&
+scara de Entrada $Input !as#&
+ensaje $Caption&

En Caption especi"icamos e mensaje que aparecer en e campo posicionado a
momento de mostrar a taba7 e dato debe de ser caracter7 en Input 0asD
indicamos cmo queremos que os datos sean capturados7 6 por Btimo en Format
indicamos cmo queremos que sea despegado e dato.

Nota: Para mas in"ormacin consutar a Propiedad Format e Input0asD de manua VFP.

Para este ejempo en Caption ingresamos Clave
del Cliente7 en Input 0asD 9997999 6 en Format Y.
Crabamos os cambios7 6 abrimos a taba. ,o primero
que obser5amos es que e Campo nId_Cliente tiene
como encabe2ado @Ca5e de Ciente@7 por o tanto
Caption "uncion bien.
#4ora agregamos un registro $Vie<Eppend
0ode&. P.u sucedeQ e nBmero 5iene precedido
por un signo de pesos 6a que eso "u o que
especi"icamos en Format7 a4ora ingrese e
siguiente nBmero 8FG;; 6 5er como a momento
de que e nBmero es ingresado se tiene una
mscara de entrada7 en otras paabras en 5e2 de
5er $%&'' 5emos ($%)&'' a Propiedad Input
0asD "uncion.

Nasta a4ora 4emos 5isto como 4acer a Vaidacin por Campo7 Cmo poner
comentarios por campo 6 e Despiege de os datos7 4a6 que recacar que cada una
de esto a"ecta solamente al campo sobre e cua estamos posicionado7 as que
debemos de especi"icar as regas en os campos que se quieran.

Despliege de In.ormacin >Display?
Javier Leal Pgina 14 de 114
Manual de Visual Foxpro
Nasta este punto se mostr como ingresar una
Validacin de Campo 7 a4ora 5amos a 5er como se
despiegan os datos7 a a i2quierda de Vaidacin de
Campo 4a6 una seccin amada Despliege $Display&7
en esta parte indicamos cmo se 5an a capturar 6
mostrar os datos. Esta seccin est "ormada por tres
eementosE
Formato $ormat&
+scara de Entrada $Input !as#&
+ensaje $Caption&

En Caption especi"icamos e mensaje que aparecer en e campo posicionado a
momento de mostrar a taba7 e dato debe de ser caracter7 en Input 0asD
indicamos cmo queremos que os datos sean capturados7 6 por Btimo en Format
indicamos cmo queremos que sea despegado e dato.

Nota: Para mas in"ormacin consutar a Propiedad Format e Input0asD de manua VFP.

Para este ejempo en Caption ingresamos Clave
del Cliente7 en Input 0asD 9997999 6 en Format Y.
Crabamos os cambios7 6 abrimos a taba. ,o primero
que obser5amos es que e Campo nId_Cliente tiene
como encabe2ado @Ca5e de Ciente@7 por o tanto
Caption "uncion bien.
#4ora agregamos un registro $Vie<Eppend
0ode&. P.u sucedeQ e nBmero 5iene precedido
por un signo de pesos 6a que eso "u o que
especi"icamos en Format7 a4ora ingrese e
siguiente nBmero 8FG;; 6 5er como a momento
de que e nBmero es ingresado se tiene una
mscara de entrada7 en otras paabras en 5e2 de
5er $%&'' 5emos ($%)&'' a Propiedad Input
0asD "uncion.

Nasta a4ora 4emos 5isto como 4acer a Vaidacin por Campo7 Cmo poner
comentarios por campo 6 e Despiege de os datos7 4a6 que recacar que cada una
de esto a"ecta solamente al campo sobre e cua estamos posicionado7 as que
debemos de especi"icar as regas en os campos que se quieran.

Validacin por Registro >Record Validation?
(A7 con o anterior soemente 4emos 5aidado que os datos que entran a un
campo sean correctos7 pero 4a6 ocasiones en as cuaes es necesario 5aidar todo e
registro7 Por poner un ejempo7 en a taba de ciente que creamos 4a6 un campo
amado lCasado7 e cua es de tipo gico 6 un campo amado cConyuge en e
cua esta e nombre de Cn6uge en caso que este casado.

Javier Leal Pgina 15 de 114
Manual de Visual Foxpro

Vamos a estabecer a siguiente
rega de registroE @Si el cliente
est casado, se debe de tener
el nombre del cnyuge@7 as de
simpe. PPCmo 4aramos esa
5aidacin en e Dise3ador de
TabasQQ mu6 "ci7 en a pesta3a
@*a"le@ 4a6 una seccin amada
@Record Validation@ a cua tiene
dos eementosE
Rega $Rue&
+ensaje $+essage&
#qu es donde indicamos a
rega 6 e mensaje que aparecer
a momento que un registro 5ioe
a condicin7 es mu6 parecido a a
5aidacin por campo.

De a misma "orma podemos
ingresar un comentario de a taba
e cua es soamente para nuestro
uso7 re"erencia7 etc.

#dems7 podemos 5er mas
in"ormacin sobre a taba7 e
nombre7 a base de datos a a que
pertenece7 a cantidad de
registros7 de campos 6 a
ubicacin "sica de arc4i5o.


PCu sera a instruccin para esta rega de
registroQ podemos utii2ar os siguienteE

IIF>lcasado,N!*>E0P*4>cconyuge??,.*.?

En caso que se 5ioe a rega7 que muestre e
siguiente mensajeE BIngrese el nom"re del
CnyugeB. Como se coment7 e resutado de una
rega debe de ser un 5aor gico7 en a instruccin en
caso que un ciente no sea casado se regresa
5erdadero7 en otras paabras7 cumpe con a rega.

#4ora simpemente
probamos a rega7 abrimos a
taba e ingresamos un nue5o
registro7 indicamos que e
ciente est casado7 dejamos en
banco e campo Cn6uge e
intentamos pasar a otro
registro7 Pqu sucedeQ como se
5ioa a rega de registro no se
puede grabar e registro 6 nos
Javier Leal Pgina 16 de 114
Manual de Visual Foxpro
aparece e mensaje de error
que especi"icamos.
De esta "orma estamos
protegiendo nuestra taba7
estas opciones son mu6
poderosas 6 de gran a6uda en
e dise3o de nuestras base de
datos.

Procedimientos lmacenados >$tore Procedures?
Ta se 5i como 4acer as 5aidaciones a ni5e campo 6 registro7 a4ora bien7 a
base de datos cuenta con Procedimientos #macenados.. Pqu es esto 6 para qu
nos sir5enQ bien7 supongamos que para 5aidar un campo mandamos amar a
%iguiente FuncionE ValidaCampo$lcCampo& a cua simpemente regresa .*. o .F.
as de simpe.

P.ue es o que tenemos que 4acer para que nuestro campo mande amar a esta
"uncinQ simpemente7 a inicio de nuestro programa o mandamos amar con $E*
PR!CED'RE *! @CEZ...Z+isUProcedimientos.prg@ DDI*IVE por poner un
ejempo. Esto "unciona siempre 6 cuando estabe2camos a instruccin $E*
PR!CED'RE *!.

P.u sucede si se abre a base de datos sin 4aber cargado os procedimientos a
os cuaes 4ace re"erenciaQ Pues tendramos errores 6 tronara a base de datos 6a
que no encuentra a "uncin o procedimiento.

#4ora bien.. Pque sucede si una base de datos est siendo utii2ada en 8;
pro6ectosQ.. Pues simpemente en os 8; Pro6ectos debemos de 4acer re"erencia a
arc4i5o de procedimientos.. que no se nos o5ide porque tendramos probemas.

/ueno7 para a6udarnos7 e'isten os Procedimientos Almacenados7 estos son
Procedimientos 6 Funciones como as que 4emos utii2ado7 a Bnica di"erencia es
que en 5e2 de que se graben en un arc4i5o .prg se graban dentro de a base de
datosX Con esto nos e5itamos e tener que poner en nuestros pro6ectos $E*
PR!CED'RE *! 6 si se abre a base de datos7 se cargan os procedimientos
amacenados7 tan simpe 6 poderoso.

En e ejempo de 5aidacin de Campo de !d de Ciente de ejempo anterior
utii2amos a siguiente instruccinE

N!*>E0P*4>nId=Cliente?? ND nId=Cliente @ A

Esta a coocamos en e campo de Rega de Campo.. Vamos a 4acer o mismo
pero con Procedimientos #macenados. En a /ase de datos7 4a6 un eemento
amado Procedimientos #macenados $%tored Procedures&7 se posiciona en este
eemento 6 se da cicA en nue5o7 a 4acer esto se abre e editor de Procedimientos
#macenados como se muestra en a "igura. #qu es donde creamos nuestros
procedimientos.

Javier Leal Pgina 17 de 114
Manual de Visual Foxpro
!nsertamos e siguiente
cdigoE
!! Valida"i#n del $%&ero de
'lien(e) regresa *+* "uando
!! el n%&ero sea &a,or a
"ero , no es(e va"-o*
PR!CED'RE Vaida!dCiente
&PR0E*ER
pnU!dUCiente
IF
1(T$E0P*4$pnU!dUCiente&&
#1D pnU!dUCiente V ;
RE*'RN .T.
E&$E
RE*'RN .F.
ENDIF
ENDPR!C

.uedara de a %iguiente manera.. %impemente se graba.


Per"ecto7 6a se cre nuestro procedimiento amacenado amado
ValidaIdCliente7 a4ora simpemente o mandamos amar7 modi"icamos a
estructura de a taba Cliente7 se posiciona en e campo nId_Cliente 6 en a rega de
Campo estabecemos o siguienteE

ValidaIdCliente>nId=Cliente?

P.u sucedeQ si intentamos grabar un nBmero de ciente 5aco o menor a cero7
a momento de sair de campo se manda amar a "uncin ValidaIdCliente 6 esta
regresar .F.7 por o tanto no permitir ingresar e dato. Esto es de gran a6uda
cuando as 5aidaciones a 4acer son compejas 6 requieren de 5arios procesos.

Podemos 4acer tantas 5aidaciones 6 procedimientos como se quieran 6 todos
quedarn grabados en a base de datos7 si F7 > o ms pro6ectos utii2an a misma
Javier Leal Pgina 18 de 114
Manual de Visual Foxpro
base de datos7 esta 6a tiene os procedimientos necesarios7 no 4a6 que preocuparse
por mandar amar as Funciones 6 Procedimientos con $E* PR!CED'RE *!.

Disparadores >*riggers?
0na de as grandes caractersticas con a cua cuentan as bases de datos son os
disparadores o triggers7 os disparadores son acciones que se @disparan@ cuando se
crea un registro $insert&7 se actuai2a un registro $update& o se eimina un registro
$delete&.

Nasta a4ora 4emos 5isto como proteger os datos que entran a nuestra taba 6
mandar amadar procedimientos 6 "unciones amacenadas.. pero.. aBn as nuestra
base de datos puede mostrar inconsistencias o no cumpir con as regas de negocio
de sistema.. aqu 4a6 5arios ejemposE

8& %uponga que en una base de datos 4a6 una taba de Cliente 6 otras de
Cuentas por Co"rar >C:C?7 en a taba de Ciente e'iste e campo nId=Cliente e
cua ob5iamente contiene a ca5e de ciente 6 en a taba de Cuentas por Cobrar
tambin se tiene ese campo como a5e "oranea o de re"erencia. como se muestra
en e siguiente diagramaE

En este diagrama podemos
obser5ar como es posibe que un
ciente tenga una o muc4as cuentas
por cobrar

#4ora bien7 suponga que entra un usuario ma intencionado a nuestra base de
datos 6 eimina a un ciente que tiene cuentas por cobrar.. P.u sucedeQ Pues para
empe2ar 6a 4a6 inconsistencia de datos7 porque 5an a e'istir cuentas por cobrar
que apuntan a un nBmero de ciente que no e'iste7 segundo.. 6a perdimos dinero7
Pa quin se o cobramosQ Po nos o cobranQ.

(tro ejempo utii2ando as mismas tabas.. Pqu sucede si e mismo usuario ma
intencionado ingresa cuentas por cobrar con nBmeros de cientes que no e'istenQ
Pues tambin 4a6 inconsistencia porque as Cuentas por Cobrar apuntan a cientes
que no e'isten.

F& %uponga que tiene una taba de <e"es 6 una de empeados con a estructura de a
siguiente "igura7 una de as regas es a siguienteE 0n empeado no puede ganar
igua o mas que su <e"e.

#Bn 6 que esto o maneje por
cdigo en a "orma de captura7 Pque
sucede si e mismo usuario ma
intencionado entra a a base de datos
6 aumenta e suedo de ciertos
empeados ms de o que ganan sus
superioresQ.. 1o 4a6 inconsistencias
de datos pero si 4a6 5ioaciones a as
reglas del negocio.

Javier Leal Pgina 19 de 114
Manual de Visual Foxpro
Estos son soo unos pocos ejempos para mostrar como nuestra base de datos
puede ser 5unerabe7 para e5itar esto e'isten os Disparadores7 en e primer
ejempo se pudo 4aber e5itado que se borrara un ciente si es que tiene cuentas por
cobrar 6 e5itar que se grabara una cuenta por cobrar de un ciente que no e'iste.
De a misma "orma en ejempo de <e"es 6 empeados se pudo e5itar que se grabara
un cambio si e suedo es ma6or que e de su superior.

Vamos a 5er este peque3o ejempo para 5er como "uncionan 6 cuando se
mandan amar. Creamos tres procedimientos amacenados amadosE $P=Insert7
$P='pdate 6 $P=Delete7 estos soamente muestran una 5entana indicando su
nombre7 ago as como estoE

PR!CED'RE
%PU!nsert
-I*
-IND!-
@%tore
Procedure
!nsert@
ENDPR!C
PR!CED'RE
%PU0pdate
-I*
-IND!-
@%tore
Procedure
0pdate@
ENDPR!C
PR!CED'RE
%PUDeete
-I*
-IND!-
@%tore
Procedure
Deete@
ENDPR!C

(A7 6a creamos os Procedimientos #macenados7 a4ora editamos a taba Ciente
6 nos posicionamos en a pesta3a @*a"le@7 en a parte in"erior derec4a 4a6 una
seccin amada @*riggers@7 Como se puede obser5ar 4a6 tres opciones de
Triggers7 a insertar7 a actuai2ar 6 a eiminar un registro7 aqu es donde
mandamos amar nuestros procedimientos7 quedando de a siguiente "ormaE

Javier Leal Pgina 2 de 114
Manual de Visual Foxpro
En e disparador Insertar
mandamos amar e
procedimiento $P=Insert>?

En e disparador ctualiFar
mandamos amar e
procedimiento $P='pdate>?

En e disparador Eliminar
mandamos amar e
procedimiento $P=Delete>?


Crabamos os cambios7 abrimos a taba e ingresamos un ciente7 Pqu sucede a
momento de grabaroQ primero se 5eri"ican as regas de campo7 as regas de
registro 6 e disparador o trigger de !nsertar es ejecutado7 se puede obser5ar como
se muestra e mensaje @Store Procedure Insert@7 e Disparador de Insertar un
registro "uncion correctamente.


#4ora bien7 nos posicionamos en e ciente que acabamos de crear 6 4acemos
cuaquier cambio7 a momento de grabaro de nue5a cuenta se 5eri"ican as regas
de campo7 de registro 6 e disparador de #ctuai2ar es ejecutado7 se muestra e
mensaje @Store Procedure *pdate@7 por o tanto e Disparador de ctualiFar un
registro "uncion correctamente.


Por Btimo7 eiminamos e registro7 a momento de grabar e cambio e disparador
de Eiminar es ejecutado7 se muestra e mensaje @Store Procedura Delete@7 por o
tanto e Disparador de Eliminar un registro "uncion correctamente.

Javier Leal Pgina 21 de 114
Manual de Visual Foxpro

Con estos ejempos7 se 5io e proceso que siguen os disparadores7 a4ora7 para
poneros un poco en prctica7 en nuestra base de datos creamos una taba sencia
en a cua 5an a estar as cuentas por cobrar amada C:C7 con os siguientes
camposE nId_C+C7nId_Cliente 6 nSaldo. Como se muestra en a "igura.


Ta creada a taba de Cuentas por cobrar7 e siguiente paso es crear e
Procedimiento #macenado que permitira o pro4iba eiminar un ciente. Creamos e
procedimiento amado EliminaCliente a cua e en5iamos como parmetro e !d
de Ciente a eiminar7 si e ciente tiene sado pendiente entonces no se permite
eiminaro7 de o contrario se eimina e ciente7 e procedimiento quedara de a
siguiente "ormaE
[X[
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
[[[[[[[[[[[[[[[[[[[
\\ Este procedimiento regresa .T. cuando un ciente no
\\ tiene C'C7 de o contrario regresa .F.
[X[
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
[[[[[[[[[[[[[[[[[[[
PR!CED'RE EiminaCiente
&PR0E*ER nU!dUCiente
Javier Leal Pgina 22 de 114
Manual de Visual Foxpro
\\ #brimos a taba C'C en caso que no este abierta
IF 1(T$'$ED$@C'C@&&
$E&EC* ;
'$E C'C
ENDIF

\\ 1os posicionamos en a taba 6 en e primer registro
$E&EC* C'C
5! *!P

\\ (btenemos e sado de ciente
$'0 n%ado && F!R n!dUCiente R ,nU!dUCiente *! nU%ado
IF ,nU%ado R ;
RE*'RN .T.
E&$E
R0E$$5EB!G$@1o se puede eiminar un Ciente con C'C@7:H7@Disparador@&
RE*'RN .F.
ENDIF
ENDPR!C
[X[
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
[[[[[[[[[[[[[[[[[[[
[X[
[X[
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
[[[[[[[[[[[[[[[[[[[

.uedando de a siguiente "ormaE


Ta creamos e procedimiento que 5eri"ica si un ciente puede o no ser eiminado
de a base de datos7 e siguiente paso es indicare a a taba de ciente que mande
amar este procedimiento7 Pen donde 5a este procedimientoQ pues en e disparador
de eiminar $Delete Trigger& a4 es donde o mandamos amar. +odi"icamos a
taba7 editamos e Disparador7 simpemente poniendo a siguiente instruccinE
EliminaCliente$nidUciente& 6 istoX

Javier Leal Pgina 23 de 114
Manual de Visual Foxpro

#4ora probamos nuestro Disparador7 en a taba de Cliente nos aseguramos que
e'ista un ciente con a ca5e 87 6 en a taba de cuentas por cobrar $C:C&
ingresamos tres registros $o mas& que pertene2can a ciente uno 6 con sado ma6or
a cero7 como en a siguiente "igura.


(A7 a4ora 5eri"icamos que e disparador "uncione correctamente7 eiminamos e
ciente uno7 a 4acer esto se ejecuta e disparador de eiminar 6 como e ciente
tiene cuentas por cobrar no permite a eiminacin aparece e mensaje especi"icado
en e disparador 6 nos aparece e mensaje @Trigger Faied@.



Javier Leal Pgina 24 de 114
Manual de Visual Foxpro
Como se puede obser5ar e uso de Procedimientos #macenados 6 Disparadores
nos a6uda a tener un mejor contro de a base de datos de una manera mas
sencia.
E:portacin de In.ormacin...
0na de as grandes 5entajas con as que cuenta VFP es su capacidad para e'portar
a in"ormacin a 5arios "ormatos7 para 4acer esto VFP cuenta con as siguientes
instruccionE E]P(RT 6 C(PT T(.

E:port

VFP E'porta a in"ormacin de a taba7 5ista o cursor de cua se encuentra
posicionado.

$inta:is E:port
E]P(RT T( ileName ^TTPE_ D!F ` +(D ` %T,J ` )J8 ` )J% ` )R8 ` )RJ ` ],% `
],G
^F!E,D% ieldList_ ^Scope_ ^F(R l,+pression$_ ^)N!,E l,+pression%_
^1((PT!+!aE_ ^#% nCodePage_
Par6metros

Cl6usula Descripcin
Fie1ame 1ombre de arc4i5o de saida
)J8 Crea una 4oja de ccuo de ,otus 8-F-> $Re5isin F.'&
)J% Crea una 4oja de ccuo de ,otus 8-F-> $Re5isin 8-#&
],% Crea una 4oja de +icroso"t E'ce
],G Crea una 4oja de +icroso"t E'ce Versin G.;

E#emplos.

\\ Copia e contenido de a taba Customer a un arc4i5o en E'ce
%E,ECT Customer
E]P(RT T( @CEZ+isCientes.]s@

\\ Crea una cursor 6 o e'porta a "ormato ,otus 8F>
%E,ECT O
Customer.Compan67O
(rders.(rderU!d7O
(rders.(rderUDate O
FR(+ (rders7 Customer )NERE (rders.CustU!d R Customer.CustU!d !1T( C0R%(R
+iCursor

E]P(RT T( @cEZ+is #rc4i5osZ(rdenes.)J8@


Copy *o

Javier Leal Pgina 25 de 114
Manual de Visual Foxpro
#unque as instrucciones se parecen7 4acen acciones un poco distintas7 E]P(RT
T( e'porta a in"ormacin a otros "ormatos7 mientras que C(PT T( copia a
in"ormacion de a taba en a que est posicionada a un nue5o arc4i5o

$inta:is Copy *o
C(PT T( ileName ^D#T#/#%E DatabaseName ^1#+E LongTableName__
^F!E,D% ieldList ` F!E,D% ,!JE S#eleton ` F!E,D% E]CEPT S#eleton_
^Scope_ ^F(R l,+pression$_ ^)N!,E l,+pression%_ ^^)!TN_ CD]_
` ^^)!TN_ PR(D0CT!(1_ ^1((PT!+!aE_
^^TTPE_ ^F(]P,0% ` F(]F] ` D!F ` +(D
` %DF ` %T,J ` )J8 ` )J% ` )R8 ` )RJ ` C%V ` ` ],% ` ],G
` DE,!+!TED ^)!TN Delimiter ` )!TN /,#1J ` )!TN T#/
` )!TN CN#R#CTER Delimiter___ ^#% nCodePage_
Par6metros

Cl6usula Descripcin
Fie1ame
1ombre de arc4i5o a copiar7 si no se especi"ica una
e'tensin VFP crea una taba db".
D#T#/#%E DatabaseName
1ombre de a base de datos en a cua es arc4i5o es
copiado
1#+E LongTableName
1ombre de a nue5a taba7 os nombres pueden contener
8F? carateres.
F!E,D% ieldList
,ista de os campos que se 5an a e'portar7 si no se
especi"ican7 VFP e'porta todos os campos
%cope Criterio a E'portar
TTPE Especi"ica e tipo de arc4i5o7 si e arc4i5o no es db"
C%V Crea un arc4i5o deimitado por comas
],% Crea un arc4i5o +icroso"t E'ce
DE,!+!TED
Crea un arc4i5o deimitado7 e deimitador por de"aut es
coma
DE,!+!TED )!TN Deimiter Crea un arc4i5o deimitado por e caracter especi"icado
DE,!+!TED )!TN T#/ Crea un arc4i5o deimitado por tabuadores
DE,!+!TED )!TN
CN#R#CTER Deimiter
Crea un arc4i5o deimitado por e caracter especi"icado

E#emplos:

%E,ECT Empo6ee
C(PT T( @CEZempeado tab.t't@ DE,!+!TED )!TN T#/
C(PT T( @CEZempeado pipe.t't@ DE,!+!TED T!TN CN#R#CTER @`@
C(PT T( @cEZempeado coma.cs5@ TTPE C%V



Importar Datos.
#s como VFP cuenta con "unciones para e'portar in"ormacin7 cuenta con "unciones
para importar in"ormacin de otros "ormatos $E'ce7 Te'to7 )J7 etc& a tabas db".
Javier Leal Pgina 26 de 114
Manual de Visual Foxpro

,as instrucciones bsicas que se encargan de estos procesos sonE !+P(RT FR(+
6 #PPE1D FR(+.

!+P(RT FR(+

%inta'is !mport From
!+P(RT FR(+ ileName ^D#T#/#%E DatabaseName ^1#+E LongTableName__
^TTPE_ F)F ` +(D ` PD(] ` RPD ` )J8 ` )J> ` )J% ` )R8 ` )RJ ` ],%
` ],G ^%NEET cS-eetName_ ` ],? ^%NEET cS-eetName_ ^#% nCodePage_
Par6metros

Cl6usula Descripcin
Fie1ame 1ombre de arc4i5o de cua se 5an a importar os datos
TTPE
Es opciona7 pero debe de ir si 5a aguna de as siguientes
cusuasE F)F7+(D7PD(]7RPD7)J87],%...
)J8 Crea una 4oja de ccuo de ,otus 8-F-> $Re5isin F.'&
)J% Crea una 4oja de ccuo de ,otus 8-F-> $Re5isin 8-#&
],% Crea una 4oja de +icroso"t E'ce
],G Crea una 4oja de +icroso"t E'ce Versin G.;

EjempoE En a carpeta CEZCurso VFP=Z!mportar DatosZ se encuentra e arc4i5o
Cientes.'s7 e cua tiene in"ormacin de cientes en "ormato E'ce7 a idea es
con5ertir esa in"ormacin en un arc4i5o .db"7 utii2aramos e siguiente cdigo

%ET DEF#0,T T( @CEZCurso VFP=Z!mportar DatosZ@ \\ 1os
posicionamos en e directorio
!+P(RT FR(+ @CEZCurso VFP=Z!mportar DatosZCientes@ TTPE ],% \\
!mportamos os datos

VFP no soamente importa os datos7 sino que crea un arc4i5o d". que "cimente
o podemos manipuar7 como se 5e en a siguiente "iguraE




#PPE1D FR(+

#grega registros a "ina de a taba de otros "ormatos7 es mu6 parecida a !+P(RT
FR(+.

$inta:is ppend From
#PPE1D FR(+ ileName ` Q ^F!E,D% ieldList_ ^F(R l,+pression_
Javier Leal Pgina 27 de 114
Manual de Visual Foxpro
^^TTPE_ ^DE,!+!TED ^)!TN Delimiter ` )!TN /,#1J ` )!TN T#/
` )!TN CN#R#CTER Delimiter_ ` D!F ` F)F ` +(D ` PD(] ` RPD `
%DF ` %T,J ` )J8 ` )J> ` )J% ` )R8 ` )RJ ` C%V ` ],% ` ],G
^%NEET cS-eetName_ ` ],? ^%NEET cS-eetName___ ^#% nCodePage_
Par6metros

Cl6usula Descripcin
Fie1ame 1ombre de arc4i5o de cua se 5an a importar os datos
TTPE
Es opciona7 pero debe de ir si 5a aguna de as siguientes
cusuasE F)F7+(D7PD(]7RPD7)J87],%...
^DE,!+!TED
^)!TN Delimiter `
)!TN /,#1J `
)!TN T#/
` )!TN
CN#R#CTER
Delimiter_
Deimitador de arc4i5o

En a carpeta !mportar Datos e'iste e arc4i5o @cientes.t't@7 "orma como
importaramos a in"ormacin es parecido a estoE

CRE#TE C0R%(R +isCientes O
$Compan6 C$>;& 7O
#ddress C$>;& 7O
Cit6 C$>;& 7O
PostaCode C$G& 7O
Countr6 C$8;& 7O
P4one C$F;&&
#PPE1D FR(+ @CEZCurso VFP=Z!mportar DatosZcientes.t't@ DE,!+!TED )!TN T#/
/R()%E

Javier Leal Pgina 28 de 114
Manual de Visual Foxpro

Introduccin a la Programacin !rientada a !"#etos >P!!?
+uc4as 5eces se 4a escuc4ado e trmino de Programacin !rientada a !"#etos
$P!!&7 se 4a escuc4ado que permite una reutii2acin de cdigo 6 nos a4orra e
tiempo en desarroo.

VFP es un enguaje (rientado a (bjetos 6 por o tanto tiene todas as 5entajas de
a misma7 para empe2ar se debe de o5idar a "orma estructurada de programacin
6 entender e concepto de objetos7 en 5e2 de pensar estructuradamente se debe de
pensar en crear objetos que reaicen estas "unciones.

Empe2amos de"iniendo o que es un objeto. 0n objeto es una representacin de
ago "sico o una entidad que tiene ciertas caractersticas 6 sabe como 4acer cierta
cosas7 por ejempo7 un te"ono7 un autom5i7 un a5in7 una escuea7 una persona7
una "actura7 etc. Todos eos se pueden representar como objetos

# as caractersticas de objeto se e conocen como Propiedades7 as acciones
que reai2a e objeto se e conoce como 0etodos $o E)entos en agunos casos7
mas bien son os resutados de a accin de usuario o de cdigo de programa&

Por ejempo7 en un te"ono podemos obser5ar as siguientes PropiedadesE

Javier Leal Pgina 29 de 114
Manual de Visual Foxpro
Coor
0bicacin
#nc4o
,argo
Peso
+arca
etc

De a misma manera7 en un a5in tendramos as siguientes propiedadesE

Coor
#nc4o
,argo
Peso
Peso +'imo
Veocidad Despegue
+'imo #cance
#tura +'ima
Cantidad de
Ventanas
Veocidad de
Crucero
Cantidad de
#sientos
etc.

%iguiendo e mismo procedimiento se 5an estabeciendo as propiedades de
objeto.

#4ora bien7 os 0Htodos son as acciones que e pueden suceder a objeto7
tomando de nue5a cuenta e ejempo de te"ono7 puden suceder as siguientes
accionesE
%onar Timbre
,e5antar auricuar
Contestar amada
Cogar auricuar
+arcar botn
etc.
En donde cada +todo de objeto tiene instrucciones sobre como reaccionar7 por
ejempo7 a cogar e aricuar e objeto sabe que debe terminar a amada.

,os E5entos tambin son mtodos7 a Bnica di"erencia entre un e5ento 6 un
mtodo es que e e5ento se ejecuta automticamente bajo ciertas condiciones7 por
ejempo en un 4umano7 e e5ento ,atirCora2on$& se ejecuta en automtico7 por
poner un ejempo. En VFP podemos crear mtodos mas no e5entos.

En a P(( se ingresan todas as propiedades 6 mtodos de un objeto 6 ests son
empaquetadas7 a utii2ar e objeto no es necesario saber como "unciona
internamente7 por ejempo7 a marcar un nBmero en e te"ono sabemos que accion
5a a pasar7 no nos preocupamos por como o maneja internamente7 si manda a
se3a a un microc4ip7 si tiene una memoria interna7 eso no o sabemos7
simpemente o utii2amos.

Javier Leal Pgina 3 de 114
Manual de Visual Foxpro
# esta caracterstica se e conoce como Encapsulacin7 a capacidad de agrupar
pie2as reacionadas de in"ormacin 6 procedimientos en una soa unidad. ,a
encapsuacin es impementada utii2ando (bjetos con propiedades 6 mtodos.

En VFP creamos objetos en Cases7 se pueden 4acer por cdigo o utii2ando e
Dise3ador de Cases7 a de"inir a case especi"icamos as propiedades 6 mtodos
que a "orman. Todos os objetos que se creen de esta casen tendrn as mismas
propiedades 6 mtodos7 es parecido a 4acer un mode7 en donde todas as pie2as
que sagan de mode son iguaes7 a proceso de crear objetos de una case se e
conoce como Instanciacin7 e objeto que se crea es una instancia de a case.

%upongamos que tenemos un sistema con G; pantaas7 en cada pantaa
tenemos e ogotipo de a empresa7 Pque pasa si e ogotipo cambiaQ tenemos que ir
a cada una de as pantaas 6 4acer e cambio de ogotipo7 utii2ando objetos
creariamos un objeto que muestra e ogotipo de a empresa.

In+erencia es una caracterstica que se debe de presentar para que un enguaje
sea considerado (rientado a (bjeto7 a in4erencia es a 4abiidad de un objeto de
recibir as caractersticas de objeto de cua es creado7 se puede 5er como a
capacidad de 5er re"ejado os cambios 4ec4os en a case base en todas sus
instanciaciones7 por ejempo7 supongamos que tenemos un botn como case 6 a
e6enda de botn dice @#ta@ 6 este botn 4a sido instanciado o coocado en G;
"ormas

#4ora por aguna causa7 es necesario cambiar a e6enda de @#ta@ por @1ue5o@7
como se 4ara antiguamenteQQQ tendramos que modi"icar as G; "ormas 6 4acer e
cambio7 en a P(( 4acemos e cambio en a case 6 e cambio se 5e re"ejado
automticamente en todas as instanciaciones de a caseX en pocas paabras7 os
cambios 4ec4o en e mode se 5en re"ejados en as instancias.

Por Btimo7 Polimor.ismo es a capacidad de en5iar e mismo mensaje pero de
di"erentes tipos 6 de responder de acuerdo a tipo que se en5i. Cuando reai2amos
programacin estructurada debemos tener cuidado de no amar con e mismo
nombre a dos 5ariabes o a dos procedimientos7 sin embargo en a P(( podemos
amar a un mtodo o a una propiedad de una case de igua "orma que un mtodo
o propiedad de otra. Esta caracterstica es o que se denomina poimor"ismo.
Veamos un ejempo con propiedades

DEF!1E C,#%% +iCase8 #% C0%T(+
+iPropiedad R 8;
E1DDEF!1E

DEF!1E C,#%% +iCaseF #% C0%T(+
+iPropiedad R @Noa@
E1DDEF!1E

o0no R CRE#TE(/<ECT$@+iCase8@&
oDos R CRE#TE(/<ECT$@+iCaseF@&

Q o0no.0iPropiedad
Q oDos.0iPropiedad

Como se puede 5er e nombre de a propiedad es e mismo en ambos casos7 pero
con un resutado distinto.

Javier Leal Pgina 31 de 114
Manual de Visual Foxpro
#gunas de as 5entajas de utii2ar P(( sonE
(bjetos reutii2abesE 0na 5e2 que se 4a desarroado 6 depurado una case7
esta puede ser utii2ada en mas apicaciones sin necesidad de modi"icara
mas.
+antenimiento mas "ciE E mantenimiento es 4ec4o en e objeto7 as
instancias que de este objeto 4eredern os cambios automticamente.
Faciidad de modi"icacinE # 4acer e cambios en e objeto7 estos cambios se
5ern re"ejados en as instanciaciones.


Creacin de !"#etos
Ta que se entendo o que es a P!!7 os objetos7 Propiedades 6 mtodos e
siguiente paso es a creacin de objetos en VFP7 pero antes se debe de comprender
a nomencatura que se utii2a para 4acer re"erencia a as propiedades 6 e5entos.

Para 4acer re"erencia a a Propiedad de un objeto7 se sigue o siguienteE

NombreDel.b/eto.Propiedad

+ientras que a os +todos de un objeto se sigue o siguienteE

1ombreDe(bjeto.0Htodo>?

Para 4acer re"erencia a 5arias propiedades se puede 4acer estoE

1ombreDe(bjeto.PropiedadC R Valor$
1ombreDe(bjeto.PropiedadI R Valor%
1ombreDe(bjeto.PropiedadJ R Valor0
1ombreDe(bjeto.PropiedadK R Valor1
1ombreDe(bjeto.PropiedadL R Valor&

( mejor aBn7 utii2ar a cusua )!TN D E1D)!TN quedando de a siguiente
"ormaE

-I*7 1ombreDe(bjeto
.PropiedadC R Vaor8
.PropiedadI R VaorF
.PropiedadJ R Vaor>
.PropiedadK R VaorH
.PropiedadL R VaorG
END-I*7

Para a creacin de objetos VFP cuenta con e comando DEFINE C&$$7 a
sinta'is es a siguienteE
DEF!1E C,#%% Cass1ame8 #% ParentCass ^(F Cass,ibrar6_ ^(,EP0/,!C_
^^PR(TECTED ` N!DDE1 Propert61ame87 Propert61ameF ..._
^(bject._Propert61ame R eE'pression ..._
^!+P,E+E1T% c!nter"ace1ame ^E]C,0DE_
Javier Leal Pgina 32 de 114
Manual de Visual Foxpro
!1 T6pe,ib ` T6pe,ibC0!D ` Prog!D _
^#DD (/<ECT ^PR(TECTED_ (bject1ame #% Cass1ameF ^1(!1!T_
^)!TN cPropert6ist__
^^PR(TECTED ` N!DDE1_ F01CT!(1 ` PR(CED0RE 1ame^U#CCE%% `U#%%!C1_
$^cParam1ame ^#% t6pe_ ^b__&
^#% t6pe_ ^NE,P%TR!1C cNep%tring_
TN!%U#CCE%% ^1(DEF#0,T_ c%tatements ^E1DF01C ` E1DPR(C__
^PE+1ameUC(+#TTR!/ R nFags ` D!+E1%!(1 PE+1ameUC(+#TTR!/^G_
^PE+1ameUC(+#TTR!/^8_ R nFags
PE+1ameUC(+#TTR!/^F_ R cNep%tring
PE+1ameUC(+#TTR!/^>_ R cPropert6Capitai2ation
PE+1ameUC(+#TTR!/^H_ R cPropert6T6pe
PE+1ameUC(+#TTR!/^G_ R n(ptionaParams__
E1DDEF!1E
En donde ParentCass se especi"ica a case padre de a cua e objeto tomar sus
propiedades 6 e5entos7 esta puede tomar cuaquiera de os siguientes 5aoresE

#cti5eDoc Custom ProjectNooA PageFrame
C4ecA/o' DataEn5ironment ,abe Reation
Coumn Edit/o' ,ine %eparator
Combo/o' Form ,ist/o' %ession
Command/utton Form%et (,EContro %pinner
CommandCroup Crid (,E/oundContro Te't/o'
Container Neader (ption/utton Timer
Contro N6perinA (ptionCroup Too/ar
Cursor !mage Page

Para empe2ar7 5amos a crear un objeto amado #utomo5i7 e cua tenga as
siguientes propiedadesE 0arca7 0odelo7 3o 6 Placas7 adems que tenga estos
dos e5entos Encender 6 pagar. Para 4acer esto7 utii2amos e siguiente cdigoE

DEF!1E C,#%% #utomo5i #% Custom
\\ %e especi"ican as Propiedades de #utom5i
c+arca R @@
c+odeo R @@
n#3o R ;
cPacas R @@
En+arc4a R .F.
\\ %e especi"ican os e5entos de encendido 6 apagado
PR(CED0RE Encender
T4is.En+arc4a R .T.
E1DPR(C
PR(CED0RE #pagar
T4is.En+arc4a R .F.
E1DPR(C
E1DDEF!1E

Este cdigo creara un objeto amado #utom5i con as propiedades 6 e5entos
especi"icados7 a4ora e siguiente paso es crear una instancia de objeto7 para 4acer
esto VFP cuenta con e comando CRE*E!B,EC*>? e cua nos a6uda a crear e
objeto $6a que con DEF!1E C,#%% simpemente o de"inimos&7 tendramos e
siguiente cdigoE

Javier Leal Pgina 33 de 114
Manual de Visual Foxpro
oCi5ic R CRE*E!B,EC*$@#utomo5i@&
6 istoX a4ora simpemente asignamos propiedades 6 mandamos amar os e5entos


Como se puede 5er en e ejempo anterior7 se 4ace una instancia de objeto
#utomo5i7 esta instancia es amada @oCi5ic@7 despus de crear e objeto asignamos
as propiedades 6 por Btimo despegamos a +arca7 e +odeo7 Encendemos 6
apagamos e motor.

E objeto #utomo5i puede ser amado 5arias 5eces7 cada instancia tendr sus
propias propiedades 6 mtodos.

oCi5ic R CRE#TE(/<ECT$@#utomo5i@&
oCo" R CRE#TE(/<ECT$@#utomo5i@&
oTsuru R CRE#TE(/<ECT$@#utomo5i@&

\\ #signamos a Propiedades a (bjeto oCi)ic
)!TN oCi5ic
.c+arca R @Nonda@
.c+odeo R @Ci5ic@
.n#3o R F;;F
.cPacas R @NCP-;;8@
.Encender$&
E1D)!TN

\\ #signamos a Propiedades a (bjeto o5ol.
Javier Leal Pgina 34 de 114
Manual de Visual Foxpro
)!TN oCo"
.c+arca R @VoAs)agen@
.c+odeo R @Co"@
.n#3o R F;;>
.cPacas R @CV)-;;>@
.#pagar$&
E1D)!TN

\\ #signamos a Propiedades a (bjeto o*suru
)!TN oTsuru
.c+arca R @1issan@
.c+odeo R @Tsuru@
.n#3o R F;;8
.cPacas R @1T%-;;F@
.Encender$&
E1D)!TN

\\ # despegar os datos cada objeto tiene sus propios 5aores.

Q oCi5ic.c+arca \\ Nonda
Q oCo".c+arca \\ VoAs)agen
Q oTsuru.c+arca \\ 1issan
Q oCi5ic.En+arca \\ .T.
Q oTsuru.n#3o \\ F;;8



Creacin de Clases
VFP permite a creacin de cases por medio de un dise3ador de cases que nos
"aciita muc4o a tarea7 todas nuestras cases se guardan en una bibioteca de
cases $.vcx& que nosotros de"inimos7 por ejempo7 5amos a crear una case basada
en e botn estndar de VFP7 con a caracterstica que a e6enda sea @Noa@.

Para empe2ar a
crear a case7 en e
Pro6ecto
seeccionamos a
pesta3a de Clases
6 damos cic en
Ne<7 a 4acer esto
aparecer a
pantaa Ne<
Class7 aqu es
donde
especi"icamosE
1ombre de
a case
$Cass
1ame&
Case en a
que est
badada
Javier Leal Pgina 35 de 114
Manual de Visual Foxpro
$/asen (n&
,ugar
donde se
quiere
grabar
$%tore !n&.

!ngresamos e nombre de nuestra case7 en este caso @0iBoton@ 6 especi"icamos
a case en a que 5a a estar basada7 a 4acer cic en e Combo /o' @/ased (n@ nos
aparece una ista de cases padres sobre a cua se 5a a basar nuestra case7 como
en este ejempo esta basada en un botn seeccionamos CommandButton.


Por Btimo indicamos en donde queremos grabar a ibrera de cases dando cic
en e botn o ingresando 6 ubicacin de a ibrera de cases7 como se muestra en a
siguiente "igura.


# dar cic en e botn (J aparecer a siguiente pantaa7 en esta pantaa es
donde con"iguramos nuestra case7
Javier Leal Pgina 36 de 114
Manual de Visual Foxpro

Como se puede obser5ar7 se creo a ibrera de cases @+isCases@ 6 esta se
agreg en a Pesta3a de cases7 en esta ibrera pertenece nuestra case de tipo
botn7 a posicionarnos sobre e botn7 dar cic con e botn derec4o 6 seeccionar
Propiedades aparece a 5entana de Propiedades 6 +todos de a case.

1os posicionamos en a Propiedad Caption 6 a cambiamos por @7ola@7 adems
en e e5ento clic# ingresamos e siguiente cdigoE

+i/oton.CicA$&
)#!T )!1D() @Noa +undoX@

.uedando de a siguiente maneraE

Javier Leal Pgina 37 de 114
Manual de Visual Foxpro

#4ora simpemente grabamos nuestra case 6 isto7 6a de"inimos as
caractersticas como queremos que "uncione e botn7 a4ora e siguiente paso es
instanciaro en nuestra "orma. E siguiente paso es en nuestro pro6ecto7
posicionarnos en a pesta3a Documentos 6 dar cic en e botn 1e*7 6 seeccionar
@1e* Form@7 nos aparecer a siguiente "orma.

Javier Leal Pgina 38 de 114
Manual de Visual Foxpro

Para insertar nuestra case7 o primero que se tiene que 4acer es agregar nuestra
ibrera de cases en a barra de 4erramientas de VFP7 para 4acer esto7 damos cic
en e segundo cono de a barra de 4erramientas $ibros& 6 seeccionamos a opcin
Add. # 4acer esto aparecer a 5entana de seeccin de arc4i5o7 seeccionamos
@+isCases.Vc'@ 6 esta se agregar a nuestra barra de 4erramientas.



Javier Leal Pgina 39 de 114
Manual de Visual Foxpro
#4ora simpemente insertamos nuestra
case en a "orma7 en este ejempo
insertamos $instanciamos& nuestra case
8; 5eces7 con a "inaidad de que se 5ea a
propiedad Caption de cada instancia dice
@2ola@ adems7 a ejecutar a "orma 6 dar
cic en cuaquier botn aparecer e
mensaje @2ola !undo3@.
Esto es7 as instancias adquieren as
propiedades 6 mtodos de a case de
donde proceden7 esto nos a6uda a tener
una gran reutii2acin de cdigo.

PComo es que esto nos a6uda a reducir e tiempoQ bueno7 supongamos que se
debe de cambiar a e6enda de Hola por dis7 adems a dar cic mostrar Adis
Mundo en 5e2 de Hola Mundo. Con a utii2acin de cases a 5entaja est que en
5e2 de 4acer e cambio en os 8; botones de a "orma7 simpemente nos 5amos a a
case 6 4acemos os cambios en a case7 cambiamos e caption 6 e e5ento cicA 6
estos cambios se 5ern re"ejados automticamente en todas as "ormas que
utiicen este botn.



Javier Leal Pgina 4 de 114
Manual de Visual Foxpro
Despus de 4acer os
cambios en a case 6 ejecutar
a "orma7 os cambios se 5en
re"ejados sin necesidad de
modi"icar a "orma. # utii2ar a
P(( nos permite 4acer cambios
en nuestras cases bases 6 sin
necesidad de 4acer cambios en
as "ormas.

E#ercicio: Crear una ibrera de cases que contenga a menos estos eementosE
C4ecA/o'
Combo/o'
Command/utton
Container
Edit/o'
Crid
!mage
,abe
,ist/o'
%pinner
Te't/o'
Timer
Botn E:plorador de -indo<s...
Ta que se 5io como crear cases7 5amos a empe2ar a desarroar una case que
nos muestre e e'porador de )indo*s7 esta sencia case 5a a ser un botn que a
momento que e usuario dispare e e5ento CicA ejecute esta accin.

Para abrir e E'porador de )indo*s 5amos a utii2ar a "uncin %4eE'ec7
empe2amos agregando a nuestra ibrera de cases nuestra case
$Cmd=E:plorador&

Javier Leal Pgina 41 de 114
Manual de Visual Foxpro

# dar cic en (J aparece nuestro botn7 4acemos estos cambios en as propiedades

Neig4t R FH
)idt4 R FH
Caption R @@
Picture R @..Zcurso 5"p=ZimagenesZbmpZe'porer.bmp@ \\ Pat4 donde esta a
imgen

#4ora7 en e e5ento Click ingresamos e siguiente cdigoE

[X[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
[X[ CmdUE'porador.CicA$&
[X[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
c,inA R @cEZ@ \\ Carpeta que 5a a abrir
c#ction R@@
cParms R @@
c#ction R !!F$E+PTT$c#ction&7@(pen@7c#ction&
cParms R !!F$E+PTT$cParms&7@@7cParms&
DEC,#RE !1TECER %4eE'ecute O
!1 %NE,,>F.d O
!1TECER n)inNande 7O
%TR!1C c(peration 7O
%TR!1C cFie1ame 7O
%TR!1C cParameters 7O
%TR!1C cDirector6 7O
!1TECER n%4o*)indo*
DEC,#RE !1TECER Find)indo* O
!1 )!1>F#P! O
%TR!1C c1u7 %TR!1C c)in1ame
RET0R1 %4eE'ecute$Find)indo*$;7U%CREE1.Caption& 7O
c#ction7c,inA7O
cParms7%T%$F;F>&78&
[X[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
[X[
[X[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
Javier Leal Pgina 42 de 114
Manual de Visual Foxpro

.uedando de a siguiente maneraE


Por Btimo7 ingresamos in"ormacin sobre a case7 esto nos 5a a permitr que e
momento de utii2ara tengamos una re"erencia sobre o que 4ace 6 uso7 en e menB
de VFP seeccionamos CassDCass !n"o 6 aparecer a pantaa Cass !n"o7 aqu es
donde ingresamos os datos7

Javier Leal Pgina 43 de 114
Manual de Visual Foxpro

En *ool"ar Icon especi"icamos a imgen que deseamos que represente a case
en a barra de 4erramientas7 en Container Icon e cono que aparecer en nuestra
ibrera de cases7 6 en Description7 como su nombre o indica7 una bre5e
descripcin de o que 4ace a case.


#4ora simpemente grabamos a case7 creamos una nue5a "orma
$UCmdUE'porer& e insertamos nuestra case7 ejecutamos a "orma 6 4acemos cic
en nuestro botn7 e E'porador de )indo*s se abrir como en a siguiente "iguraE

Javier Leal Pgina 44 de 114
Manual de Visual Foxpro

T istoX a4ora simpemente insertamos esta case en nuestros pro6ectos 6 e usuario
puede abrir e E'porador de )indo*s





Clase E:portar In.ormacin...
Como 6a se 5i7 VFP permite e'portar in"ormacin a 5arios "ormatos utii2ando
os comandos E]P(RT T( 6 C(PT T(7 a4ora se 5a a crear una case basada en un
botn7 que a momento de ejecutar e e5ento CicA e'porte a in"ormacin de una
determinada taba a +icroso"t E'ce.

Empe2amos agregando a nuestra ibrera de cases nuestra case $Cmd=E:port&

Javier Leal Pgina 45 de 114
Manual de Visual Foxpro
# dar cic en (J aparece nuestro botn7 4acemos estos cambios en as propiedades

Neig4t R FH
)idt4 R FH
Caption R @@
Picture R @..Zcurso 5"p=ZimagenesZbmpZopenUinUe'ce.bmp@ \\ Pat4 donde esta a
imgen

#4ora7 en e e5ento Click ingresamos e siguiente cdigoE
[X[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
[X[ CmdUE'port.CicA$&
[X[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[

,cUTaba R CETF!,E$@D/F@7@TabaE@7@#brir@&
!F E+PTT$,cUTaba&
\\ E usuario no seecciono ninguna taba
RET0R1
E1D!F
\\ #4ora preguntamos en donde 6 con que nombre
\\ se quiere grabar e arc4i5o
,cU#rc4i5o R P0TF!,E$@Crabar enE@7@+i#rc4i5o@7@],%@&
!F E+PTT$,cU#rc4i5o&
\\ E usuario no especi"ico ningBn nombre
RET0R1
E1D!F
\\ %i a taba no est abierta se abre
!F 1(T$0%ED$,cUTaba&&
%E,ECT ;
0%E $,cUTaba&
E1D!F
\\ #4ora e'portamos a in"ormacin
%E,ECT $,cU#rc4i5o&
E]P(RT T( $,cU#rc4i5o& TTPE ],%
+E%%#CE/(]$@!n"ormacin E'portada@7:H7@CmdUE'port@&

Javier Leal Pgina 46 de 114
Manual de Visual Foxpro
[X[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
[X[
[X[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[

.uedando de a siguiente maneraE


De nue5a cuenta7 ingresamos a descripcin de a case $CassDCass !n"o...& 6 os
conos que queramos utii2ar7 creamos una "orma $UCmdUE'port&7 insertamos
nuestro botn 6 ejecutamos a "orma7 a dar cic en e botn aparecer un cuadro de
diogo en e cua especi"icamos a taba que queremos abrir7 en este caso a taba
Customer.

Javier Leal Pgina 47 de 114
Manual de Visual Foxpro

#cto seguido a case abre un cuadro de diogo en e cua indicamos e nombre 6
ugar donde queremos grabar a e'portacin


# momento de 4acer cic
en e botn de 5uardar a
in"ormacin es e'portada e
+icroso"t E'ce7 6 aparece a
siguiente 5entanaE


Javier Leal Pgina 48 de 114
Manual de Visual Foxpro
%i abrimos a carpeta encontraremos e arc4i5o que contiene a in"ormacin de a
taba Customer en "ormato E'ce.


%impemente utii2amos a case en nuestros pro6ectos para brindare a usuario
a capacidad de e'portar a in"ormacin a otro "ormato.




gregar Propiedades...
Na6 ocasiones en as cuaes es necesario agregar propiedades a nuestras cases7 a
nuestros objetos e podemos agregar a cantidad de propiedades 6 mtodos que
necesitemos.

Para poner un ejempo7 en a case CmdUE'port que se acaba de 4acer7 e
usuario a momento de 4acer cic en e botn7 a case pregunta por una taba 6 acto
seguido pregunta por un nombre de arc4i5o. P.ue sucede si en nuestra apicacin
queremos mediante cdigo asignar e nombre de a taba7 as como e nombre 6
ubicacin de arc4i5oQ PComo se 4ara esoQ

/ueno7 o primero es anai2ar a probemtica7 en si7 para soucionar esto se
requiere indicare a a case F datos7 a taba 6 e nombre de arc4i5o a crear7 a
primera soucin que se podra pensar es crear F 5ariabes pBbicas 6 estas
mandaras amar en e e5ento cicA7 ago as como esto..

P0/,!C gcUTaba7 gcU#rc4i5o
gcUTaba R @Customer@
gcU#rc4i5o R @cEZCientes.'s@

6 modi"icar e e5ento cicA de a case a ago as como estoE
[X[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
[X[ CmdUE'port.CicA$&
[X[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[

Javier Leal Pgina 49 de 114
Manual de Visual Foxpro
,cUTaba R gc=*a"la
!F E+PTT$,cUTaba&
\\ E usuario no seecciono ninguna taba
RET0R1
E1D!F
\\ #4ora preguntamos en donde 6 con que nombre
\\ se quiere grabar e arc4i5o
,cU#rc4i5o R gc=rc+i)o
\\ E usuario no especi"ico ningBn nombre
RET0R1
E1D!F
\\ %i a taba no est abierta se abre
!F 1(T$0%ED$,cUTaba&&
%E,ECT ;
0%E $,cUTaba&
E1D!F
\\ #4ora e'portamos a in"ormacin
%E,ECT $,cU#rc4i5o&
E]P(RT T( $,cU#rc4i5o& TTPE ],%
+E%%#CE/(]$@!n"ormacin E'portada@7:H7@CmdUE'port@&

[X[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
[X[
[X[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[

#Bn 6 que esto "uncione7 rompe con todas as regas de a P((7 6a que se intenta
e5itar e uso de 5ariabes o mas posibe7 a soucin utii2ando P(( es creare a
objeto propiedades donde se guarde e nombre de a taba 6 e nombre de arc4i5o7
en este caso 5amos a agregar a a case dos propiedades7 c*a"la 6 crc+i)o. Para
4acer esto en e +enB seeccionamos CassD1e* Propert67 a entrar a esta opcin
aparecer a pantaa e! Property7 especi"icamos e nombre de as propiedades a
crear $cTaba 6 c#rc4i5o&.

En esta pantaa indicamos e nombre7 en e Combo /o' de Visibiidad podemos
escoger entre Pubic7 Protected o Nidden7 aqu indicamos e acance de a propiedad7
si deseamos que sea 5isibe $Pubic&7 soo ectura $Protected& u ocuto $Nidden&. En
e cuadro de descripcin ingresamos a re"erencia de a propiedad que se 4a creado.
Creamos a Propiedad c*a"la7 4acemos cic en e botn #dd 6 acto seguido
creamos a propiedad crc+i)o 6 de nue5a cuenta cic en e botn #dd.



Javier Leal Pgina 5 de 114
Manual de Visual Foxpro
# 4acer esto7 4emos agregado dos nue5as propiedades a nuestra case
$Cmd=E:port& a 5er as Propiedades estas dos se encuentran a "ina de as
Propiedades como se 5e en a "igura. Por omisin7 todas as 5aores de as nue5as
propiedades son de tipo gico $.F.& podemos cambiar e 5aor simpemente
posicionandonos en a propiedad 6 4aciendo e cambio.

Como as dos propiedades son de tipo te'to7 nos posicionamos en as
propiedades 6 eiminamos e 5aor de .F.7 a 4acer esto cambiar e 5aor de .F. a
>None? como se 5e en a "igura de a derec4a.


T istoX 6a se 4an creado as Propiedades 6 asignado os 5aores7 e siguiente
paso es utii2aros.

En VFP para 4acer re"erencia a un objeto se tiene que escribir e pat4 competo
de objeto7 Pque es estoQ7 por ejempo7 en una "orma tenemos un botn amado
CmdU/oton87 para 4acer re"erencia se utii2a a siguiente nomencaturaE

*7I$F!R0.CmdU/oton8

%e 4ace uso de a cusua *7I$F!R07 pero como en a 5ida rea no sabemos
con certe2a en donde 5an a coocar nuestro botn no podemos utii2aro7 6a que
pueden poner e botn dentro de a "orma7 o dentro de un contenedor7 dentro de un
Page Frame7 etc.

%in embargo7 VFP cuenta con una cusua con a cua e objeto se 4ace
re"erencia a si mismo7 esta es mu6 utii2ada 6a que nos da un gran poder 6
"e'ibiidad7 a cusua es "H#S.

Cuando VFP encuentra *+is.+iPropiedad o *+is.+i+etodo$&7 busca a propiedad
o mtodo en e objeto que se est amando7 utii2ando esto e cdigo de nuestra
case cambia a estoE

[X[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
Javier Leal Pgina 51 de 114
Manual de Visual Foxpro
[X[ CmdUE'port.CicA$&
[X[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[

,cUTaba R *+is.c*a"la
!F E+PTT$,cUTaba&
\\ E usuario no seecciono ninguna taba
RET0R1
E1D!F
\\ #4ora preguntamos en donde 6 con que nombre
\\ se quiere grabar e arc4i5o
,cU#rc4i5o R *+is.crc+i)o
\\ E usuario no especi"ico ningBn nombre
RET0R1
E1D!F
\\ %i a taba no est abierta se abre
!F 1(T$0%ED$,cUTaba&&
%E,ECT ;
0%E $,cUTaba&
E1D!F
\\ #4ora e'portamos a in"ormacin
%E,ECT $,cU#rc4i5o&
E]P(RT T( $,cU#rc4i5o& TTPE ],%
+E%%#CE/(]$@!n"ormacin E'portada@7:H7@CmdUE'port@&

[X[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
[X[
[X[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[

1uestro Btimo paso es crear una "orma $=Propiedades.sc:& 6 en esta agregar
dos estiquetas 6 dos instanciaciones de nuestra case74acemos os siguientes
cambios en as propiedades de os objetosE

,abe8.Caption R @Customer@
,abeF.Caption R @Empo6ee@

CmdUE'port8.c#rc4i5o R @CEZCurso VFP=Z%aidas E'ceZCustomer.'s@
CmdUE'port8.cTaba R @Customer@

CmdUE'portF.c#rc4i5o R @CEZCurso VFP=Z%aidas E'ceZEmpo6ee.'s@
CmdUE'portF.cTaba R @Empo6ee@

.uedando ago parecido a a siguiente "iguraE

Javier Leal Pgina 52 de 114
Manual de Visual Foxpro


# momento de grabar a "orma 6 4acer cic en os botones aparecer a 5entana
que nos indica que a in"ormacin 6a "ue creada 6 os arc4i5os "ueron creados.



gregar 0Htodos...

Javier Leal Pgina 53 de 114
Manual de Visual Foxpro
#s como a os objetos e podemos
agregar Propiedades7 tambin se puede
agregra +todos7 e proceso es mu6
parecido a de as Propiedades.
%upongamos que a nuestra case
CmdUE'port deseamos agregare una
"uncin amada $er%atos7 que a
momento de amare muestre e
contenido de a taba que tiene en a
propiedad c*a"la.

En e menB seeccionamos CassD1e*
+etod7 ingresamos e nombre de
mtodo $VerDatos&7 a 5er as
Propiedades de nuestra case 6
posicionarnos en a pesta3a +et4ods
5emos que e mtodo creado est
posicionado a "ina7 a4ora simpemente
damos dobe cic en e mtodo para
empe2ar a escribir e cdigo. Tendramos
ago parecido a estoE



[X[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
[X[ CmdUE'port.VerDatos$&
[X[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[

!F E+PTT$T4is.cTaba&
\\ E usuario no seecciono ninguna taba
RET0R1
E1D!F
\\ %i a taba no est abierta se abre
!F 1(T$0%ED$T4is.cTaba&&
%E,ECT ;
0%E $T4is.cTaba&
E1D!F
%E,ECT $T4is.cTaba&
/R() \\ +ostramos e contenido de a taba
[X[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
[X[ CmdUE'port.VerDatos$&
[X[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[

#4ora7 creamos una nue5a "orma $=VerDatos.sc:&7 agregamos en e
DataEn5ironment a taba Products.db"7 en a "orma agregamos un botn estndar 6
nuestra case $CmdUE'port&. #signamos as siguientes propiedadesE

CmdUE'port8.c#rc4i5o R @CEZCurso VFP=Z%aidas E'ceZProducts.'s@
CmdUE'port8.cTaba R @products@

En e e5ento CicA de /otn estndar ingresamos a siguiente nea de cdigoE
\\ +andamos amar e e5ento VerDatos en e botn CmdUE'port8
TN!%F(R+.CmdUE'port8.VerDatos>?
Javier Leal Pgina 54 de 114
Manual de Visual Foxpro


Como se puede obser5ar7 estamos creando mtodos 6 mandaros amar.
$%& / Introduccin...
$%& $%tructured .uer6 ,enguage& es un enguaje surgido de un pro6ecto de
in5estigacin de !/+ para e acceso a bases de datos reacionaes. #ctuamente se
4a con5ertido en un est6ndar de enguaje de bases de datos7 6 a ma6ora de os
sistemas de bases de datos o soportan7 desde sistemas para computadoras
personaes7 4asta grandes ser5idores.

Como su nombre indica7 e %., nos permite reai2ar consultas a la "ase de
datos. Pero e nombre se queda corto 6a que %., adems reai2a "unciones de
de.inicin, control y administracin de la "ase de datos. ,as sentencias %.,
se casi"ican segBn su "inaidad dando origen a tres cenguajesd o mejor dic4o
subenguajesE

DD& $Data Description ,anguage&7 lengua#e de de.inicin de datos7
incu6e rdenes para de"inir7 modi"icar o borrar as tabas en as que se
amacenan os datos 6 de as reaciones entre estas. $Es e que ms 5aria de
un sistema a otro&.
DC& $Data Contro ,anguage&7 lengua#e de control de datos7 contiene
eementos Bties para trabajar en un entorno mutiusuario7 en e que es
importante a proteccin de os datos7 a seguridad de as tabas 6 e
estabecimiento de restricciones en e acceso7 as como eementos para
coordinar a comparticin de datos por parte de usuarios concurrentes7
asegurando que no inter"ieren unos con otros.
Javier Leal Pgina 55 de 114
Manual de Visual Foxpro
D0& $Data +anipuation ,anguage&7 lengua#e de manipulacin de datos7
nos permite recuperar os datos amacenados en a base de datos 6 tambin
incu6e rdenes para permitir a usuario actuai2ar a base de datos
a3adiendo nue5os datos7 suprimiendo datos antiguos o modi"icando datos
pre5iamente amacenados.
VFP soporta comandos %.,7 os comandos %., son "rases donde indicamos que
es o que queremos obtener 6 donde o queremos guardar o que accin queremos
4acer sobre os datos.

Comando Descripcin
%E,ECT
Especi"ica e criterio de a consuta7 VFP interpreta a consuta 6 obtiene
os datos de as tabas especi"icadas
#,TER
T#/,E
#tera a estructura de una taba e'istente7 se puede modi"icar e
nombre7 e tipo7 a presicin7 aceptacin de 5aores nuos e integridad
re"erencia para cada campo en a taba
CRE#TE
C0R%(R
Crea una taba tempora7 se especi"ica e nombre 6 campos de a taba
CRE#TE
T#/,E
Crea una taba7 se especi"ica e nombre 6 campos de a taba
DE,ETE +arca registros para borrar
!1%ERT !nserta un nue5o registro a "ina de a taba
0PD#TE #ctuai2a registros en a taba

Nota: No +ay 2ue con.undir estos comandos $%& con los comandos nati)os de VFP, aun2ue se
pareFcan son mHtodos distintos.

,a gran di"erencia entre %., 6 ]/ase $,a tecnooga VFP& es que ]/ase es por
Procedimiento mientras %., no7 en ]/ase 4a6 que indicar e'actamente que 4acer
para ir de punto # a punto /7 de otra "orma ]/ase no tiene ni idea de o que se
est pidiendo. En cambio7 a %., simpemente se e indica que es o que se quiere 6
%., sabe como o obtiene. Por ejempo7 en %., simpemente e indicamos que
campos queremos mientras que en ]/ase se debe de na5egar en a taba para
obtener a in"ormacin.

# continuacin se e'picar a sinta'is 6 uso de cada una de estas "unciones.
Para entender bien a sinta'is cuando se encuentre con una e'presin con un pipe
@`@7 como A&& M %#S"#C" ) e pipe se toma como seleccin7 se ee como @# o
Distinct@7 si esta e'presin est encerrada por os caracteres N 6 O entonces a
e'presin es opcional.

De esta "orma7 si se encuentra con a siguiente e'presinE ' A&& ( %#S"#C")
se entiende que a e'presin es opciona7 pero si se incu6e en a sentencia7
entonces soo puede tomar como 5aor @&&@ o @DI$*INC*@.

Re"erenciaE
4ttpEDD***.auacic.orgDsqD

$E&EC* / $%&.
Javier Leal Pgina 56 de 114
Manual de Visual Foxpro
$inta:is $E&EC* / $%&:


%E,ECT ^#,, ` D!%T!1CT_ ^T(P n,+pr ^PERCE1T__ ^Alias._ Select_Item
^^#%_ Column_Name_ ^7 ^Alias._ Select_Item ^^#%_ Column_Name_ ..._
FR(+ ^F(RCE_^DatabaseNameX_Table ^^#%_ Local_Alias_
^^!11ER ` ,EFT ^(0TER_ ` R!CNT ^(0TER_ ` F0,, ^(0TER_ <(!1
DatabaseNameX_ Table ^^#%_ Local_Alias_ ^(1 4oinCondition e_
^^!1T( Destination_ ` ^T( F!,E ileName ^#DD!T!VE_ ` T( PR!1TER
^PR(+PT_ ` T( %CREE1__ ^PREFERE1CE Pre"erenceName_
^1(C(1%(,E_ ^P,#!1_ ^1()#!T_
^)NERE 4oinCondition ^#1D 4oinCondition ..._
^#1D ` (R ilterCondition ^#1D ` (R ilterCondition ...___
^CR(0P /T 5roupColumn ^7 5roupColumn ...__
^N#V!1C FiterCondition_ ^01!(1 ^#,,_ %E,ECTCommand_
^(RDER /T (rderU!tem ^#%C ` DE%C_ ^7 (rderU!tem ^#%C ` DE%C_ ...__

Par6metros:

Cl6usula Descripcin
%E,ECT
Especi"ica os campos7 constantes 6 e'presiones que se
despiegan en a consuta
#,, Despiega todos os campos de a taba $Por omisin&
D!%T!1CT 1o muestra registros dupicados
#,!#%.%eectU!tem 1ombre de campo que se quiere despegar
#% CoumnU1ame 1ombre que se e quiere dar a campo
FR(+ Especi"ica de donde se 5a a 4acer a consuta
^#%_ ,ocaU#ias Especi"ica un nombre tempora que se e quiere dar a a taba
!1T( Destination
Especi"ica en donde se quiere guardar a consuta7 pude ser
cuaquiera de estas tres opcionesE #RR#T7 C0R%(R7 D/F
T( F!,E Fie1ame En5ia e resutado a un arc4i5o #%C!!
)NERE
!ndica que se muestren soamente os registros que cumpan con
una determinada condicin gica
CR(0PT /T
CroupCoumn
#grupa os registros basados en e 5aor de una o mas coumnas
(RDER /T
(rderU!tem
(rdena a consuta por os campos especi"icados



,a e'presin %E,ECT-%., es bsica para 4acer consutas en as tabas7 5eamos
un peque3o ejempo7 si se quisieran seeccionar todos os 1ombres de os
Compa3as7 e contacto 6 e pas de a taba Customer de a base de datos
*estData7 a instruccin %., sera a siguienteE

$E&EC* Customer.Company, Customer.Contact, Customer.Country FR!0
Customer

Javier Leal Pgina 57 de 114
Manual de Visual Foxpro
# ingresar est nea en a 5entana de comandos7 VFP interpreta esta consuta7
seecciona os campos de a taba especi"icada 6 muestra os resutados como se
muestra en a siguiente "iguraE


1otaE Para 5er a estructura de TestData.dbc7 as como e diagrama Entidad-Reacin7 de cic aqu

Como se puede obser5ar7 a cusua %E,ECT - %., seecciona campos 6
registros que cumpan con una determinada condicin7 si a taba en a cua se est
4aciendo a consuta no est abierta7 VFP intenta abrira en "orma automtica.

,a sentencia %., se puede reducir ingresando un lias a a taba 6 poniendo
este aias en os campos a seeccionar7 por ejempo7 en e ejempo anterior a taba
de donde se 4acen as consutas es @Customer@7 si utii2amos un aias amado
@Cust@7 entonces7 a sentencia quedara en cuaquiera de as dos siguientes "ormasE

8. %E,ECT Cust.Compan67 Cust.Contact7 Cust.Countr6 FR(+ Customer #% Cust
F. %E,ECT Cust.Compan67 Cust.Contact7 Cust.Countr6 FR(+ Customer Cust

T se obtiene e mismo resutado7 a 5entaja de usar aias es que a4orramos
tiempo a escribir 6 e cdigo 6 es mas egibe.

#4ora bien7 se puede 4acer muc4o mas que simpemente seeccionar campos de
una taba7 se pueden reai2ar "itros7 ordenar a in"ormacin7 reai2ar sumatorias7
ccuos7 etc7 5eamos os siguientes ejemposE

Reai2ar a misma consuta anterior7 pero a4ora soamente de os cientes que
sean de +'ico. Para 4acer esto7 a a cusua %E,ECT se e agrega e comando
-7ERE Condicin,gica7 quedando de a siguiente maneraE

%E,ECT Cust.Compan67 Cust.Contact7 Cust.Countr6 FR(+ Customer #% Cust
-7ERE Countr6 R @+e'ico@
Javier Leal Pgina 58 de 114
Manual de Visual Foxpro

T se obtienen os cientes que sean de +'ico. %i en a consuta se desea que
est ordenada por nombre de compa3a en "orma descente7 se agregara a a
consuta a cusua !RDER B4 Campo N$CMDE$CO7 quedando de a siguiente
manera a consutaE
%E,ECT Cust.Compan67 Cust.Contact7 Cust.Countr6 FR(+ Customer #% Cust
)NERE Countr6 R @+e'ico@ !RDER B4 Compan6 DE$C

%i se quiere reai2ar a misma consuta7 pero sobre cientes de otro pas se puede
cambiar a sentencia7 por ejempo7 para 5er os cientes de #rgentina7 tendramos a
siguiente sentenciaE

%E,ECT Cust.Compan67 Cust.Contact7 Cust.Countr6 FR(+ Customer #% Cust
)NERE Countr6 R @#rgentina@ (RDER /T Compan6 DE%C

Caro7 e probema aqu es que tendramos que 4acer una sentencia para todos
os pases que 4a6 en a ista7 para e5itar esto7 se puede 4acer a consuta
parametr2ada7 en5iandoe en a condicin una 5ariabe precedida por e signo de
interrogacin $Q&7 por ejempo7 si se tiene e siguiente cdigoE

gcUCountr6 R @+e'ico@
Javier Leal Pgina 59 de 114
Manual de Visual Foxpro
%E,ECT Cust.Compan67 Cust.Contact7 Cust.Countr6 FR(+ Customer #% Cust
)NERE Countr6 R Pgc=Country (RDER /T Compan6 DE%C

%e obtiene a ista de cientes de +'ico7 si se quieren os de /ra2i7 simpemente
se cambia e 5aor de a 5ariabe gcUCountr6 por @/ra2i@ 6 se ejecuta a consuta.

%i a a sentencia %., e agregamos a cusua IN*! C'R$!R
1ombreDeCursor7 e resutado de a consuta se guarda en una cursor tempora7 un
cursor $Current %et (" Records& tiene as mismas caractersticas de una taba7 pero
su e'istencia no es permanente7 e'iste soamente en memoria7 a sair de VFP. e
cursor es iberado.

%i tenemos a siguiente cusuaE

%E,ECT Cust.Compan6 FR(+ Customer IN*! C'R$!R +isCientes

VFP reai2a a consuta pero a di"erencia de os ejempos anteriores no muestra
e resutado en a pantaa7 sino que o guarda en un cursor amado +isCientes7 si
acti5amos a sesin de datos7 5eremos que se creo e cursor @+isCientes@.


#4ora bien7 %., permite reai2ar consutas sobre una o mas tabas7 como se 5io
en e diagrama Entidad-Reacin7 se tiene que un ciente tiene una o muc4as
ordenes de compra 6 si se quiere obtener un istado de os cientes con sus
respecti5as ordenes de compra7 tendriamos una consuta %., de a siguiente
"ormaE

%E,ECT Customer.Compan67 (rders.(rderU!d FR(+ Customer7 (rders )NERE
Customer.CustU!d R (rders.CustU!d

Javier Leal Pgina 6 de 114
Manual de Visual Foxpro
De esta manera se obtiene una ista de os Cientes con sus ordenes de compra7
agunas otras consutas que se pueden 4acer sonE

&ista de Clientes, ordenes de compra y )endedor:

%E,ECT O
Customer.Compan67O
(rders.(rderU!d7O
Empo6ee.FirstU1ame7O
Empo6ee.astUname O
FR(+ Customer7 (rders7 Empo6ee O
)NERE O
Customer.CustU!d R (rders.CustU!d #1D O
Empo6ee.EmpU!d R (rders.EmpU!d

&ista de Clientes, ordenes de compra 2ue )endi B&auraB

%E,ECT O
Customer.Compan67O
(rders.(rderU!d7O
Empo6ee.FirstU1ame7O
Empo6ee.,astU1ame O
FR(+ Customer7 (rders7 Empo6ee O
)NERE O
Customer.CustU!d R (rders.CustU!d #1D O
Empo6ee.EmpU!d R (rders.EmpU!d #1D O
Empo6ee.FirstU1ame R @,aura@
etc7 etc.

Javier Leal Pgina 61 de 114
Manual de Visual Foxpro


lter *a"le / $%&
$inta:is &*ER *B&E / $%&
#,TER T#/,E TableName$ #DD ` #,TER ^C(,0+1_ ieldName$ ieldType
^$nield6idt- ^7 nPrecision_&_ ^10,, ` 1(T 10,,_
^CNECJ l,+pression$ ^ERR(R c!essageTe+t$__ ^DEF#0,T e,+pression$_
^PR!+#RT JET ` 01!.0E_ ^REFERE1CE% TableName% ^T#C TagName$__
^1(CPTR#1%_ ^1(V#,!D#TE_
o
#,TER T#/,E TableName$ #,TER ^C(,0+1_ ieldName% ^10,, ` 1(T 10,,_
^%ET DEF#0,T e,+pression%_ ^%ET CNECJ l,+pression% ^ERR(R c!essageTe+t%__
^DR(P DEF#0,T_ ^DR(P CNECJ_ ^1(V#,!D#TE_
o
#,TER T#/,E TableName$ ^DR(P ^C(,0+1_ ieldName0_
^%ET CNECJ l,+pression0^ERR(Rc!essageTe+t0__ ^DR(P CNECJ_
^#DD PR!+#RT JET e,+pression0 ^F(R l,+pression1_ T#C Tag1ameF_
^DR(P PR!+#RT JET_
^#DD 01!.0E e,+pression1 ^^F(R l,+pression&_ T#C TagName0__
^DR(P 01!.0E T#C TagName1_ ^#DD F(RE!C1 JET ^e,+pression&_
^F(R l,+pression7_ T#C TagName1 REFERE1CE% TableName%
^T#C TagName&__
^DR(P F(RE!C1 JET T#C TagName7 ^%#VE__
^RE1#+E C(,0+1 ieldName1 T( ieldName&_ ^1(V#,!D#TE_
Como se e'pic7 a sentencia #,TER T#/,E nos permite modi"icar a estructura de
una taba mediante cdigo.

Par6metros:

Cl6usula Descripcin
Tabe1ame8 1ombre de a taba que se 5a a aterar
#DD ^C(,0+1_ Fied1ame8 Especi"ica e nombre de campo que se 5a a agregar
#,TER ^C(,0+1_
Fied1ame8
Especi"ica e nombre de campo que se 5a a modi"icar
FiedT6pe
,etra que indica e Tipo de Campo que se 5a a
agregar7 para 5er a ista de campos de cic aqu
nFied)idt4 Tama3o de campo
DR(P ^C(,0+1_ Fied1ame> 1ombre de campo que se 5a a eiminar de a taba
RE1#+E C(,0+1
Fied1ameH T( Fied1ameG
Cambia e nombre de un campo

#gunos ejemposE

\\ #gregar un campo nue5o
#,TER T#/,E Customer #DD C(,0+1 c)eb%ite C$8;;&

\\ Eiminar un campo
#,TER T#/,E Customer DR(P C(,0+1 Cit6

Javier Leal Pgina 62 de 114
Manual de Visual Foxpro
\\ Cambiar nombre a un campo
#,TER T#/,E Customer RE1#+E C(,0+1 #ddress T( cDireccion



Create Cursor / $%&

$inta:is CRE*E C'R$!R / $%&

CRE#TE C0R%(R alias_name $"name$ type ^$precision ^7 scale_&_ ^10,, ` 1(T
10,,_ ^CNECJ l,+pression ^ERR(R c!essageTe+t__ ^DEF#0,T e,+pression_
^01!.0E_ ^1(CPTR#1%_ ^7 "name% ..._& ` FR(+ #RR#T ArrayName

Esta instruccin crea una taba tempora7 que e'iste 4asta que es cerrada7 esta
taba puede ser manipuada como cuaquier otra taba de VFP.

Par6metros:

Cl6usula Descripcin
#iasU1ame 1ombre de cursor que se 5a a crear
Fname 1ombre de campo
FiedT6pe
,etra que indica e Tipo de Campo que se 5a a
agregar7 para 5er a ista de campos de cic aqu
Para crear un cursor sobre in"ormacin de cientes tendramos a siguiente cusuaE
CRE#TE C0R%(R CursorCientes $n!dUCiente 1$8;&7 c1ombre C$>;&7 cDireccion
C$8;;&7 cTe C$G;&7 cPais C$G;&&


Create *a"le / $%&
$inta:is CRE*E *B&E / $%&
CRE#TE T#/,E ` D/F TableName$ ^1#+E LongTableName_ ^FREE_
$ieldName$ ieldType ^$nield6idt- ^7 nPrecision_&_
^10,, ` 1(T 10,,_ ^CNECJ l,+pression$ ^ERR(R c!essageTe+t$__
^DEF#0,T e,+pression$_ ^PR!+#RT JET ` 01!.0E_
^REFERE1CE% TableName% ^T#C TagName$__ ^1(CPTR#1%_
^7 ieldName% ..._ ^7 PR!+#RT JET e,+pression% T#C TagName%
`7 01!.0E e,+pression0 T#C TagName0_
^7 F(RE!C1 JET e,+pression1 T#C TagName1 ^1(D0P_ REFERE1CE%
TableName0 ^T#C TagName&__
Javier Leal Pgina 63 de 114
Manual de Visual Foxpro
^7 CNECJ l,+pression% ^ERR(R c!essageTe+t%__&` FR(+ #RR#T ArrayName
Crea una taba en disco.
Par6metros:
Cl6usula Descripcin
Tabe1ame8 1ombre de a taba que se 5a a crear
Fied1ame 1ombre de campo
FiedT6pe
,etra que indica e Tipo de Campo que se 5a a
agregar7 para 5er a ista de campos de cic aqu

%iguiendo a misma gica7 para crear una taba utii2ando %., tendramos a
siguiente cusua

\\ Creando una taba en e directorio por omisin
CRE#TE T#/,E +iTaba $Campo8 C$8;&7 CampoF 1$F;&7 Campo> C$F;&&

\\ Creando una taba en un directorio especi"icado
CRE#TE T#/,E @cEZ+isDatosZ+iTaba@ $Campo8 C$8;&7 CampoF 1$F;&7 Campo>
C$F;&&



Delete / $%&
$inta:is DE&E*E / $%&


DE,ETE FR(+ ^DatabaseName3_TableName
^)NERE ilterCondition$ ^#1D ` (R ilterCondition% ...__

Como su nombre o indica7 marca registros para borrar.

Par6metros:

Cl6usula Descripcin
^Database1ameX_Tabe1ame
1ombre de a Taba en a cua se 5an a eiminar
os registros
)NERE FiterCondition8 ^#1D ` (R
ilterCondition% ..._

Condicin gica que se debe cumpir para
marcar e registro como borrado

Nota: &os registros marcados para "orrar no son eliminados .(sicamente +asta 2ue se realiFe un
PCQ

\\ Eiminar todos os cientes que sean de +'ico
DE,ETE FR(+ Customer )NERE Countr6R@+e'ico@

Javier Leal Pgina 64 de 114
Manual de Visual Foxpro




Insert / $%&
$inta:is IN$ER* / $%&

!nserta un registro a "ina de a taba con 5aores estabecidos

!1%ERT !1T( db"_name ^$"name$ ^7 "name%7 ..._&_
V#,0E% $e,+pression$ ^7 e,+pression%7 ..._&
o
!1%ERT !1T( db"_name FR(+ #RR#T ArrayName ` FR(+ +E+V#R

Par6metros:

Cl6usula Descripcin
db"Uname
Especi"ica e nombre de a taba en a cua se 5a a
insertar e registro
$"name$ ^7 "name%7 ..._&
Especi"ica os nombres de os campos en donde os
nue5os 5aores son insertados
V#,0E% $e,+pression$ ^7
e,+pression%7 ..._&
Especi"ica os 5aores que se 5an a insertar en os
campos
Javier Leal Pgina 65 de 114
Manual de Visual Foxpro
FR(+ #RR#T #rra61ame
Especi"ica e nombre de arrego de donde se insertan
os registros

\\ !nsertar ciente ca5e @+iCte@7 Compa3a R @+i Compa3a@
!1%ERT !1T( Customer $CustU!d7Compan6& V#,0E% $@+!CTE@7@+i Compa3a@&




'pdate / $%&
$inta:is 'PD*E/$%&

0PD#TE ^DatabaseName$3_TableName$ %ET Column_Name$ R e,+pression$
^7 Column_Name% R e,+pression% ..._
)NERE ilterCondition$ ^#1D ` (R ilterCondition% ..._
#ctuai2a os 5aores de una taba

Par6metros:

Cusuas Descripcin
^DatabaseName$3_TableName$ 1ombre de a taba en a cua se 5an a 4acer
Javier Leal Pgina 66 de 114
Manual de Visual Foxpro
os cambios
%ET Column_Name$ R e,+pression$
^7 Column_Name% R
e,+pression% ..._
Especi"ica as coumnas que sern a"ectadas
con os cambios
)NERE ilterCondition$ ^#1D ` (R
ilterCondition% ..._
Especi"ica a condicin gica donde se reai2an
os cambios

\\ Cambiar e nombre de a compana
0PD#TE Customer %ET Compan6 R @+i Compa3a Con Cambios@ )NERE CustU!d R
@+!CTE@




Vistas &ocales.
Como se mencion7 VFP permite a utii2acin de comandos %., con os cuaes
tenemos a capacidad de 4acer consutas en a base de datos7 permitindonos
guardar os resutados en una taba tempora7 conocida en VFP como C'R$!R
$Curren Set ." Records&7 por ejempo para obtener e nombre de a compa3a7
Direccin 6 Pas de a taba Customer utii2aramos a siguiente instruccinE
Javier Leal Pgina 67 de 114
Manual de Visual Foxpro

%E,ECT Customer.Compan67 Customer.#ddress7 Customer.Countr6 FR(+ Customer
!1T( C0R%(R +iCursor

Esto nos creara una taba en memoria amada @0iCursor@ a cua a podemos
manipuar como cuaquier otra taba de VFP. ,a des5entaja de utii2ar Cursores es
que como se indico7 son temporaes 6 si se quisiera obtener e mismo resutado7 se
tendra que ejecutar de nue5a cuenta a instruccin %.,.

VFP cuenta con Vistas &ocales7 as cuaes tienen a misma estructura de as
consutas %., pero con a gran di"erencia que estas son guardadas en a /ase de
Datos7 estas pueden usarse en cuaquier parte sin necesidad de crear a consuta
%., de nue5o.

,as 5istas que creemos as podemos accesar en a pesta3a Data7 a e'pandir
&ocal Vie< como se 5e en a siguiente "igura.


Para a creacin de 5istas se pueden utii2ar cuaquiera de estas "ormas7
mediante cdigo o mediante e asistente para crear 5istas7 a continuacin
mostraremos cada uno de eos.
Creacin de Vistas &ocales mediante el sistente.
0na "orma "ci para empe2ar a crear 5istas ocaes es mediante e #sistente que
VFP tiene7 en reaidad cuenta con dos asistentes $Vie* )i2ard 6 1e* Vie*& aqu se
mostrarn os dos.


Vie< -iFard.
Javier Leal Pgina 68 de 114
Manual de Visual Foxpro

Empe2amos creando una 5ista sobre a taba Customer que contenga os
siguientes camposE Cust*#d7 Company7Contact 6 Country7 siempre 6 cuando
sean de !8+ico o 9ra:il. #dems queremos 5er a in"ormacin ordenada por Pa;s 6
Compan;a.

Para empe2ar7 nos posicionamos en a carpeta Data 6 en &ocal Vie<7 acto
seguido 4acemos cic en e botn Ne<7 a 4acero aparecer una pantaa
preguntndonos si queremos seeccionar e asistente $Vie* )i2ard& o una nue5a
5ista $1e* Vie*&7 seeccionamos Vie< -iFard.


# empe2ar e asistente VFP muestra a base de datos que se encuentre abierta7
as como as tabas 6 5istas que a componen7 e primer paso consiste en
seleccionar a taba 6 campos que queremos que a 5ista contenga7 en este caso
seeccionamos Customer 6 agregamos os campos Cust*#d7 Company7Contact 6
Country*

Javier Leal Pgina 69 de 114
Manual de Visual Foxpro

#4ora indicamos os +iltros que queremos que nuestra 5ista contenga7 en este
ejempo7 ingresamos os "itros para que soamente muestre os cientes que sean
de +'ico o /ra2i.


E asistente nos pregunta a4ora por a "orma como deseamos que a 5ista sea
ordenada7 seeccionamos Countr6 6 Compan6.

Javier Leal Pgina 7 de 114
Manual de Visual Foxpro

Este paso nos pregunta por e porcentaje de registros que queremos mostrar7 en
este caso simpemente 4acemos cic en siguiente.


Este es e Btimo paso7 aqu indicamos a VFP que deseamos guardar nuestra
5ista7 4acemos cic en Finis4 6 nos aparecer una pantaa preguntndonos por e
nombre de a 5ista7 en este caso )ie<=customer=<iFard=C.

Javier Leal Pgina 71 de 114
Manual de Visual Foxpro

T istoX a 5ista se 4a agregado en a base de datos7 si deseamos 5er os resutados
simpemente seeccionamos a 5ista 6 4acemos cic en bro*se.



Ne< Vie<.

Este asistente es ago parecido a anterior7 soamente que no es tan amigabe7
sin embargo7 mu6 parecido. # igua que e anterior7 nos posicionamos en a carpeta
Data 6 en &ocal Vie<7 acto seguido 4acemos cic en e botn Ne<7 a 4acero
aparecer una pantaa preguntndonos si queremos seeccionar e asistente $Vie*
)i2ard& o una nue5a 5ista $1e* Vie*&7 seeccionamos a4ora Ne< Vie<.

Javier Leal Pgina 72 de 114
Manual de Visual Foxpro

# igua que a asistente anterior7 indicamos as tabas que estn in5oucradas en
a 5ista7 seeccionamos Customer 6 4acemos cic en dd7 acto seguido cerramos a
pantaa 4aciendo cic en Close.


#4ora seleccionamos os campos que queremos que a 5ista contenga7 en este
caso seeccionamos os campos Cust*#d7 Company7Contact 6 Country*

Javier Leal Pgina 73 de 114
Manual de Visual Foxpro

1os posicionamos en a pesta3a Filter e ingresamos os "itros $Countr6 R
@+e'ico@ (R Countr6 R @/ra2i@&.


#4ora en a pesta3a !rder By seeccionamos os campos por os cuaes a 5ista
5a a ser ordenada $Countr6 6 Compan6&

Javier Leal Pgina 74 de 114
Manual de Visual Foxpro

Por Btimo 4acemos cic en e botn guardar7 VFP nos preguntar por e nombre
de a 5ista7 en este caso )ie<=customer=<iFard=I 6 cerramos e asistente.


De nue5a cuenta7 a 5ista 4a sido creada7 contiene a misma in"ormacin que a
5ista anterior7 simpemente "ue 4ec4a por otro medio.

Javier Leal Pgina 75 de 114
Manual de Visual Foxpro
Creacin de Vistas &ocales mediante Cdigo
Como 6a se mostr7 es posibe crear Vistas ,ocaes por medio de os asistentes
que o"rece VFP7 sin embargo7 4a6 ocasiones en as cuaes e asistente @se queda
corto@ ante nuestras necesidades 6 es necesario crear a 5ista mediante cdigo7 si
6a se entendi 6 comprendi a estructura %., entonces7 este paso es mu6 "ci.

Para crear 5istas ocaes por esta "orma se utii2a a cusuaE

CRE*E $%& VIE- NVie<NameO $ N$%&$E&EC*$tatementO

En os ejempos anteriores se creo una 5ista sobre a taba Customer que
contenga os siguientes camposE Cust*#d7 Company7Contact 6 Country7 siempre
6 cuando sean de !8+ico o 9ra:il. ordenadado por Pa;s 6 Compan;a.

Para 4acer esta misma 5ista mediante cdigo utii2aramos a siguiente cusuaE

CRE#TE %., V!E) Vie*UCustomerUCode #% O
%E,ECT O
Customer.CustU!d 7O
Customer.Compan6 7O
Customer.Contact 7O
Customer.Countr6 O
FR(+ O
TestDataXCustomer O
Javier Leal Pgina 76 de 114
Manual de Visual Foxpro
)NERE Customer.Countr6 R @+e'ico@ (R Customer.Countr6 R @/ra2i@ O
(RDER /T Customer.Countr67 Customer.Compan6



T istoX a 5ista 4a sido creada 6 ista para utii2arse.


Comentario:

,a instruccin de a 5ista puede ser reducida aE

CRE#TE %., V!E) Vie*UCustomerUCode #% O
%E,ECT
CustU!d 7O
Javier Leal Pgina 77 de 114
Manual de Visual Foxpro
Compan6 7O
Contact 7O
Countr6 O
FR(+ O
Customer O
)NERE Countr6 R @+e'ico@ (R Countr6 R @/ra2i@ O
(RDER /T Countr67 Compan6




Venta#as de Vistas.
Ta 5e2 nos podemos preguntar7 Ppara qu necesitamos as 5istasQ porque no
creo una consuta %., mas simpe7 bueno7 4a6 5arias buenas ra2ones por as cuaes
es aconsejabe utii2ar 5istas7 a mas importante es a rapide27 cuando se desarroa
un sistema que 5a a estar "uncionando en 5arias computadoras en red7 accesando 6
manipuando datos es mas rpido con Vistas7 6a que as 5istas contienen soamente
os campos que cumpan con as condiciones de a 5ista7 por o tanto e tr"ico de a
red es muc4o menor.

# utii2ar 5istas en nuestras "ormas simpemente agregamos en e ambiente de
datos $Data En)ironment& soamente a 5ista7 as tabas de as cuaes a 5ista es
4ec4a VFP as abre automticamente7 as que no es necesario coocar a tabas7
soamente 5istas.

%uponga que tenemos una taba de cientes de 8;7;;;7;;; de registros7 en os
cuaes 4a6 cientes de todas as nacionaidades7 6 soamente 4a6 8; registros de
cientes de Francia7 utii2ando %., tradiciona tenemos que abrir a taba 6 reai2ar
a consuta7 esto "unciona reati5amente bien cuando a apicacin corre en una soa
mquina7 pero en red imagnese7 fdeben de 5iajar os 8;7;;;7;;; de cientes para
4acer a consuta 6 obtener soamente os 8; registros de FranciaX e tiempo de
respuesta 5a a ser ento 6 si para como 4a6 tr"ico en a red pues...

# utii2ar 5istas obtenemos soamente os datos que necesitamos7 en e ejempo
anterior en 5e2 de cargar a taba 6 4acer a consuta se crea una 5ista en a cua se
e manda como parmetro e pas 6 as soamente 5iajan en a red os 8; cientes de
Francia7 ob5iamente e tiempo de respuesta es muc4o menor.

(tra de as 5entajas de a creacin de 5istas es que nos permite escaar
"cimente a una apicacin Ciente - %er5idor cambiando as 5istas ocaes por
5istas remotas.

0na caracterstica interesante de as 5istas contra os cursores es que as Vistas
son actualiFa"les7 por actuabes nos re"erimos a que os cambios que se 4acen en
a 5ista se pueden 5er re"ejados en a taba7 mientras que os cursores no. Esto nos
permite trabajar soamente con una parte de a taba 6 en5iar os cambios.

Javier Leal Pgina 78 de 114
Manual de Visual Foxpro
Crear Vistas con Par6metros
En os ejempos anteriores creamos una 5ista sobre a taba Customer que
contena os campos Cust*#d7 Company7Contact 6 Country7 se mostraban
soamente aqueos cientes que sean de +'ico o /ra2i. Vamos a crear una Vista
que muestre os mismos campos pero que acepte como parmetro e pas de cua
se quiere obtener a in"ormacin.

0na "orma como se podra pensar es crear una 5ariabe 6 esta mandara como
parmetro7 como estoE

P0/,!C gcUCountr6 \\ Es importante decara a 5ariabe que es en5iada como
parmetro de tipo PBbico
gcUCountr6 R @@


\\ %e obtienen os cientes de +'ico
gcUCountr6 R @0e:ico@
%E,ECT CustU!d7 Compan67 Contact7 Countr6 FR(+ Customer )NERE Countr6 R
gcUCountr6

\\ %e obtienen os cientes de /ra2i
gcUCountr6 R @BraFil@
%E,ECT CustU!d7 Compan67 Contact7 Countr6 FR(+ Customer )NERE Countr6 R
gcUCountr6

#un 6 que esto "uncione7 a utii2ar 5istas se tiene un peque3o cambio7 se debe
de anteponer e signo de interrogacin $Q& antes de a 5ariabe quedando de a
siguiente maneraE

gcUCountr6 R @BraFil@
%E,ECT CustU!d7 Compan67 Contact7 Countr6 FR(+ Customer )NERE Countr6 R P
gcUCountr6

Por o tanto7 a 5ista debe de quedar de a siguiente "ormaE

Javier Leal Pgina 79 de 114
Manual de Visual Foxpro
CRE#TE %., V!E)
Vie<=Parametro #% O
%E,ECT O
CustU!d 7O
Compan6 7O
Contact 7O
Countr6 O
FR(+ O
Customer O
)NERE Countr6 R PgcUCountr6 O
(RDER /T Countr67 Compan6

Esto nos crear una nue5a 5ista7 como se 5e en a "igura.

# momento de que se cambia e 5aor de a 5ariabe que se e en5a como
parmetro a a 5ista7 VFP no la actualiFa +asta 2ue se realice un RE%'ER4>?
a la )ista.

De esta "orma7 para que os cambios se 5ean re"ejados tendramos ago como
esto.

C,E#R

!F
1(T$0%ED$@Vie*UParametro@&&
%E,ECT ;
0%E @Vie*UParametro@
E1D!F
P0/,!C gcUCountr6

\\ Cientes de +'ico
gcUCountr6 R @+e'ico@
RRE%'ER4$@Vie*UParametro@&
/R()%E
\\ Cientes de /rasi
gcUCountr6 R @/ra2i@
RRE%'ER4$@Vie*UParametro@&
/R()%E
\\ Cientes de #rgentina
gcUCountr6 R @#rgentina@
RRE%'ER4$@Vie*UParametro@&
/R()%E

Javier Leal Pgina 8 de 114
Manual de Visual Foxpro

De esta "orma7 a 5ista obtiene soamente os cientes de pas que indicamos en
a 5ariabe gc=Country.


En e siguiente ejempo7 5amos a crear una "orma que contenga una ista con
todos os paises de os cientes7 a idea es que a momento de 4acer cic sobre agBn
pas re"resquemos a 5ista que acabamos de 4acer $Vie<=Parametro&.

Para empe2ar creamos una 5ista con os nombres de os paises que 4a6 en a
taba Customer7 para 4acer esto utii2amos o siguienteE


CRE#TE %., V!E) Vie*UPaises #% O
%E,ECT Countr6 D!%T!1CT O
FR(+ Customer (RDER /T Countr6

Esto nos crea una nue5a 5ista en a base de datos con os nombres de os paises
de os cientes.



#4ora en nuestro pro6ecto creamos una
nue5a "orma $=)istas.sc:&7 6 abrimos e
ambiente de datos $Data En5ironment& 4aciendo
cic con e botn derec4o en nuestra "orma 6
seeccionando Data En5ironment.

# abrirse e cudro de diogo en e cua especi"icamos as tabas que deseamos
agregar a ambiente de datos7 4acemos cic en Vie* para que muestre soamente
as 5istas que 4a6 en a base de datos. %eeccionamos Vie<=Paises7 4acemos cic
en dd7 tambin seeccionamos Vie<=Parametro7 cic en dd 6 acto seguido
cerramos e cuadro de diogo7 as dos 5istas estn agregadas en e ambiente de
datos7 como se muestra en a "igura de a derec4a.

Javier Leal Pgina 81 de 114
Manual de Visual Foxpro

#4ora insertamos en nuestra "orma una ista 6 un grid7 os amamos &st=Paises
6 5rd=Clientes respecti5amente


Cambiamos as siguientes propiedades en e grid.

\\ !ndicamos os
datos que queremos
que muestre
Record$ource R
@Vie*UParametro@
Record$ource*ype
R 8



# 4acer esto simpemente estamos igando e grid con a 5ista )ie<=parametro.

Javier Leal Pgina 82 de 114
Manual de Visual Foxpro
#4ora en a ista 4acemos
os siguientes cambios en as
propiedades.

Ro<$ource R @Vie*UPaises@
Ro<$ource*ype R F


En e e5ento Click de a ista
ingresamos e siguiente cdigoE

\\ !guaamos a 5ariabe que se
en5a como parmetro
gcUCountr6 R T4is.Vaue
\\ Re"rescamos a 5ista
RRE.0ERT$@Vie*UParametro@&

T istoX a4ora simpemente grabamos nuestra "orma 6 a ejecutamos7 a 4acer cic
en cuaquier pas de a ista7 e grid se re"resca 6 muestra soamente os cientes de
pas seeccionado7 por ejempo os cientes de CanadE


,os de Francia7 etc..

Javier Leal Pgina 83 de 114
Manual de Visual Foxpro

Este sistema en red "unciona muc4o mas rpido que cargar a taba Customer 6
4acer as consutas %., en e e5ento CicA de a ista7 adems se utii2o muc4o
menos cdigo. #dems7 si se obser5a bien7 a utii2ar 5istas no es necesario abrir a
taba de donde se reai2a a consuta7 VFP as abre automticamente.

ctualiFacin de Vistas
Como se coment7 una gran di"erencia entre as 5istas 6 os cursores reside en
que os cambios 4ec4os en un 5ista se pueden 5er re"ejados en a taba de donde
se 4ace a consuta mientras que en os cursores no.

Como todo 4a6 5arias "ormas de indicare a una 5ista que sea actuai2abe7 a
"ci 6 a manua7 aqu 5eremos as dos "ormas7 6a que agunas 5eces es necesario
cambiar as propiedades de a 5ista mediente cdigo.

En os ejempos anteriores se crearon tres 5istas que tienen e'ctamente a
misma in"ormacin7 soamente que dos "ueron creadas mediante e asistente 6 una
mediante cdigo7 en este ejempo 5amos a trabajar con estas dos 5istasE
)ie<=customer=<iFard=C 6 )ie<=customer=<iFard=I para e'picar e tema.

ctualiFacin de Vistas mediante el Dise3ador de Vistas
En esta parte se e'picar como 4acer una 5ista actuai2abe utii2ando e Dise3ador
de Vistas de VFP.

Javier Leal Pgina 84 de 114
Manual de Visual Foxpro
Empe2amos indicndoe a
una 5ista que es actuai2abe
por a "orma "ci7 en e
pro6ecto nos posicionamos
en a carpeta Data7
e'pandimos &ocal Vie<s7
seeccionamos
)ie<=customer=<iFard=C
6 4acemos cic en 0odi.y7
5eremos a siguiente
pantaaE

1os posicionamos en
a pesta3a 'pdate
Criteria7 en esta
pesta3a es donde
indicamos os campos
a5es 6 os campos
que queremos sean
actuai2abes7 5emos
una ista con os
campos que tiene a
5ista 6 en a parte
superior i2quiera un
dibujo de una a5e. E
primer paso es indicar
cu es e campo$s&
a5e de a 5ista7 en
este caso 4acemos cic
en e cuadro que est
a a i2quierda de
campo Cust=Id.

Javier Leal Pgina 85 de 114
Manual de Visual Foxpro

%i se obser5a bien7
a4ora se muestra e
cono de un pi27 esto
sir5e para indicar que
campos de a 5ista
queremos que sean
actuai2abes7 en este
caso queremos que todos
os campos sean
actuai2abes7 as que
seeccionamos todos.

E Btimo paso es mu6 importante7 aun 6 que 4a6amos
indicado e campo$s& a5e 6 os campos actuai2abes7 os
cambios no se 5ern re"ejados en a taba 4asta que
acti5emos $end $%& 'pdates7 as que o seeccionamos.

T istoX a4ora simpemente grabamos os cambios 6 5eri"icamos que os cambios
se re"ejen en a taba. #brimos a 5ista e insertamos un registro7 utii2amos este
cdigoE

!1%ERT !1T( Vie*UCustomerU)i2ardU8 $CustU!d7Compan67Contact7Countr6& O
V#,0E% $@CTEC@7@+i Compa3a@7@+i Contacto@7@+e'ico@&


%i se obser5a bien7 os cambios se 5en re"ejados en a Vista7 pero no se 5en
re"ejados en a taba7 esto se debe a que VFP no en5a os datos si e %ET de
0'&*I&!CQ$ no est en !N7 tenemos que anteponer este %ET antes de 4acer
cuaquier cambio en a 5istas7 quedara de a siguiente "ormaE

\\ %in Este %ET os datos no son en5iados
%ET +0,T!,(CJ% (1

!1%ERT !1T( Vie*UCustomerU)i2ardU8 $CustU!d7Compan67Contact7Countr6& O
V#,0E% $@CTEI@7@+i Compa3a@7@+i Contacto@7@+e'ico@&
Javier Leal Pgina 86 de 114
Manual de Visual Foxpro

!1%ERT !1T( Vie*UCustomerU)i2ardU8 $CustU!d7Compan67Contact7Countr6& O
V#,0E% $@CTEJ@7@+i (tra Compa3a@7@+i (tro Contacto@7@+e'ico@&

#4ora si7 os cambios se 5en re"ejados en a Vista 6 en a taba.


ctualiFacin de Vistas mediante cdigo
En e ejempo anterior se e'pic como 4acer una 5ista actuai2abe utii2ando e
Dise3ador de Vistas7 sin embargo7 4a6 ocasiones que necesitamos 4acer esto
mediante cdigo7 para este ejempo 5amos a utii2ar a 5ista que creamos mediante
e asistente )ie<=customer=<iFard=I.

VFP cuenta con a "uncin amada DB$E*PR!P>? $Data9ase Set Property& a
cua nos sir5e7 entre otras cosas7 para estabecer as propiedades de nuestras
tabas 6 5istas7 a sinta'is de sta "uncin esE
D/%ETPR(P$cName7 cType7 cProperty7 ePropertyValue&
Cl6usula Descripcin
c1ame
1ombre de a taba7 5ista7 cone'in7 o 5ista sobre a cua a "uncin
regresaDestabece in"ormacin
cT6pe
!ndica si se est trabajando sobre una taba7 5ista7 cone'in o 5ista7
puede tomar cuaquiera de estos 5aoresE
C(11ECT!(1
D#T#/#%E
F!E,D
T#/,E
V!E)
cPropert6
Especi"ica e nombre de a propiedad sobre a cua se 5a a 4acer e
cambio
ePropert6Vaue !ndica e 5aor que a propiedad 5a a tener

Para empe2ar7 indicamos a taba sobre a cua a 5ista est creada
Javier Leal Pgina 87 de 114
Manual de Visual Foxpro

RDB$E*PR!P$@Vie*UCustomerU)i2ardUF@7@V!E)@7@T#/,E%@7@Customer@&

#4ora indicamos os campos a5es de a 5ista

RDB$E*PR!P$@Vie*UCustomerU)i2ardUF.CustU!d@7@F!E,D@7@JETF!E,D@7.T.&

Especi"icamos a reacin que 4a6 entre os campos de a 5ista 6 os campos de a
taba

RDB$E*PR!P$@Vie*UCustomerU)i2ardUF.CustU!d@7@F!E,D@7@0PD#TE1#+E@7@Cust
omer.CustU!d@&
RDB$E*PR!P$@Vie*UCustomerU)i2ardUF.Compan6@7@F!E,D@7@0PD#TE1#+E@7@Cus
tomer.Compan6@&
RDB$E*PR!P$@Vie*UCustomerU)i2ardUF.Contact@7@F!E,D@7@0PD#TE1#+E@7@Custo
mer.Contact@&
RDB$E*PR!P$@Vie*UCustomerU)i2ardUF.Countr6@7@F!E,D@7@0PD#TE1#+E@7@Cust
omer.Countr6@&

!ndicamos os campos que deseamos sean actuai2abes.

RDB$E*PR!P$@Vie*UCustomerU)i2ardUF.CustU!d@7@F!E,D@7@0PD#T#/,E@7.T.&
RDB$E*PR!P$@Vie*UCustomerU)i2ardUF.Compan6@7@F!E,D@7@0PD#T#/,E@7.T.&
RDB$E*PR!P$@Vie*UCustomerU)i2ardUF.Contact@7@F!E,D@7@0PD#T#/,E@7.T.&
RDB$E*PR!P$@Vie*UCustomerU)i2ardUF.Countr6@7@F!E,D@7@0PD#T#/,E@7.T.&

Por Btimo7 indicamos que a 5ista es actuai2abe
RDB$E*PR!P$@Vie*UCustomerU)i2ardUF@7@V!E)@7@%E1D0PD#TE%@7.T.&


T istoX se 4a estabecido que a 5ista es actuai2abe mediante cdigo7 se graba 6
ejecuta e programa. # abrir e dise3ador de 5istas sobre a 5ista
Javier Leal Pgina 88 de 114
Manual de Visual Foxpro
Vie<=Customer=-iFard=I 6 posicionarse en a pesta3a 'pdate Criteria se 5er
que os campos 4an sido actuai2ados.


Introduccin a Vistas Remotas
0na de as grandes 5entaja que tiene VFP es a utii2acin de Vistas Remotas7
estas "uncionan igua que as Vistas ,ocaes con e'cepcin que son accedas
mediante un !DBC a otro ser5idor de /ase de Datos7 incusi5e se puede crear
5istas remotas utii2ando una base de datos VFP accesadas mediante un (D/C.

,a 5entaja de utii2ar 5istas remotas estriba en que a base de datos puede ser
S,& Server7 -.AC&/7 etc7 cuaquier base de datos siempre 6 cuando pueda ser
accesada por (D/C7 de esta "orma en VFP se puede 4acer e Front/End $o que e
usuario 5e& 6 e BacD/End 6 0iddle/-are $/ase de datos 6 regas de negocio& en
otra pata"orma.

%e 4a incuido una carpeta amada Data Remoto en donde 4a6 una base de
datos VFP7 5amos a empe2ar 4aciendo 5istas remotas sobre bases de datos de VFP7
de a4 se pasa a otro ser5idor de base de datos7 %.,7 (R#C,E7 etc..

En sta carpeta 4a6 una base de datos amada Bdd Remoto.d"c a cua tiene
soamente una taba amada Clientes.d".7 esta taba tiene os siguientes camposE

Javier Leal Pgina 89 de 114
Manual de Visual Foxpro
Campo *ipo Descripcin
n!dUCiente Entero !d de Ciente
c1ombre Caracter 1ombre de Ciente
cDireccion Caracter Direccin de Ciente
cCoonia Caracter Coonia de Ciente
cCiudad Caracter Ciudad de Ciente
cEstado Caracter Estado de Ciente
cRFC Caracter RFC de Ciente

/sicamente7 os pasos 4a seguir para crear una 5ista remota son as siguientesE
Creacin de (D/C a a base de datos deseada
Creacin de Cone'in a (D/C Creado
o Creacin de Vistas utii2ando a Cone'in +ediante #sistente
o Creacin de Vistas utii2ando a Cone'in +ediante Cdigo
Creacin de !DBC a la Base de Datos deseada.
Empe2amos creando una cone'in !DBC a a base de datos Bdd Remoto.d"c7
entramos a Pane de Contro de )indo*s 7 7erramientras dministrati)as $,n
6indows %''') <P&7 ejecutamos !r(genes de Datos $(D/C&.


1os posicionamos en a pesta3a $ystem D$N 6 4acemos cic en dd.

Javier Leal Pgina 9 de 114
Manual de Visual Foxpro

#4ora indicamos e tipo de "uente de datos7 como en este ejempo 5amos a
accesar una base de datos VFP7 buscamos 6 seeccionamos 0icroso.t Visual
Fo:Pro Dri)er7 cic en FinaliFar.


En e campo (rigen de Datos ingresamos e nombre que deseamos dare a
nuestra cone'in (D/C7 ingresamos 0i=!DBC=Fo:7 en a descripcin escribimos
una peque3a re"erencia7 ingresamos E#emplo a cone:in VFP7 por Btimo7
ingresamos a ruta de a base de datos $en este caso CEZCurso VFP=ZData RemotoZ/dd
remoto.dbc&7 quedando de a siguiente manera 6 4acemos cic en #ceptarE

Javier Leal Pgina 91 de 114
Manual de Visual Foxpro

T istoX 6a 4emos creado a cone'in !DBC7 a4ora e siguiente paso es utii2ara.


Creacin de Cone:in al !DBC Creado

1uestro siguiente paso es crear en VFP una cone'in a (D/C. En nuestro
pro6ecto7 en a carpeta Data 4a6 una seccin amada Connections. 1os
posicionamos en Connections 6 4acemos cic en Ne<7 aparecer a pantaa
Dise3ador de Cone'iones.

Javier Leal Pgina 92 de 114
Manual de Visual Foxpro

# 4acer cic en e Combo/o' Data $ource7 se despiegan todas as cone'iones
(D/C que se tengan registradas en a mquina7 seeccionamos 0i=!DBC=Fo:. En
0serid7 Pass*ord 6 Database o dejamos en banco7 6a que7 por o pronto as bases
de datos de VFP no manejan este tipo de seguridad.


%i queremos asegurarnos que
a cone'in sea e'itosa podemos
4acer cic en Veri.y Connection7
si aparece e siguiente mensaje
entonces nuestra cone'in no
presenta ningBn probema.

#4ora cerramos a pantaa7 VFP pregunta si deseamos grabar a cone'in7 a
indicare que si nos pregunta por e nombre de a cone'in7 en este caso
Con=0i=!d"c=Fo:.


(A7 6a 4emos creado a cone'in a
nuestro (D/C7 #4ora simpemente
creamos nuestras 5istas remotas basadas
en a cone'in7 e proceso es mu6
parecido a as 5istas ocaes con a Bnica
di"erencia que 5amos a indicare una
cone:in.


Javier Leal Pgina 93 de 114
Manual de Visual Foxpro
Podemos crear as 5istas mediente e asistente de 5istas remotas o mediante
cdigo7 a continuacin se e'pica cada una de eas.

Creacin de Vistas Remotas mediante el sistente
0na "orma "ci para empe2ar a crear 5istas remotas es mediante e #sistente
que VFP tiene) Empe2amos creando una 5ista sobre a taba Ciente que contenga
os siguientes camposE nId=Cliente7 cNom"re7 cCiudad 6 cEstado. 6 que a
in"ormacin est ordenada nombre de ciente.

Para empe2ar7 nos posicionamos en a carpeta Data 6 en Remote Vie<7 acto
seguido 4acemos cic en e botn Ne<7 a 4acero aparecer una pantaa
preguntndonos sobre que cone'in queremos trabajar7 seeccionamos
Con=0i=!DBC=Fo: 6 4acemos cic en (A.


VFP abre a cone'in 6 muestra as tabas que a base de datos contenga7 en
este ejempo soamente a taba Ciente7 a seeccionamos7 4acemos cic en dd 6
en Close.

Javier Leal Pgina 94 de 114
Manual de Visual Foxpro

,a taba Ciente 4a sido seeccionada7 a4ora como en as 5istas ocaes7
seeccionamos os campos que a 5ista 5a a contener7 en este caso seeccionamos
nId=Cliente7 cNom"re7 cCiudad 6 cEstado.


1os posicionamos en a carpeta !rder By 6 seeccionamos Ciente.cNom"re.

Javier Leal Pgina 95 de 114
Manual de Visual Foxpro

#4ora simpemente grabamos a 5ista7 VFP nos pregunta por e nombre que e
queremos dar7 ingresamos )ie<=cliente=<iFard 6 istoX nuestra 5ista 4a sido
creada7 a podemos utii2ar en nuestras apicaciones7 tiene as mismas
"uncionaidades que a 5istas oca.


Creacin de Vistas Remotas mediante Cdigo
Javier Leal Pgina 96 de 114
Manual de Visual Foxpro
,a creacin de Vistas Remotas mediante cdigo es mu6 parecida a a de Vistas
,ocaes7 a %inta'is que se utii2a esE
CRE#TE %., V!E) ^ViewName _ ^RE+(TE_
^C(11ECT!(1 ConnectionName ^%N#RE_ ` C(11ECT!(1 DataSourceName_
^#% S=LS,L,CTStatement_
Cl6usula Descripcin
Vie*1ame 1ombre de a Vista
RE+(TE !ndica que se trata de una 5ista remota
C(11ECT!(1
ConnectionName
Especi"ca e nombre de a cone'in a utii2ar
%N#RE
%i se especi"ica7 VFP utii2ar una cone'in compartida si es
que o 4a6
C(11ECT!(1
DataSourceName
1ombre de a Cone'in (D/C
#%
S=LS,L,CTStatement
!nstruccin %., a ejecutar.

De esta "orma7 para crear una 5ista remota igua que contenga os siguientes
campos de a taba CienteE nId=Cliente7 cNom"re7 cCiudad 6 cEstado. 6 que a
in"ormacin est ordenada nombre de ciente7 se utii2ara o siguienteE

CRE#TE %., V!E) Vie*UCienteUCode O
RE+(TE C(11ECT!(1
ConU+iU(D/CUFo' O
#% %E,ECT O
n!dUCiente 7O
c1ombre 7O
cCiudad 7O
cEstado O
FR(+ Ciente O
(RDER /T c1ombre

T ,istoX a cone'in 4a sidro creada 6 est ista para utii2ase.


Javier Leal Pgina 97 de 114
Manual de Visual Foxpro

Introduccin $%& Pass/*+roug+ >$P*?

Cuando se desarroa una apicacin Ciente-%er5idor $CD%& en VFP se puede
4acer por cuaquiera de estas dos "ormasE
Vistas Remotas
$%& Pas/*+roug+
,as Vistas Remotas nos permite "cimente manipuar a in"ormacin de cuaquier
base de datos por medio de un !DBC7 como se e'pic podemos crear 5istas
parametri2abes 6Do actuai2abes 6 simpemente mandaras amar.

En cambio7 ,a tecnooga %PT permite en5iar instrucciones %., a %er5idor
mientras que as 5istas no. Debido a que e %er5idor es e que reai2a as
instrucciones7 %PT tiene buen desempe3o en CD%.

#gunas comparaciones entre Vistas Remotas 6 %PT sonE

Vista Remota $%& Pass/*+roug+
/asado en instrucciones %.,
/asado en cuaquier instruccin nati5a %., de
ser5idor7 permite a ejecucin de Procedimientos
#macenadas $%tore Procedures& en e %er5idor
Puede ser igado
automticamente a os controes
de VFP en tiempo de dise3o
1o puede ser igado automticamente a os
controes de VFP en tiempo de dise3o
1o puede ejecutar comandos
D,, en e ser5idor
%e se puede ejecutar comandos D,, en e ser5idor
(btiene soamente un set de
datos
(btiene uno o 5arios set de datos
Creacin de cone'iones
automticamente
%e tiene que crear 6 administras as cone'iones
Contiene instrucciones para
reai2ar actuai2aciones7 agregar
6 eiminar en automtico
1o contiene instruccion en automtico para 4acer
actuai2aciones
1o administra manejo de
Transacciones
#dministra manejo de Transacciones
#macena de"inicin de Vistas en
/ase de Datos
,as de"iniciones son temporaes

%PT tiene as siguientes 5entajas sobre as 5istas remotasE
Permite reai2ar Procedimientos #macenados 6 "unciones de ser5idor
Permite ejecutar comandos nati5os de %er5idor
%e tiene mas contro sobre as actuai2aciones

%in embargo7 tiene as siguientes des5entajasE
Javier Leal Pgina 98 de 114
Manual de Visual Foxpro
Por omisin %PT siempre regresa un set de datos no acutii2abe que es
amacenado en una 5ista7 4a6 que 4acero actuai2abe utii2ando
C0R%(R%ETPR(P$&
,as instrucciones deben de ser escritas en un programa o en a 5entana de
comandos7 a contrario de ambiente gr"ico de as 5istas remotas
%e debe de crear 6 administrar a cone'in
%iempre surge a duda sobre cu tcnica utii2ar7 si 5istas remotas s %PT7 a
respuesta es.. depende. Todo depende de a necesidad de sistema7 se pueden
utii2ar as dos tcnicas en e mismo pro6ecto sin ningBn probema. ,a siguiente
"igura e'pica a di"erencia en os accesos entre as Vistas Remotas 6 %PT.



$P* Instrucciones B6sicas
Como se coment7 contamos con una base de datos amada Bdd Remoto.d"c
ocai2ada en a carpeta Data Remoto7 5amos a empe2ar e'picando e uso de %PT
con una base de datos VFP.

,o primero que se debe de 4acer en %PT es crear una cone'in7 esto se 4ace con
a instruccin $%&C!NNEC*$&7 a continuacin se e'pica a sinta'isE

$%&C!NNEC*>N%ataSourceame, c0ser#%, cPass!ord M
cConnectionameO?

Cl6usula Descripcin
Javier Leal Pgina 99 de 114
Manual de Visual Foxpro
DataSourceName !ndica e nombre de a cone'in (D/C
c*serID 1ombre de usuario para entrar a a /DD
cPassword Contrase3a para entrar a a /DD
cConnectionName
1ombre de a Cone'in creada con
CRE#TE C(11ECT!(1

$&%C!NNEC*$& regresa un nBmero indicando a ca5e de a cone'in7 si regresa
un nBmero positi5o a cone'in "ue e'itosa.

Para desconectar a cone'in utii2amos $%&DI$C!NNEC*$nNumero_Cone+ion&

Para conectarnos a (D/C que creamos $0i=!DBC=Fo:& utii2amos cuaquiera
de estas dos instrucciones.

\\ Cone'in por medio de (D/C
,nUConnect8 R %.,C(11ECT$@0i=!d"c=Fo:@&
Q ,nUConnect8
\\ Cone'in mediante una Cone'in VFP
,nUConnectF R %.,C(11ECT$@Con=0i=!d"c=Fo:@&
Q ,nUConnectF

# 4acer esto contamos con una cone'in acti5a a nuestro (D/C7 a4ora
podemos manipuar e ser5idor utii2ando a instruccin $%&EGEC>?7 a sinta'is es
a siguienteE
$%&EGEC>nConnectionHandle, NcS,&Command, NcCursorameOO?
Cl6usula Descripcin
nConnection2andle
Especi"ica e nBmero de cone'in regresada por
%.,C(11ECT$&
cS=LCommand !ndica e comando %., a ejecutar en e ser5idor
cCursorName
Especi"ica e nombre de cursor en e cua os resutados son
en5iados

Estos son agunos ejempos de uso de %PTE
Consuta de in"ormacin
Ejecucin de comandos en %er5idor
$P* Consulta de In.ormacin
En este ejempo7 crearemos una consuta %TP 6 a cua contiene os mismos
resutados que as 5istas remotas creadas.

C,E#R
\\ Creamos a Cone'in
,nUCone'ion R %.,C(11ECT$@+iU(D/CUFo'@&
\\ Ejecutamos a consuta
R%.,E]EC$,nUCone'ion7@%E,ECT O
Javier Leal Pgina 1 de 114
Manual de Visual Foxpro
n!dUCiente7O
c1ombre7O
cCiudad7O
cEstado O
FR(+ Ciente (RDER /T c1ombre@7@0iCursor$P*@&
\\ %e muestra a in"ormacin
%E,ECT 0iCursor$P*
/R()
\\ %e desconecta
R%.,D!%C(11ECT$,nUCone'ion&

Este cdigo7 como se muestra reai2a a consuta %., 6 esta a guarda en un
cursor tempora amado en este caso 0iCursor$*P.

$P* E#ecucin de Comandos en el $er)idor
0na de as grandes 5entajas de utii2ar $P* es a capacidad que esta tiene de
en5iar comandos a ser5idor7 os comandos no se imitan soamente a consutas 6
actuai2aciones7 sino que podemos ejecutar comandos 6 procedimientos nati)os
de ser5idor.

Nemos creado una cone'in (D/C a un ser5idor de Datos de VFP amado
0i=!DBC=Fo:7 en este ejempo crearemos una taba en e ser5idor utii2ando %PT.

C,E#R
\\ Creamos a Cone'in
nConnect R %.,C(11ECT$@0i=!DBC=Fo:@&
Javier Leal Pgina 11 de 114
Manual de Visual Foxpro
\\ %e en5a e comando
%.,E]EC$ nConnect7 @CRE*E *B&E RC:9Curso VFP;9Data Remoto9ciudadR
> cciudad C>CA??@ &
\\ !nsertamos 5arios registros
R %.,E]EC$nConnect7@!1%ERT !1T( Ciudad $cCiudad& V#,0E% $g+(1TERRETg&@&
R %.,E]EC$nConnect7@!1%ERT !1T( Ciudad $cCiudad& V#,0E% $g+(1C,(V#g&@&
R %.,E]EC$nConnect7@!1%ERT !1T( Ciudad $cCiudad& V#,0E% $gC0#D#,#<#R#g&@&
R %.,E]EC$nConnect7@!1%ERT !1T( Ciudad $cCiudad& V#,0E% $gP0E/,#g&@&
R %.,E]EC$nConnect7@!1%ERT !1T( Ciudad $cCiudad& V#,0E% $g#C#P0,C(g&@&
R %.,E]EC$nConnect7@!1%ERT !1T( Ciudad $cCiudad& V#,0E% $gC#1C01g&@&
\\ Reai2amos a consuta
R%.,E]EC$nConnect7@%E,ECT [ FR(+ Ciudad (RDER /T cCiudad@7@+isCiudades@&
\\ %e muestra a !n"ormacin
%E,ECT +isCiudades
/R()
\\ 1os desconectamos
%.,D!%C(11ECT$nConnect&


#dems7 si agregamos a base de datos Bdd Remoto a pro6ecto7 podemos
asegurarnos que a taba Ciudad "ue creada en a ubicacin que indicamos7 6 que
adems7 tiene a in"ormacin que e en5iamos.

Javier Leal Pgina 12 de 114
Manual de Visual Foxpro

'tiler(as.
'tiler(as

En esta seccin se 4an incido utieras 6 documentos de gran a6uda en VFP.
Foros de Discusin >Ne<s?

# continuacin se e'pica paso por paso como con"igurar 0icroso.t !utlooD
E:press >!E? para eer os grupos de trabajo. ,os grupos de trabajo son
comunidades 5irtuaes en as cuaes se 4acen preguntas 6 se tienen $en a ma6ora
de as 5eces& respuesta7 es de gran a6uda 6a que estas preguntando a una gran
cantidad de gente 6 seguramente te 5an a responder.

8E En !E %eeecionar NerramientasDCuentas

Cic en e botn @gregar@ 6 seeccionar Noticias... como en a siguiente pantaaE

Javier Leal Pgina 13 de 114
Manual de Visual Foxpro

F. #cto seguido !E nos pregunta e 1ombre que queremos que apare2ca en e "oro7
o escribimos 6 4acemos cic en %iguiente.


>. #4ora escribimos nuestro correo eectrnico 6 4acemos cic en %iguiente

Javier Leal Pgina 14 de 114
Manual de Visual Foxpro

H. !ngresamos e nombre de %er5idor de 1oticias $11TP&7 en este ejempo es e
Foro de Discusin de +icroso"t7 as que escribiremosE msne<s.microso.t.com 6
4acemos cic en %iguiente.


G. (A7 a4ora 4acemos cic en Finai2ar

Javier Leal Pgina 15 de 114
Manual de Visual Foxpro

:. E %er5idor de 1oticias 6a se registro7 cic en e botn Cerrar.


# intentar cerrar esta pantaa !E nos pregunta si queremos descargar os grupos
de noticias de ser5idor de noticias7 cic en %i.



!E Descarga a ista de os Crupos de 1oticias que tiene e %er5idor de 1oticias
$+icroso"t en este caso..&

Javier Leal Pgina 16 de 114
Manual de Visual Foxpro

T aparece a ista de os grupos de noticias que tiene e ser5idor de noticias..


#4ora simpemente seeccionamos de a ista os grupos que queremos eer7 por
ejempo si queremos eer os grupos de noticias de Fo'Pro7 en e cuadro que dice
@+ostras os grupos...@ escribimosE

microso.t.pu"lic.es.).o:pro

Nota: Escri"ir el grupo en min8sculas, es Case/$ensiti)e.

T 4acemos cic en e botn @$uscri"ir@ como en a siguiente "igura

Javier Leal Pgina 17 de 114
Manual de Visual Foxpro

T as sucesi5amente nos inscribimos a os "oros que queramos eer 6 4acemos cic
en e botn #ceptar
Estos son agunos grupos de trabajo que pueden ser BtiesE

Visua /asic microso.t.pu"lic.es.)"
Visua C microso.t.pu"lic.es.)c
E'ce microso.t.pu"lic.es.e:cel
#ccess microso.t.pu"lic.es.access
)ord microso.t.pu"lic.es.<ord
FrontPage microso.t.pu"lic.es..rontpage
#%P microso.t.pu"lic.es.asp

T por Btimo7 soamente 4acemos cic en e "oro 6 se empie2an a descargar os
mensajes7 a eer...

Javier Leal Pgina 18 de 114
Manual de Visual Foxpro

%i quieres conocer mas sobre e "uncionamiento de (E7 5isita as siguientes igas
e'pican a detae muc4as cosas.

4ttpEDDinsideoe.tomsterdam.comD
4ttpEDDinsideoe.tomsterdam.comD"aqsDinde'.4tmh4o*
4ttpEDDinsideoe.tomsterdam.comD"aqsD*4at.4tm
4ttpEDDinsideoe.tomsterdam.comD"aqsD*46.4tm


(tra "orma con a cua se puede suscribir a os "oros $de +icroso"t& es entrar a a
siguiente pginaE

4ttpEDD***.microso"t.comDatamDmsdnDcomunidadDgruposD


%i se 4ace cic en a coumna i2quierda se instaa e "oro seeccionado
automticamente en (utooA E'press7 si quiere eer e "oro por medio de !nternet
E'porer entonces de cic en a coumna derec4a 6 se podr eer e "oro por medio
de !nternet E'porer como en a siguiente "iguraE

Javier Leal Pgina 19 de 114
Manual de Visual Foxpro




0ostrar E:plorador de Internet en Formas VFP...
# continuacin se e'pica
como insertar 6 con"igurar e
contro @E:plorador de -e"
de 0icroso.t@ en una "orma.
E utii2ar e e'porador en
nuestras "ormas permitimos
que os usuarios puedan
na5egar en !nternet dentro de
nuestra apicacin7 poner e
manua de un sistema en a
red 6 poner una pantaa de
a6uda que a momento de
cargarse se conecte a una
determinada pgina 6 que
muestre a a6uda7 etc.. 4a6
muc4os usos que se e puede
dar.

E primer paso es e de
agregar e contro
@E:plorador de -e" de
0icroso.t@ en nuestra barra
de 4erramientas.
Para 4acer esto7 en e menB
Javier Leal Pgina 11 de 114
Manual de Visual Foxpro
principa entramos en
*oolsD!ptions 6 nos
posicionamos en a pesta3a
@Controls@7 a4 seeccionamos
@cti)eG Controls@ en esta
pesta3a se muestra os
componentes que e sistema
tiene7 buscamos 6
seeccionamos e contro que
amado @E:plorador de -e"
de 0icroso.t@7 como se
muestra en a siguiente
"igura7 6 damos cic en @$et
s De.ault@

(A7 a4ora e siguiente paso es e de insertar este contro en nuestra "orma7
creamos una "orma e insertamos un Te't/o' $*:t='R&&7 un /otn
$Cmd=Na)igate& 6 un E'porador de )eb de +icroso"t $oE:plorador& quedando
de a siguiente maneraE
E primer paso es poner en e e5ento .e+res1 de objeto oE:plorador a
siguiente instruccinE N!DEF'&*7 6a que sin esta no "unciona.

#4ora en e e5ento Click de /otn Cmd=Na)igate ponemos e siguiente cdigoE

,cU0R, R
#,,TR!+$TN!%F(R+.T'tU0R,.Vaue&
\\ (btenemos a direccin a donde
na5egar
TN!%F(R+.oE'porador.1a5igate$,cU0R,& \\ 1a5egamos a a direccin..

T istoX a4ora simpemente ejecutamos a "orma7 escribimos una direccin en e
cuadro de te'to 6 damos cic en e botn 6 a pgina se mostrar en a "orma.

Javier Leal Pgina 111 de 114
Manual de Visual Foxpro

$+ellE:ec
%4eE'ec es una poderosa "uncin que podemos incorporar en nuestras
apicaciones7 manda amar a programa que esta asociado a en un determinado
arc4i5o7 si por ejempo mandamos amar $+ellE:ec$@cEZmisdatos.'s@& busca cua
es e programa que abre e arc4i5o @misdatos.'s@ que en este caso es E'ce7 abre
e E'ce con e arc4i5o misdatos.'s.

[X[
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
[[[[[[[[[[[[[[[[[[[[[
[X[ %4eE'ec
[X[
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
[[[[[[[[[[[[[[[[[[[[[

F01CT!(1 %4eE'ec
,P#R#+ETER c,inA7 c#ction7 cParms
c#ction R !!F$E+PTT$c#ction&7@(pen@7c#ction&
cParms R !!F$E+PTT$cParms&7@@7cParms&
DEC,#RE !1TECER %4eE'ecute O
!1 %NE,,>F.d O
!1TECER n)inNande 7O
%TR!1C c(peration 7O
%TR!1C cFie1ame 7O
%TR!1C cParameters 7O
%TR!1C cDirector6 7O
Javier Leal Pgina 112 de 114
Manual de Visual Foxpro
!1TECER n%4o*)indo*
DEC,#RE !1TECER Find)indo* O
!1 )!1>F#P! O
%TR!1C c1u7 %TR!1C c)in1ame
RET0R1 %4eE'ecute$Find)indo*$;7U%CREE1.Caption& 7O
c#ction7c,inA7O
cParms7%T%$F;F>&78&
E1DF01 \\ %4eE'ec
[X[
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
[[[[[[[[[[[[[[[[[[[[[
[X[
[X[
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
[[[[[[[[[[[[[[[[[[[[[


#gunos usosE

0andar Correo Electrnico:
%4eE'ec$@maitoEjuanpere2bmai.com@&

"rir E:plorador de -indo<s:
%4eE'ec$@cEZ@&

#brir !nternet E'porer
%4eE'ec$@4ttpEDD***.microso"t.com@&

etc7 etc.

(tra "orma de utii2aro es por medio de (bjeto %4e.

oRCRE#TE(/<ECT$@%4e.#ppication@&
o.(pen$@4ttpEDD***.microso"t.com@&
o.%etTime$&
o.%4utdo*n)indo*s$&
o.FieRun$&
o.FindFies$&
o.FindComputer$&
o.+inimi2e#$&


Javier Leal Pgina 113 de 114
Manual de Visual Foxpro
Re.erencias y &igas de 'tilidad.
Foro de Discusin VFP
4ttpEDDcommunities.microso"t.comDne*sgroupsDde"aut.aspQ
!CPR,atam\s,C!DRes\1e*sCroupRmicroso"t.pubic.es.5"o'pro

PortalFo:
4ttpEDD***.porta"o'.com

7ilmarF
4ttpEDD***.geocities.comD4imar2D5"o'proD

,im Boot+
4ttpEDD***.jamesboot4.comD

le: Feldstein
4ttpEDD***."edstein.netD5"ptipsUsp.asp

Re)ista Fo:Press
4ttpEDD***."press.com

RicD $tr+al
4ttpEDD***.*est-*ind.com

'ni)ersal *+read
4ttpEDD***.uni5ersat4read.comD

0ane#o de Datos con 0VFP y 0$DE >,osH 5. $amper C.?
4ttpEDD***.microso"t.comDspanis4DmsdnDarticuosDarc4i5oDmtjD5oicesDart?9.asp

-iDis
4ttpEDD"o'.*iAis.com
Javier Leal Pgina 114 de 114

Anda mungkin juga menyukai