Visual fox pro 9.0 y sqlserver 2005
Upcoming SlideShare
Loading in...5
×
 

Visual fox pro 9.0 y sqlserver 2005

on

  • 1,241 views

Visual FoxPro 9.0 y SqlServer 2005 - Desprotegido - Se puede Imprimir

Visual FoxPro 9.0 y SqlServer 2005 - Desprotegido - Se puede Imprimir

Statistics

Views

Total Views
1,241
Views on SlideShare
1,241
Embed Views
0

Actions

Likes
0
Downloads
38
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Visual fox pro 9.0 y sqlserver 2005 Visual fox pro 9.0 y sqlserver 2005 Document Transcript

  • Visual FoxPro 9.0 y SqlServer 200 5DATACAPAS1- - ---.I I+ ~tI 1NEG O CI O I CO NEX ION 1IN T ERFAZIIo .IIEn es te diseño de capas se puede observar claramente que no existe una relación directaentre la capa interfaz Vla capa de datos, para que dicha relación exista tiene que transitar através de una capa de negocies V seguidamente de una capa conexión, es ta última secomunica mediante los SP (Stored Procedures) a la data,Ejemplos de código que van en diferentes capasl a capa interfaz está basada en clases visuales de VFP, la de ne gocios en clase no visuales deVFP y para esta capa de tipo Ncustom", la de conexión también utilizará una clase no visual VFPde tipo "ses-ten" Vla de da ta será un SqlServer que puede ser 2000 o 200S. Cabe resaltar quecualquiera de las capas puede ser reemplazada por el tipo que uds. crean convenien te.Para el ejemplo tenemos un objeto de ne gocio llamado "mtc bjetc" el cual tiene los siguientesmétodos: selecciona, inserta, edita, borra, revisa Vlas propiedades _alias, campof. campoz.campoj., Con lo cual tendríamos:• InterfaceEn nuestro formulario tenemos un método refrescacrid[), con un código similar:Thislorm,grdatal.recordsource=nnThlsfcrm.miobjeto.seleccdcna ()Thislorm,grdatal.recordsource=thislorm,miobjeto._aliasPágina 1
  • Visual FoxPro 9.0 y SqlServer 2005• NegocioEste objeto tiene el método selecciona, ruyo código se ría:Cone.execsp("Mi_Stored_Procedure","7 paramt,7param2,7param3", "mtcurscr"¡This. aüas-vmtcursor"• ConexiónEste objeto tiene un método execsp. su código tendría que ser:- sqlexeuncon.texecute stered prccedure- parémetrcs","_w rsor")• DataEsta capa constará de dos parles {SP, Tablas):o SP@paraml as int@param2 as int@param3 as intSelect campo l , campcz. campea. campo4 from mitabla wherecampox=@paraml and campoy=@~aram2 and campo¡=@param3o Tablala labia se llama mitabla, con sus campos: campct. campoz, campea. campee.campox. campov. carnpozPágina 2
  • Visual FoxPro 9.0 y SqlServer 2005CREANDO LA CAPA DE DATOSDISEÑO DE TABLAS~ Micro.oft SQL s.....~, M~n~g~m~nI Sludio I - e )(A".......o Ed,tar v., Proy. cto D".,í~do, d, t. bl~, D" 9r.m. <l. b ~!< d. doto, H, rr. ",.."t., V, ,,ton.Comunid.d Ayuda; XIIrodudo -.""deto._Focturo, ~ """,~ent ec~be _FactlJl"~•, ~ .• ~ ~~ o ,~,. ~... .o:,",,, ,~ .••"l • ..,... (6 tAAlnuNÚ"[;o:;;;,<"="C"C9 o:I3~9C.C,c,[,=1I.. L::;¡ BOl" d. d..o.~ D:l B..., d. d.to, d<l"w".~ Cil lnm ,," n" M b.,,,<l. d tM.. lJ ",ib." d. doto,G.J [)i".I" m~ d. b. s< d. dato,.. CJ h bl..~ C;¡ T. l>I.. dd ,,",m.~ D dbo"I>.nt.~ D dbo,rob._h et",.~ D dbo,producto~ D dbo,d". J.ctu..~ L;,¡ Vi ,,~,~ CJ <;;" o mm o,~ C3I Pm,,"".ion•~ d N" ",. comu~~ 1[)J 1ITi ti] [;) 1~ 1~ :l!J r.!~ 1d " 1Bl E 1) lJ> ~ ..Lj Q tJ VI !3l ">" 1..:i 1 a~ 1V¡". d. t,b lp I % ;~ .tj Ig _g <::3 1J5%.:/ MANTUNEz:;;" b,;-...... - [),~g;~ ;., ._olCrearemos la siguien te base de da tos "mlbasededatas". YIas tablas serán las siguientes :Página 3
  • Visual FoxPro 9.0 y SqlServe r 2005clientecodcli int pknom cli varchar 50dircli varchar OteIcli char(10)~ productolEErocod intpronom va rc har 50prounm ehar 1 )ENTORNO Sa l SERVER 2005cabe factura;d tact int k"" f act char 10te e tect datetimecodcli int ~data factu ra;d dfact in t k"tact int &proco int &cantidad numenc 12 3re c¡o numenc 12 ,2total calcula doJ. th ,. " ",. " I Lj) t:.i tñ tíl L:l¡ I ;!j f;!i e¿~ 1nI (1 I~ ¡:;¡ f>l. tJ; ~ ~; 1M ", b"," d "~, , JO"." ,,1 . ~:; IIIl. ,";. ¡f" "J qMAJH 1INFI . ,II...,~•.- Ql 0 .. 1_~ 11( 0 00" " I 1 •• ~ MMiTUf-I,,,""n~~OC"""" """".-~~ ~ 110,., , Jot.,• CI Ro.., ... ~..ú,~.. ">l.• C"¡ o,,.,,",.., ... h." ,... ....o,• lJ ",, ~., <d.d.t>!f t:..l D ,.~",»., ., b", ~, d""• C:l " N", ::;¡ l ..","" ¡¡,,.m.f f:.I v,," ,f Ci Sno"""",f U P ,o ~.on• t:;.¡ Sm i" B.o~<o~ Cl AIrn."","";"",,f ÜI """n.o• r:;¡, i<9 1O ol.~• CJ o"..",.,"""I~ ,:r. . " ~,>. ~ ",l " , Col 1 ( .., ¡liSEste será el entorno de trabajo de nuestra capa de datos:DEFINIEN DO INDICE IDENTIDADPágina 4
  • Visual FoxPro 9.0 y SqlServer 2005•....." . ,(")v..., o(oo)" ",(l O),El .,,,,,, IK.oo: ~ ~ e""""8 tspecl ",",oo ~ tdorJtd ,¡(Ijert~<d: "Irtrene rto !le ~erJl 1~."---~~~~~=i~I(Idonbdod)•.• Ii) MN .rr.NI ISOl 0;." .. ,~ m,-"1• I:..l ¡;,,,, <l, o",,,,~ Q ¡¡.,," rl, <l.,", ".. l~ Q lo" "" ".." .... b""<I. d..,,~ ti mib"• •i.d.,,,,~ :;¡¡ r"9 d. N" d. <4""• ::;¡ T.." .,~ DI T"-1.. dd " ".",.~ :;¡¡ h"~ ::... ,"ú.. mMe ::..¡ f"9""~ ::.¡ o;,.....,,,l<ol.,~ ::J Alm." m m ""o• :::.. 9"",1. <1, C,¡ ""9,.<&.d• t.t 0.".... 0..",,<1.,:r:.•, ,,~~ _< ~ l •ti,,,Las ventajas de utilizar este lipo de campo como NPrimary Kev", tiene muchas ventajas tantode libram os de pensar, ¿como hago mi programa de correts uvos>, y adem ás ayuda alperformance de la base de dates tanto al momento de grabar como al momento de hacer lasrelaciones y b úsquedas ya que el índice Pnmarv Key" ta mbién es un índice tipo cluster,En el graflcc se ve como se ve la creación de la tabla y la definición del campo identidad y elincremenlo en este case de 1 en 1 y empieza en 1 el oorrela ñvo.En lo personal poner un número pequeño como en este case a los dientes, facilita el uso paral o ~ usuertcs, es má s práctico recordar números pequeños que cedlflcacíc nes conpseudccodigos o procedrmtee tos complejos.Algu no~ coma ndos de utilidad al manejar este tipo de campes :DIlCC C HECK IDE NTt a b l e~n am e1 , 1t/ORE5 E ED,[ WI TH NO_I NF OMS GSE j e mp l o :DIlCC C HE;CK I DE; NT ( " l i e n~e , RES E E;D, 0 1 .Página 5
  • Visual FoxPro 9.0 y SqlServe r 2005R~5~t~~r~ ~ l c~ mpo id~~ t id~ d ~ O .IN S ~ R T I NTO c li~nt~5v ~lu~ 5( Ju~n P ~ r~z , mi dir~ccion, 88 37 7 6 6 6 )S EL~C T @@ID E NTI TYDicho "Selert" devolverá el número de identidad aslgnadc.DEFINIENDO íNDICES DEBÚSQUEDAInd,<~. o d;ovo. • •Ind,,, c> dav. P""" Y....Unol". "1. " ~n3dó:De d..",, EM or p,op..d.d.. por. 01da" o i"dicoUlJIQUE nu<vo.PK_ditn"B (Gene..n •~5Slimn•• nomd, (AS()E, Uniqll~ u,Topo Ind>c, ,B Di.dí~dor ~.. t.bl. ,~Joq" oo, do/¡I. I, mlitido, ,~Jo q o , de p.g,na p"mmdo, s..el", E, tM~ am ~IN N.( alumno> ,ndllld.,eru, (orno ellliTERErt N.m E r ¡ ~oo " do" Iocio dod, PPI~.tARY•I 49" 9" I I Ehmi".. I I(m.,ISolo crear estos índices a campos de búsqueda mas frecuentes, no abusar de la delinición decampos índices ya que al flnal hace lento la grabación y la búsqueda. Para nuestro ejemplosolo estamos creando el índice al nombre del cliente porque suponemos que será el campopor el cual realizaremos la búsqueda siempre y cuando no sabemos el cód igo.Aquí un ejemplo para hacerlo vía sentencia:CREATE 1l0 ll C L US TE RE D IN D ~ X {IX_c l i ~n t ~ J 0 11 [ db o ] . [ c li ~ nt~]¡ ! n o mc l i l AS C IWIT H¡ P A D_ I II D ~ X - OFF , S TATIS TICS_II0 R~ CO H PU TE - OF F ,SORT_ I N_ TE MPDB - OF F , IGN ORE _ DUP KEY - O F ~ , DROP _ E XISTII1G - O f ~ .ONLIN E - O F ~ , ALLOW_ROW LOCKS - ON . A L L OW_P AGE LO CK5 - 0 11 1m.Página 6
  • Visual FoxPro 9.0 y SqlServer 2005[PR IMARY )DEFI NI ENDO INDICES UNICOSI n d i< l!~ o ( l<l. wes.índ;<~ o d~ve Primory!lJniq.¡e .elecoomdo:-!:CcatieJ .,(t...--q Edtar propied.3des par~ el índice o rnve PrruaryfUniqJe ex&tente ,fK_c~beJ~, tJf~:~ ~Gen",ral) AColumn~; nroJ5I:t (A5e)J:> un~,,,,, Índo:e --B Diseñador de tabla.BIoqueo< de ~Ia permitidos ,Bloqueos de págm rtermitld 51C1~ve Es texto co~to ~Columna> inclida<Crear ce<no CLU5TERED ~@ E>pec~o:ación_de ""pacO] de FRIIIARY r;;, .I Agregar 1 ( Elimirm I I Corr<lr ILa utilid ad de este índk e es la de controlar duplicidad de datos para nuestro ejemp lo ser á elNúmero de factu ra, ya que es un da to que no tendría que re petirse; ya se sabe que un índicede tipo PK ya por defecto es de tipo "unique".Aquí el ejemplo vía sentencia:CREATE UN I QUE NOtlCLUSTERE D Itl DEX [ I X_c ~ b e_ f ~ c t u r ~ l ON[ dbo l ·lc~b e _f~c tur~ l( I n r o_ f ~ c t J x s c ¡11 TH{ P A D_ I tl D ~ X - OF F . STA TI STI C S~N O R ~e O M P U TE - O ~ F , SO R T~ I tl _ TE H PD BO ~ F ,I GNORE_ DUF_KEY - O ~ F , DROP _~X IS Tl tl G - O F ~ , OtlLINE - OFF ,hLLOW ROW_ LOCKS Otl, ALLOW_ FAGE_ LOCKS - Otl lON ! FRI HARY]Página 7
  • Visual FoxPro 9.0 y SqlServer 2005DEFINIENDO INDICE UNI CO COMPUESTODCdo>tiJ",lu,.PK_rieto_fO(I""Indo<. o d~v. Pim ryiUmlu, "Io~,.,",,,_, __~~__~~_~~_~~~ ,Colum"..Es Unlqu~,d 1" 1 (~ p~ (A5C)s,Ind,coCr<or (otlloClUSTERW NoID E< 1"Clh( ~oo" d. ..p."o ~. d. PRIMARY ,Cm"Así como se puede definir índice único a un solo campo lambién se puede ha cer de la mismaforma con mas campos, en el ejemplo se reslringe la duplicidad de productos por factura.y aquí el ejemplo de hacerlo vías sen tencia.OFF , SORT_ IN _TE MPDElONLItIE - OFF ,- OF F ,CREh TE UNI QUE f1 0 NC L US TE RE D INDEX [I X~d"t ..~ f a c t u r a l OH[db o l · ld" t a~ f a ct ur a l( l i d~ f a c t l hSC . [ p r o c o d] AS C )WITH < P A D~ I N D ," X - OFF , S TATIS TICS~NO R," CO H PU TEALLOW ROW~LOCKS - ON, hLL OW PAGE LOCKS ON ¡ ON [PR IHARY !CAM PO CALCULADOPágina 8
  • Visual FoxPro 9.0 y SqlServer 2005~ M,<IOofI SQL S.IV~ M~n~g~m .n1 S1ud,o - g Xj ,;,¿ Ntlm coo,,,tu IDJ ImEn [;j ![3 I~ i:¿~ r¿~ Q ~ I~ ni lJ. (jo :5 i..~ .Ji I " l ,,;;g ·m F.i ~ bJl ;hplor.dor d. obJ.-to. ,. J;l X >MAtnUNEI .n,ib. se...o det. f.d"~l • x•••"-Perrnit~ v " •"f1(Jmer~ (9, 2)numer~ (9, 3)Narro, e de columna Tpo de d<ltosprOo:odc""tkJMpreooP,op« d. d« d. <ol" m.,. - - - - - - -~1J 11:1El E"pecr ~acÓl de cDUma cantdad precOJ(Fórrno.>a) contdod*precOoPer>i>tente No,8 Especf ~acOn de kJentkJ~ No~- -- --, P",.istent"I• I"••, I";;r Ro<t",-,,~ ,,","~ ~ MArITUt jE Z ~)(Jl *rm9,O,IJ 9~ ·"1.. L;¡¡ B"" , d. <h t o,~ B,, ~, M d,to del",t",,.~ c=.J ¡"ton...,. " d. b>< << d. d..o,~ lj mlb,,,,¡.,¡,tM~ [J~9" m~ d. b~,. d. d.t~~ T.bl.,~ 1:::1 T.bl.. d.l m¡. m.~ l::l <ibo,d.nt<~ D <lbo,c, I" _I.<t,,,a~ t:¡;¡ C" lum na,f id_I. <t (Pr ¡nt, No~ moJ.el « h,,(ll),III .c.f."I">tetom•.III <o<k lr (<nt, NUll)~ D (1,,,,,( on<et.,, · I ~l • T, 1Hay campos que nos ayudan mucho. como son los campos catculadcs, la idea es no grabardirectamente datos qu e son calculados, en el ejemplo el campo "total" es un cálculo de"c antrdad- precro" y de la forma que está definido no ocupa espacio en disco, ya que 1apropiedad pe rsistente e~lá como "no".RELACIONESPágina 9
  • Visual FoxPro 9.0 y SqlServer 2005, , XRel.none T.bl•• Y column•• XR, I ,,¡~ ,N~ mbr< d. l. r<lo,,~n:fK_duIfK_d.·.._f."ura_(~b._f.ctur.I:JT, blo d. <1,,,, p,¡ncip. l: T.blo d. <1;..... . ""no:I..b. f><t",;¡ - 1 Ideu 1ocw,.1,dJ o" 1,d f." - 1I 0 1 A" lt.. 11 ( 0" " 1,, 1 " Ip etectone s de e te ve e xte rne L?Relocm 5eb::cio:mdo:f K_detaJ a( tl.ra_COIbeJact ~,¡ Edil", prnp~d~d ", p",~ . 1 ,elación exi<i:eot• . IFK_det~J"cter"flodJctoI 1El (General)Comprorur datos exist",,=es Sí8 E5PO(fo::ocm de t~ b~ YcoEl Diseñador de tablasEl E5PO(fo::oc¡,)n de IN5ERT YLExigir po"~ ,epik:ocm sExioJ~ rest,icción de cL,ve ex Sí8 Identidad(Mombre) er_det"J octer~_c~J octur~D " Ir>~1MDe5Crxm( I( 1 I IIgreo" Elirrin"r c~""Teniendo ya nuestras tablas creadas te nernos que relacionarlas, ¿Por qué relaciona r1as?, haymuchas ve ntajas de relacionar n uestras tablas un a de ellas e s mantener una integridadrefere ncial.Las relacione s en nuestra base de dates e s como slgue:Página 10
  • Visual FoxPro 9.0 y SqlServer 2005"Cllente.codcli" con "cabe factura.coddi""cabe factura.id tact" con "deta factura.ld fact"- - -"productc.o roccd" con "detatecrore.o roccd"DEFINIENDO PROCEDIMIENTOS ALMACENADOS.Lo ideal es tener todas nuestras rnteracocnes con las tablas a tra vés de "stcred proced eres"Aqui un ejemplo para la interacción con la tabla diente.CRE ATE PROCEDURE MI AP LI _ Cl i e n t e Sel e c t.,s e l e c t co d cl i ,nomcli , d i r c li ,te lc l l fr om c li e nt eCOGRANT EXECUTE ON MIA P LI _ Cl l e n t e SELEC T TO l u su~ r i os _e xec utelcoCREATE PROCEDURE MI AP LI _ Cl i e nt e In s e r t ~@c o d c l i i nt o ut p u t,@n o mc l i v~rch ~ r ( 50 I ,@d i r c l i v~ rch ~ r ( 80 I ,@t e l c l i chs r ( lO Ixsi n s e r t int o clie n t e <n o mc l i , d i r c l i , t e l c l i) VALUES{@n o mc l i , @d i r c l i , @t e l c l i)s et @codc l i - I SELECT @@IDENTITY )COGRANT EXECUTE ON MIA PL I Cl ie nte I nse rt s TO [ us u ~ r i o s_ex e c ut e]COCREATE PROCEDURE M I A P L I _C l i e n t e_E di t ~@c o d c l i i nt ,@nomc li v~ rch~ r ( 50 I ,@d i r c l i v~r c h~ r ( 8 0 I ,@t e l c l i chs r l lO I"up d ~t e clien t e s e t nomcli - @n o mcl i , d i rc li - @dl rcl i ,t elcli - @tel cl i whe rec odc li - @c o d c l lCOGRANT EXECUTE ON MIAP LI C l le nte_Edi t~ TO [ u s u~ r i o s _e x e c ut e ]COCREATE PROCEDURE MI AP LI _ Cl i e n t e Bor r ~@c o d c l i lnt"d el et e f r oro clien te whe re co dc li - @co dc liCOGRANT EXECUTE 0 11 MIA P LI Cliente Bo r r ~ TO [ u s u ~ r i o s _e x e c ut e ]COPágina 11
  • Visual FoxPro 9.0 y SqlServer 2005Si des eamos hacer un diferenle select o otra interacción con nue stra ta bla tendría que ser atraves de otro "stored procedures " jos procedures de ejemplo son bastante haslcos perosuñdentes para las jnterecocnes bastea s que se tiene sobre una tabla. Aigual modo se tendriaque hacer con las de más ta blas (producto,cabe_factura,deta_factura).Página 12
  • Visual FoxPro 9.0 y SqlServer 2005CREANDO LA CAPA CONEXIÓNl a d ase conexión tiene la siguiente composición :~.......,"11 _." n~uo<Il1 " ,;"g"w<t[11 <1¡;"gd"O<!I:. trin¡¡dtl{ll , .!mqad(11 "¡;,,gnoon!11 ;"t.1OOg, ~ouod. u. u ..",g, ""00 JlW" l!. ""uoo" Orv "rlll~. om","" "" ."",g , ~O""O" "dO 1OOg),,can• • i<>nconClaO<lesc.onec180go"cool)0<"..,1, , tn"ll_CIJ rsa< : .tri"g, ~,,,,,. ;. .,ri<iExocSp(",,"oda _ Sjl: "ring. omrado prnto_ ";"9, ."tra<lo _CIJfSOl: _ul,g, ",,"oda _ti¡>o .!mq¡~> ""SOl.(onh.o _""""" .,.;n•."" UoO_ _ ",1, " ,;"g)lIOtme"oa¡OOCLASE BASE........ 1-. 0_.e" "~,.. O "," e~••• 00 j 1...o ", c ,m doloco..."""o, "O".., . ,d~,. •...~ u l " o o k,..""" """O" .." L" O ~, 0"" ">OO,",CTID ,.,n""".u. uon e . P"". OC" . ,, ". od, .~ o><un"ion "1c ,_..,v •• "r1"g~ . _~ " 00 " " "". P" " " " ,, nO, _""" o. """"h1•. • " vi"""~. " , eiffi _ " V)t.,,,,",""no-~ j " ,,~ _="" " pyn-a l "n~ U"":elu• • "<i~ ._ ~ : i<dm ,_ " ""e h .. , "" • • " " "" _ """ " , ", " 0 11 t."~ _"""tb " , ,,., O"- )_.e ,," off,oc o" ,," off00 ooM "o"t . no" h off. H"".0.. ..• OUO-.-""..-.."..• •.. o oo.e co" ury_.e o ."~,, oc do "0 hou," ot. N"_.e ,.,",atar.= . ~_o_ , ,,",,,Página 13
  • Visual FoxPro 9,0 y SqlServer 2005Ahí notamos que la clase base está basado en una clase "ses-ten" y se ve la creación delmétodo "init()", que tiene a demás las propiedades pro tegidas como servidor, usuario, pwd,etc. Y el método "init{¡n recibe parámetros y le asigna a las propiedades mencionadas.CLASECONEXION,OC"" _". o"._e......,.•• , ... e h lo¡, """He.,,"""oe "" ~ ·p "v ., · " •.~""., ,.,..,"•••• " ,vi"""·DAn""~· , . "".11< < ..., ,, , . ..." I.cs.He"" ,~,.u 1>,0" ",","" _o d""" ."00",0" .",n"" 10"01_ 1"" "" "" ·v " ""SOL<X C I ~o " . - nE .,. _..,. " r o >o " . U ~ Q ...OU<e . , , 0 "."0". 00,."",.R1!""" . ~ C ON 1Pn [)!"-e"oc""" o"noo~" Neh" . =0"" h 1o . " OO"-0c"OLD", ,,,"n:CTC"" " ~OO" ,,"_ re "Es una clase basada en la clase "Base" en cual cuen te solo con tres métodos, el primero elmétodo "conecta" hace uso de las propiedades de la clase base com o driver, usuario, pwd,etc. La principal función del mélodo es crear la conexión con la base de datos y reservar dichonúmero de conexión. Adema notamos que cuando el usuario no es "sa" o "admlnlstradcr"ejecuta un rol, este rol es aque l que tiene accesos a los "slored procedu res " porque losusuarios no tienen acceso directamente a los "stored procederes". menos a las tablas, si no através de este rol usuertceexecute", que es un rol de aplicación.El método "getncon"lo único que hace es devolver el número de conexión a la base de datos.y el método descone cta derra la conexión a la base de datos.CLASE EXECUPágina 14
  • Visual FoxPro 9.0 y SqlServer 2005DEFINE CLASS EXECU a~ con~x ionPROTECTED ~ ql , _c ur~ o r , MENSA J EPROCEDURE ExecSp ( SP a~ St r ingB, pwt o ~ a~ ~ t ri ng , cur ~o r a~ Str ing, t ipo )Ir EMPTY(_ SP)THIS . HENSAJ E- "5QL UAC IO"RETUPN - 1ENDIrIr EMPTY( pwt o ~)•pwt o,, - ,ENDIr ~THI5 . Con~ct a ()I F E MPTY ( _c ur ~ o r )DEU- S QL E XE C ( t h i ~ .ncon , " E XE C UTE "+ SP+" " +_pwt o ~ )Ir D:!:U<OA:!:RROR(_ ERR)TRIS. MENSAJE- 5TR( ERR( l ) ) + +_ ERR(2 )n SETRIS. MENSAJE- " "ENDIrRETUPN DEUn SEIr t ipo- . t .D EU-SQL EXEC(th i ~. nc o n, " E XE C UT[ "+ SP+" " +_pwt o ~ , cur ~or )Ir DEU<OAERROR (_ ERR)THI S . MENSAJ E- ERR(2)ELSETHI S . MENSAJE - " "END Irn SEIr E~P TY( pwt o ~)DO &_~P WITH pwt o", c ur ~ o rDEU- 1ELSEDO &_~P WITH cur ~o rDEU- 1~ nd itEsta clase basada en la clase conexión es la que al fin permite hacer la interacción con la basede datos a través de este método "ExecSP" pasan todos 10 5 "stored procedures" invocados denuestra capa de negccos. Controla el tipo de "stered procedure" si devuelve o no un cursor yadem ás con el parámelro"_tipo", se podría de terminar el tipo de origen de base de datos, enlo pe rsonal solo he tenido dos orígenes uno el SQlSERVER y Base de datos nativa de VFP. loúnico que diferencia es la manera de ejecutar elvstored proced ures" en elSQlSERVERes elNEXECUTEn y en el VFP es el NOOnCualquier error ocurrido grabara en la propiedad "mensaje"CREANDO El OBJETO CONEYa teniendo nuestra clase crea da la pregunta de todas maneras e ~: ¿y a como lo uso? , aquíviene elejemplo:m . 5 ~ RV I D OR -n M I 5E RV I D O R n, •Página 15
  • Visual FoxPro 9.0 y SqlServe r 2005m. USUAP I O- " J PE; PE; Z"m . PWD-"MI PWD"m . Dr i v ~ r -" SQ L SE; PVE; P "m . Db - " HI BASEDE;DATOS"m. d d i -"AP P-HI SO ~ TWA RE PERSONAL; LANGUAGE -E spdñ ol"SET PROCE;DUPE TO b d s ~.p r g , c o n ~ x.p rg , E X E C U. F RGcon~ - CPE A TEO BJEC T ( · E X E C U · , m . S E RV I DO R . m .USUA RIO . m . P W D , m .D ri v~r . m .Db . m .ddi )SET DATASE5SION TO C O N E . D d t d S ~ ~~ i o n l dSE T DE LE TED onPágina 16
  • Visual FoxPro 9.0 y SqlServer 2005CREANDO LA CAPA NEGOCIOSPara es ta capa estoy utilizando las clases no visuales de VFP que son los de tipo "Cuvtem", quepueden ser reemplazados por el que más se adecuen por ejemplo tipo "curscradapter".l a idea es tener algunos métodos básicos de interacción con nuestros "stcred procedures"pero a través de nuestra capa de conexión.Para el ejemplo crearemos el objeto d iente que es laque interactúa con la ta ba de clientes.N."", 1!_J?d_ A~" I,A:!"".-.,:,;o¡,1i>TW~ e" ", "~oW~"h",e".-.r, "~oW·l,~ "h:ld, PWlc,,, e o ", "~o~,n1,,",--d",, , "~o" , , PWlcoodol po ", "~od;,rl; e o ", P,Need" , "~o; 00 0 , "~o1. "_, ,,;.00< , P,N e~o ~ e" " "~o"u",eI; e" ", "~o" 00 , "~o,eecll , "~o"Id; e" ", PWlc, ~>do, "~o( dil POP.,tl i¡¡oIhod - pl.>nll.....vn Iche . "1r? e""ettoes - oldntl"".V" (e<lilTenemos como propiedades los campos de la tabla, y los métodos [select, inserta, edita, borra,valida, etc)Aquí la programación que tendría los métodosPágina 17
  • Visual FoxPro 9.0 y SqlServer 2005~IH"HH ~ c ur "" rWn H eh"" ¡""TY I_ "z. or )_Cur :50r ",, o~_de_r,ürtJe cen ou l llend," U,;," (_e n r . o C)U> E lli , 0 =0 00000"" CDL• . ~X. C"" l ~ I lI LI cli.no. , d . c t " , _ ouco " r) >0SEUCT " C""SOR. alias C"""OR- -"SEJ]j . 1","" , .... , •En el granee se nota daram ente la inte racción del objete conexión.l a idea es ruando se invoque este método es la de devolver el cursor de la base de datos. Si nose le envía como parámetro el nombre de l cursor optara por po ner un nombre temporal, en lopersnnalla mejor forma. Cualquier interacción con el cursor devuelto lo hago a tra vés de lapropiedad N _alias" ya que es la que tendría el nombre del cursor asignado.",",coo-.<."<u Th i~u . V ~ l1 ctA IJ. )u . CODCL I ~. COOCL Iu.llon :L I - .NonCL In>. D<p eL I- . D<P CL Iu . H L CL I ~. UL CLI, ~ X 7 70 5QL U05HüW? 1 ~. e OdcJ. " n . no.-.c J." .11 . d10 0 11 , -C11 . t do 11ENOU K.,.If c en" . ~ " c~ " l ~ HP lI~c 1i ~ n. ~ In, " r-t o , " ~" >0. " o ""1 1 ·~ . c o rto J.l ~Cu r _ . ~J._B ,..n" ",,,"~•~I ~~---=---:::=...:.c-==-----~C<~ aJ .> .dIt U~ edl Cur l~o1~c t " CurI n"~ " Iuto , Cu r <rom "~mY~r n~ t<h o c h o · . T .. ""= d ;~- c ono . = t"o ni o 1)<ndif.nrt i ~. nct~ 1t hh t u m he ohoPágina 18
  • Visual FoxPro 9.0 y SqlServer 2005Con es te m étodo se hace la inserción de datos, además notar emos que la variable "m.ccddl"tie ne un @ ad elante. es porque la variable en el "stored procederes" "@codd i" es de tipo"ce tput", des pués de ejecu tar este procedimiento dicha variable tendrá el correlativoasignado por nuestro campo "ldentltv".Además antes de ejecutar el "stored prcdeccres" pasa por un filtro que es el método valida.este método como su nombre lo dice validara la información como en el ejemplo valida que el"nomdi" no este vac íe.~eliente.Vdhddr,a ( ld d 1¡;J¡jJ~1 - o~~~Vll I~,~vdid"r ."JOQjecl I"," c¡"nte P¡oceroe yParartl< t ~ r ~ o r 1g ~nA-Lo c al v a lido-lJ i th Th i ~LV, . v a lido· . !".(Til r:l.,} -"oC M ~r::.iPropertie. - planilla•.veH IC a~ ~ o r i Q~n· l-"o C a" ~,-"," cliente C M ~ ~mpty(. nomc li ). "" n~aj ~ . , Falta ., Nolillr ~ ,., c li ~ nt ~Melho< l oyou{[! Oth~ r w i ~ ~-" ", v a l ido· . T .¿S.:" f,,"C-! ndc a" ~;;. . ~~-¡Deloul C M ~ or i¡;¡~n· 2.., Wrt eMelhOd -_.....bI."!!:".,~.d.,,¡~s [U. e, "oC a" ~......., C M ~ ~mp t y (. nomc li ),.., borro[IJ :.., edila IIJ! e. me n~ aj~ · Falta" Normr ~ ,., c li ~nt ~.., "s~rl, [U•." Ot h~ rwi ~ ~,," lena_"oriobles [U•." v a l i d o · . T ..., seleclJº~-. "" n~aj ~ • . F ..., selecl2 ...!~,,,~o~! !ndc a" ~Oth ~r "i ~ ~"oC a" ~C M ~ ~mpty(. c o dc li ),,oc;.me n~ aj ~ · Fa lta Có d i go" cli ~ nt ~ , y,>De igual manera completaremos el método "edita" y "borra" con sus "Stored Pre cedures"respectivos.Página 19
  • Visual FoxPro 9.0 y SqlServer 2005CREANDO LA CAPA INTERFAZENTORNO VFP";I ...."".oIt VI.... "....:".."".."IIIIII!"III······""·~co c Dra j .ot , l i b v f " ql ..:J, n IT~ ro " , ,<o )"","m 1110","PREPARANDO CONTROLES PERSONALIZADASLa idea es copiar todos los controles de VFP y ponerlos en una clase propia. en este caso a esabiblioteca lo nombre como básico. a estos controles le ponemos nombres mas sencillos, comopor ejemplo a los "textbox" solo lo llamo "txt", a los "label","lbl", ele. Además deperson anzalo a nuestro gus to en ruante a aspecto. Para copiar dichos controles es suma mentesencillo, lo que ha cemos es crea una nueva biblioteca de dases y nombrar los contro les yaexistentes por uno propio. En el graflcc se ve la crea ción de nuestro control personalizado "fbl"basado en "label" y almacenado en la biblioteca de clases "baslcc"Página 20
  • Visual FoxPro 9.0 y SqlServe r 2005-D ¡;¡¡¡: Id ~ [g¡, ¡; I:r,;, la "" " ! ~--- - -~- ~r; rov I§ ~ "t 3 II!:J *form neskme- - FormDocl _ / l orm l, .= L.~bo:;ll =.1Tttl. Form Control..seseo•,.. , ~ mnbo(BASICO)~ edil: (BASICO)~ ~<t (BASlCO)[J:5J pag (BA5ICO),.. , ~ plúme(BASICO)~ spim (BA5lCO)iJf-- ---imi @ ~ [jill ..~ fiIJC~g¡ [b5J D@~,AItJ ~ ~abl 1()1 ®J ¡g¡ ~ ~:¡¡g, Cl !!!!II O co ~Ó ~ !, .., 1.< CII.• ! f:Página 21
  • Visual FoxPro 9,0 y SqlServer 2005y ~ i es posible que pueda tener cierta interacción como por ejemplo:Al control "textbox" vamos a cambiarlo de color cuan do esta selecdcnadcJI forml[I======-_IEl código para tener es te electo es el siguiente : La programación está en el "lostfocus" y el"gcttocus"[I..ss Designe. - b..sico,YCK (b,tlÜQiecl 1¡¡¡¡jJ¡,l===-__-"JJ.cI1<ITH IZ . S p e ~ i a l E f f e ~t - OTH I S . B ~r der C ~ l ~ r- RGB ( O , O , O ITHI S .T ~reC ol or = PG B ( O , O , O It h i " . BackC o lor-PGB (255,255,255)dJTHI S . Spec i a l ! t t e c t- lTH I3 . B ~r de rC o l or- PG B ( O , O , 2 5 5 )TH I3 . r ~r eC~ l o r - RGB ( O , O , 2 5 5 1th i " , BackCo lor-PGB (2 55 , 2 55 , 21 5 )-.D•Esta demás decir que de ahora en ad elante solo usa remos nuestros controles para todo tipode interfaz, des de un lorm, textbox, grid, labels, etc.FACILIDADES PARA EL USO DE CONTROLES PERSONALIZADOSPágina 22
  • Visual FoxPro 9.0 y SqlServer 2005Hay una he rramienta que trae VFP que 51 llama "tcolbcx" el cual lad lita el manejo de nuesn cscontroles creados.Aquí un ejemplo de su creación, anexar nu estros controles persooatnedos a dicho "tcnlbox" ya final la creaci ón de un formulario basado en nue stra d ase "torm" personalizada.l. $ ¡¡ [S "LNiP.iiMJI File Edil: le" Too!> PrOQlom Window HeIpFoIder " which to ereote Toobox:To. Toobox dato toblecOOd roe< be fO.Xld or does not ex~t ,Ic:docL<rJeni:s ond settngsmiguel ontenez edotos de prcqomorr ~= =--21ro ,new Toobox " the " , " " ","r , ocote oc existO;¡ Toobox~-"l ocate ! [reate ToolboH_____~~=!J"""l l l jPágina 23
  • Visual FoxPro 9.0 y SqlServe r 2005! "11~ ToolboxI ========:------~-(DI"I File Edil: Iftew TooIs Progr= Whldow Helplo .... I"c.l .. I~~FovoritesText 5crops O!!!!!VFP Bose elass e,VFP FOlXldotoo e lassesMy Base C~sesMy XML Web 5ervicesMy ActiveX e ontrols,,-..Add C1a•• l,braryAdd o doss library to "" ex¡, t",. c""egory by ,elect",. orle frQfl1 the drop-dwIn or add o newcotegory by typing o new n"",,, .c.otegory : IC,,,,:-- - - - - - - - - - - - - - -iJd oss , Il r",y: IC:PROI CTSUTILIDAOESBASICO. vex [JIClic derecho y "add dass u brerv"FovcdesI, ! ! M· 1001>0.1D_~ IiIIj~::1I,~ ~ e¡.. ,..sr~ , "", """ 0"-OlCO): ~. " ,,;,,5:CO¡en " "pr o J ~oC~ lilivf• • ql,U H nI ro c : o r o ) e o,, ) """M""3e HU," CLi.OO",""""DoI",~=t~""", elm ",,Add C;<,O"""ot,,"ú<.,,.,C" bcl" "00,,OC"" Lo,k~ O;,obYti<I, T" t~ 81""" " 00W)(OIf.n (B· ·---,, d ( -c_.:;:_.,.". 0Dl (" )(0, ,-,j IB5ICG)",F""",,, aP_ B", 0 _ ound~M, ,"oel.M" ", ""M,,..",,"! G"",~ PJIoI~~~~--I="": 1118Página 24
  • Visual FoxPro 9.0 y SqlServe r 20051" ".mlI>J 1o", 1M,n",,¡ I l"", 0" " I F",,,,,~ I . ·...._(,~,,""".,"".,o.•.•SpKt"" th< .. "..... " , _ """,;".-..J d ,,,, "",y,o.cert,;", "" ot¡"cl, C~T•1- " ," ,,"", " 118"oiJm F,,,,,," C ~;; 7;;; D ,~IelCI" o"" Dx F f~0{",1!.,f Ml~c T,T,.""..cr:.-:J.>Fii,d" ,.?N J:!, fi;>¡;COO¡;;:;¡; ¡¡K" P".;,~ r}o;;, ID<JO:;¡i:N,." r...lº,L[º ~.,o ,,~ <l:.r),¡~,,~ .,""O,,,,,.. 3o Llb:~a; :T OLE O,¿¡:¡;¡~ ¡¡ :Ú ;;¡¡¡Odp<i;;ctj " " ,_.,., _p",,,, 11" P<lIeoO"" n,-p¡.R.""..1e ..!.,.,.h""."T.~"., " ,T" ."!..", .-,~J :·: :·: :·: :·: :·: ·.:JA Illl lIll <:] (! !>~ IV ~ ¡~ c: ¡:¡¡liI .~ ~. ~ Dl!1 n f~"... Ó JL"" ,," IIl @, llll,1,; V <", 01 e !I[¡;j] roc O.,---.J1l._1"" <> Actw",,"CREANDO CLASE MANTENIMIENTO DETABLASCrearemos una dase base basada en "Cmd" de nuestra dase "Base" con funciones cernunes,como agregar. edila, eliminar, sal¡r. Y otra de Aceptar y CancelarPágina 25
  • Visual FoxPro 9.0 y SqlServer 2005Al D,¡o ~ el>¡ed, Lo;oul Olh<f F,w,,, I~.... f:;;;S T -.TlIlp.,I"j(,... o/he¡ -1I~~(;¿J] P[OCeOJre: Ip ucroh" . Parent . añaje ( )c h>o Lo <m. Re ü ~~ hO"el: I¡:¡ cred1; Cmdl Cbek _ I:l X, pti: Pr" portles - t"ol•.vc. (mltobarra) ~ 13t t.1 ~ . earer.t . ~orr a 11t h i ~ t D r~ . Retr e e h~DIr<TiilCrearnos los métodos (añade, edila, borra, etc ) en la dase padre en este caso el "container",y a los bolones aslgnamos esos el código para tnvocarlos.y la clase "o kcance!" de la siguiente forma :Página 26
  • Visual FoxPro 9.0 y SqlServer 2005liEl Cla55 Designer· tceu.ecx lok... _ D X Iiil Propcrtlc, toOI.YCK (okcüncc~l11;":~ ¡;;oncel""~,.< , r>1¡ cmd1.Click _,IfilokconceledObjecl I¡::¡ cmd1t h i ~ t o rm .g rab a l )~I Proceche IfJ CickeT;;lSi cmd2.Click _OQioct :¡::¡ cmd2 (i} PjocedYle; Ii C1ckthi ~ t o"m. l i mpia ()CREACiÓN CLASEDEFORMULARIO DEMTTO.","",1-;;;eh1" ",,","e~L ool .· . 7.hloo<~, " ".0,"-,"0 11cth n ,",ono .. omU Meta, odeta-,eo oo",o "t ttM<W02.lnII • ~ X,oraba_e~oo",o "" .<tU,,,,,cevato," " ar 11) ","veth<T; IIt h eoono , Met a~ "th, ",or<" aot , vatoo Jo"" ( )" , 1Página 27
  • Visual FoxPro 9.0 y SqlServer 2005CREACiÓN DE LA INTERFAZ PARA El OBJETO CLIENTEEmpezamos con el código :CREATE r ORM clie n t e ~~ f rmd~ t~2 r ROM t o ol ~ .111 fa rm ~o.i~nor d i< n1o.•<~ _ :c X... Montonm.ronto do C ~onto. _ I:l Xor ecClón~. Actc{;""".S "".Ifl ó""L "& ~ctcL"""T.i>tlJII."",J..~ ActO:""",,,,, O Doeo "" "ppo, AcO:""",iYCm;.;:;,;;:¡ .. Tii¿,::¡e¡- ~,~ Fcm" .lfl"",l.~...I"fU:ft.0.sk. .11.1"",1.~ M"lenglh O~ ¡.¡ "roW;:¡¿¡¿,;;; iii¡:¡;;;r ~"O ~ ,~. "~~1 ;"3~ M<lhods ~oJl o;¡:;< F, v>lres11 Pro• .,". - cl.nl•."-x 1!!!IIiJt3.c ;a I ~ O Nomm.. .1ILo ú ni c o q ue t e n e mo s q ue hace r e~ nuest ro fo r mulario es e~lazarn u e s t r o s o bjetos int e rfaz con n u e s t r o ob jeto negoc io , e n est e casoe n l a z~ rl o s p or medi o del " c o n t r o l s o ur c e n del "T ex t b o ~n, en c~da un o dees tros con t roles en l ~za r con l ~ p r o p i e d a d e s d el ob je to ne goc io , en ele j e mp l o es el I "t~tl " con cliente .codc lil , etc .Uan v ez h e c h o eso y a p o dr emo s pro b a r nuestro formu lario , sino lvid~ rnos q ue de ben se r e j e c u t a d o s desde n uest ro pr o gr ~ma p r i n c ip al,ya que ese p r og rama hace l a conexión a l a b a s e d e da tos a de m ~s q u ecarga nues t ra configu r ación de usuario .Página 28
  • Visual FoxPro 9.0 y SqlServer 2005.. Mont"nmient. de Cijent". _ Q X~-------------------""eo:.x,Io/ >"fu 116 Ln o - CoIilü,~~---[<reCClon T,Ie(,1<I uIP ar a el e jemplo d e f ormul ari o s e pus o po r d ef ecto que se va ~ a g r e ga run c li e n t e p or eso que apare c en de s ~ct iv ~do s l o s boto ne ~ d e nue s t r ab arra d e m ~ nt e nimi e nt o y ~ pa re ce ac tiva d~ el graba r o c~ncel~ r .Al hacer cua l q u ie ra de e s tas d o s a CC10nes activaran l o s botones d e l ab arra d e ma nt e nimi e nt o y desac tiva r~n el gr ab ~r y c a ncel a r ... Milnt"nmient. de nent.. _ -º- XActuoli1O",""95 é4T, I,(, " ,- Al eYdCireCClon" l. torre 145) jj, n OGrrinuuezJuan ~ a n n ueCadJo Nomt reI 1 Ju , n Pere,Codg< DT~ehmIr~""~~=====I Página 29
  • Visual FoxPro 9.0 y SqlServer 2005Có3i<pD,,, peru1 46l.im, ·,,,,._,Di<ecCÓ!lod , ",,1<" Busca,,,,,rona95545241" 1>1Al mome n t o d e e li m in~ r la c la~ e y a t i e n e e ~ta pr e~ u n t a d~ a ~ ig n a d a . As ique V ~ a ~ ~ l i r en todas n uestra p a n t a l l a s d e l a mi s ma ma n e r a .• M.ntenimiento d. Cliente, _ [J XEdt ",1IC Od o;¡ o Nor10 e DIeCCl on1 ..<J, n P.o, Pe roz , ,, I, lorr0 145-VIr=~"ó=" ===="""":::=======1-"":":":::==J1_,<1N u e ~ t r a bús queda t a mbién e ~ t a i nt eg r ada e n la c lase y toma e l nomb red e t o d a s l ~~ c olumn a s d e l "g ri dN .Página 30
  • Visual FoxPro 9,0 y SqlServe r 2005... M.ntenimlento di! Cllent. . _ I:l X--------------------- ., .. y,;;;MlgJ Norrmreo Odenor 1 Buscor0"""00[ch ,,<I 1>IE st . s p .nt . ll . s t.mb i~n son ~R e s iz.b l e s" p .r. l. comodid.d delusu. rio.Página 3 1
  • Visual FoxPro 9.0 y SqlServer 2005Nombre1 _I~~~~~~-1_-3 Juan ManriqueBuscarGlab",hdemá s q ue ~op orta n se r c ~ r ga d~s ma s d e una v e z y sin p r ob l ema al g un oy a que uti li zan cu rso res c o n nomb re s a l e ~ t o r i o s.Página 32
  • Visual FoxPro 9.0 y SqlServer 2005códioo Old"usearFo"A,rel>< ~",.. Euscar":na{ O"".~. .~•2 Ju,", Do meooc.larGrabarDteccoo1"potU " " "m -colóüTe~rOlO1«5455P,e ,OP ar a hace r la s i gui~nte p ~ nt a ll a S~ nos hac~ muy s encil l o , l~ tabl acl i~n t~ guardamo s con el ncmbre d~ pro d u c t o, c a mbi~mos nue s t r o ob j~ ton ~g o ci o d~ cli~ nte p or produc t o .Página 33
  • Visual FoxPro 9.0 y SqlServe r 2005El tOrmD"~.r producto.lC" _ I:l X"T..1>1o do Prociuctoo _ o Xlh Monoi1"" ROlI " P,op.ot." p.ociuclo" H I!!!llilEil"" PFOJUCTO 1...1"~Ol~ei>o±-.JLLo;oo.<~,v"res.J¡,¡JI IA."¡d,PRDDUCTO-7¡Dr.I<ht~1_ ""~,,~~ _ "_"~"_" __:_~_::;_:::~::="::: iJi",,» :•••y e n nue s t ros mé t odo s ree mpl oz ~m o s p o r o nue s t r o c oso lo po lobrocl ien t ~ p o r p r o d u c t o y o s i gnomos nuestro co ntro l s o u rce d~ lo~ o b j etosi nt erfoz o nues t ro n u~ v o o b je Lo neg oc i o .El tOrmD"~.r producto.lc" _ I:l X"T..1>1o do Proeluctoo _ I:l X~~::::::::::::~8 I ftrd!:le~ I=00",0 ¡¡¡¡ l E••• IU,,~n;D M"CI1 oOS, D A"," Ilh~ wcrd IRo¡o1.co1;l1D v¡,." ",,,.-.,j D s".", ",d~.d I C..-.o~ IDli" -;00, ,,0,mreo [ ,,eol 1):><""" O [ ,, ar",¡ e III 0Cie¡Il c h ," ~o IF ¡:f;¡i!!e&- .d iC "- I )H~~ A~HüXI, no:l-c to.llen ~J e . 1 . loro r "E"D H. pr oduct o, b lanq u e ,._ daC o ~ 1). Hf r ~~ hIIInPágina 34
  • Visual FoxPro 9.0 y SqlServe r 2005111 .rm D.lI,.r producl•.o<x _ ::: x.... TiO.... doPr.ducto. _ I:l X..""CÓClgo Des " ,,"ónCOOo IMPRI ~ ...~ I TP. thl , crm ~I F , ""o,hot o. i n, o r t"li~ ,,~ l ~rB OX ( _pr o du" co K~n~ J . 1 Ó . lrm r 1r oturn~"_pr o du ~t Q _BL. nIu " _ d " t o . 11.re ~ r .,ho nd~ith1; rmd<ll..2 1.&r~b" registro _ I:l Xr joy y o p o de m o ~ p r o b or nuestro nuevo p ~ nt o l l o con lo mi s mo func ionol id~dde lo p r im er ~e-,,;poón1~Ie~" [92 Televisor LeD 32"Ln M"""ioI I1>1Página 35