Вы находитесь на странице: 1из 99

TEMARIOS

Aplicaciones
Bases de Datos
Direcciones
Controles
Fechas y tiempo
Ficheros
Formularios
Gricos
Impresora
Inormes
Internet
Ms A!ents
"antalla
Redes
S#$
Ta%las
&arios
&istas y Consultas
Aplicaciones
A%rir ichero con el pro!rama asociado
A!rerar l'nea a un (e)e
Cierre automtico si no hay acti*idad
Compartir proyecto
Conectar+Desconectar a unidad de red
Detectar si se est e,ecutando (E-E o proyecto
Directorio de .indo/s( O%tener
E*itar 0ue un pro!rama acti*ado desde &F" se car!ue ms de una *e1
FileSystemO%,ect
Formularios a%iertos
Grupo de pro!ramas( Crear
2acer desaparecer las %arras de herramientas
Identiicar las unidades
Incluir rutinas de &B en &F"
$an1ar un pro!rama y esperar a 0ue termine
$o!o en pantalla principal
Memoria( $imitar en &F"
Modiicar clases %ase
34mero de *ersi5n
"asar parmetros a un e,ecuta%le
"ro!rama DOS( E,ecutar
"ro!ramar el o%,eto 6screen
Sa%er los usuarios 0ue estn usando la Aplicaci5n
Sa%er si inali15 un pro!rama
Sal*apantallas( E,ecutar desde &F"
Tama7o del e,ecuta%le( Reducir
&aria%le p4%lica
.ord( Automati1aci5n
Bases de Datos
ADO en &F"
Bases de Datos de Access
Bases de Datos en aplicaciones multiusuario
Cam%iar la locali1aci5n de la Base de Datos
Cam%iar la locali1aci5n de la Base de Datos 89:
Cam%iar la locali1aci5n de la Base de Datos 8;:
Conectarse con Access desde &F"
Cone)i5n MyS#$
Crear ori!en de datos ODBC <; por pro!rama
Direccionar ruta BD
$impiar una Base de Datos
MSDE( Documentaci5n
ODBC( Con*eniencia
ODBC( Crear cone)i5n
1 de 99
Direcciones
ADO en &F"
Chat en &F"
Curso de AS"
Dialer para llamada tele5nica
E=Mail en &F"
Empa0uetar inormaci5n para transmitir por modem
FileSystemO%,ect
Fo)"ress
Frame.or>s
Gar%a!e Collection
Instalador Inno Setup
$i%rer'a Fast$i%
Manuales
Mensa,es anteriores
MsA!ent
MyS0l
3ormali1acion
"ortal de pro!ramaci5n
"ortal de &F"
"rote!er+Restaurar Outloo>
Reo)
?ni*ersal Thread
&F"(3et
.indo/s interace
Controles
Ancho de lista de un cuadro com%inado
Asociar un Ima!e$ist a un control Tree&ie/
Calendario
Cam%iar el RecordSource a un !rid
Cam%iar la tecla pulsada
Cam%iar propiedades a controles del mismo tipo
Com%o%o)( A%rir lista
Com%o%o)( A7adir *alores
Compro%ar si un control est re!istrado
Contar los controles de un ormulario
Desinstalar OC-
En*iar al ondo
Gi animado( Tani(oc)
Grid( B4s0ueda incremental
Grid( Cam%iar colores
Grid( Columna desacti*ada
Grid( Mantener las propiedades
Grid( Marcar toda la l'nea actual
Grid( Eliminar un control a7adido
Grid( Ordenar columnas
M"< en &F"
Otro control en columna de Grid
"a!eFrame y Ta%Strip
RichTe)t( Imprimir
RTF
RTF( Impresi5n
Tree&ie/( Borrar nodos
Tree&ie/( Recorrer
Tree&ie/( Sa%er %ot5n presionado
Tree&ie/( &ersi5n
?ltimo eno0ue
.indo/s Script 2ost
Fechas y tiempo
Calcular el primer d'a del mes
Calcular el 4ltimo d'a del mes
Calcular la dierencia de dos echas en a7os@ meses y d'as
Calcular la edad
Calcular la echa de semana santa
2 de 99
Cam%iar la echa y la hora del "C
Con*ertir una echa a ormato lar!o
Modiicar echa y hora
O%tener el n4mero de d'a del a7o
"rimer dia del mes de un dia de la semana 8primer *iernes de A!osto(((:
Transormar una cantidad de se!undos a 22AMMASS
Ficheros
Compro%ar si hay disco en la ?nidad
Escri%ir y leer un *alor de un ichero I3I
E)istencia de 'ndice
Ficheros Co%ol
2acer un cursor modiica%le
2acer un SEEB o I3DE-SEEB a cual0uier *ista
O%tener los icheros de un directorio
Sa%er si e)iste un directorio
Sa%er si un alias pertenece a una *ista
Sa%er si se ha modiicado un re!istro
Tratar icheros (I3I
Formularios
Copiar el DataEn*ironment a otro ormulario
De*ol*er ms de un *alor desde un ormulario
Formulario o*alado
Formulario redondo
Formulario transparente
2andle de un orm
Imprimir un ormulario
Matri1 a un ormulario como parmetro
Mo*er una *entana sin t'tulo
O%,etos de un ormulario
ThisForm como parmetro
Gricos
Di%u,ar cuadro@ l'neas@ etc(
Dimensi5n de una ima!en
MsGraph( Tipos de !rico
(OC- similar a "aint
Impresora
Cam%iar la Impresora por deecto
C5mo coni!urar Reports cuya lon!itud del impreso sea coni!ura%le por el usuario en .in C)+3T para impresoras
matriciales
Controlar un poco la impresora
Cuel!ues
Impresora por Deecto
Imprimir en cual0uier impresora
Imprimir ormularios
"apel de tama7o personali1ado
"uertos
Redireccionar impresion
Inormes
; tama7os para un report
< inormes en uno
Anclar la %arra del pre*ie/
Centrar *erticalmente un report
C5mo a%rir un Report con un Doom determinado
C5mo e)portar los Report a 2TM$
C5mo incluir la Barra de 2erramientas del dise7ador de Reports en tiempo de e,ecuci5n
C5mo 0uitar el %ot5n de imprimir de los "re*ie/ de los Report en los e,ecuta%les
Contador de ho,as
Crystal Report( Cam%iar datos
Cristal Report( En*iar parmetros
Crystal Report( Inormes
En*iar un inorme por e=mail
Fuente predeterminada
Imprimir con ormato de E)cel
3 de 99
Imprimir te)to DOS desde &F"
Inorme con n4mero total de p!inas 82o,a ) de y:
Inorme en .ord
Inorme en 2TM$
Inormes en miniatura
Impresoras matriciales
Interrumpir impresi5n
Imprimir *arias copias de un inorme
Ma)imi1ar *enta de print pre*ie/
34mero de copias de un Report
34mero total de p!inas
"re*ie/ de Report con seleccionar impresora
#uitar %arra de herramientas
Tama7o de Report "ersonali1ado
T'tulos de los Report
Truco para el pre*ie/ de los reports
Internet
Cone)i5n a archi*o
Descar!ar archi*os
Direcci5n ?R$( $lamar a una
En*iar+Reci%ir mensa,es con Outloo> E)press
Outloo> E)press( $i%reta de direcciones
Outloo> E)press( A!re!ar re!istros a $i%reta de direcciones
"antalla
Cantidad de colores
Capturar la pantalla
Colores( Calcular
Ocultar+Mostrar la %arra de tareas de .indo/s
Resoluci5n en pantalla
Redes
Dominio( Conocer
2ora del ser*idor
S#$
Buscar pala%ra en ta%la
&alores (3?$$(
Ta%las
Actuali1ar datos 0ue no e)isten en otra ta%la
Append rom desde una *ista
Busca un campo en una ta%la y retorna (T( si tu*o E)ito
Campos memo
Crear ta%las con campos *aria%les
Crear ta%las de reerencias cru1adas
Compro%ar si ya e)iste un *alor
Insertar re!istro en una posici5n
"asar datos de un cursor a una ta%la
Renom%rar campo de una ta%la
Reparaci5n de enca%e1ado 8Ta%la:
Ta%las 0ue pertenecen a una DBC
T'tulo del campo
Transacci5n
&arios
Acceso directo en el escritorio
Actuali1ar el cursor de un !rid
Apa!ar el "C
Api( Datos TF"E
Arrancar el Internet E)plorer e ir a una p!ina .e%
C(C(C( D'!ito de control
Copiar al portapapeles
Copiar@ cortar y pe!ar
Conectar a Internet
Dri*ers( $istar
E,ecutar un sonido
4 de 99
Encriptaci5n de cadenas
En*iar un email por Outloo>
Fa)( En*io desde &F"
Formatear un dis>ette
Formatear un dis>ette 89:
Funci5n de consecuti*os
Funci5n para 0uitar acentos
Funciones matemticas
Marcador tele5nico
34mero de serie del disco
34meros a letras
34meros a letras 89:
"asar un n4mero de color a ormato RGB
"rototipos al *uelo
Tama7o del disco
?so de la coma como separador decimal
&alidaci5n CIF
&istas y Consultas
Consultas( E,ecuci5n
"oder hacer un SEEB o I3DE-SEEB a cual0uier *ista
3i*el de optimi1aci5n de consultas
&elocidad del select
&istas( Como cam%iar el criterio
&istas( Como cam%iar el ormato de campos
&istas actuali1a%les
&istas parametri1adas 0ue conten!an el contenido de un campo
&istas parametri1adas en una cuadr'cula
Aplicaciones
A%rir ichero con el pro!rama asociado
Ejecutar el documento directamente con la sentencia RUN:
run /n start MiCarta.DOC
No olidarse start.
A!re!ar l'nea a un (e)e
!ener" un nueo #ro$ecto en %isual &o' (ro
%as a la entana de c)di*o $ a*re*"s:
+et Centur$ On
+E, centur$ to 19 RO--O%ER ./
Do #ro*rama.e'e
Cierre automtico si no hay acti*idad
,al e0 te sea util usar el control ,1MER $ la 2uncion -ast3e$456 si -ast7e$45 contiene el mismo alor 8ue tienes *uardado en una
aria9le entonces si*ni2ica 8ue no se #resiono nin*una tecla en el la#so de tiem#o 8ue de2iniste en el control ,1MER.
Compartir proyecto
-o l)*ico $ correcto seria usar la :erramienta #reista #ara ello6 el +ource+a2e creo 8ue se llama de micro;o2t. %iene en la
ersi)n em#resarial de %isual +tudio $ creo 8ue tam9i<n se ende como #roducto inde#endiente.
De todas 2ormas6 $ como soluci)n =C>?(U@?= 4#ero 8ue $o la uso $ 2unciona5 consiste en :acer una co#ia de los arc:ios del
#rojecto 4.(A, $ .(AB5 con otro nom9re $ 8ue cada uno de ostros a9ra un #ro$ecto distinto. ?si no da
el error de 8ue el arc:io $a esta a9ierto. Eidentemente6 lo 8ue no #odreis :acer es a9rir los dos usuarios el mismo 2orm o re#ort
o #r*. >a$ 8ue tener cuidado con eso6 #ero #or lo demas 2unciona.
Es#ero te sira de a$uda.
/ de 99
?tentamente6
(ere (ujol i Es#uCa
?D+ ?nDlisi/Dissen$ de +o2t6 +.-.
mailto:##ujolEadssl.com
Conectar+Desconectar a unidad de red
Con estas 2unciones6 #uedes conectarse / desconectarse de una unidad de red.
FF
-uis MarGa !ua$"n
,ucum"n F ?r*entina
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H &UNC,1ON !etConnection4lcDrie5
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H Retorna el nom9re de la (C $ recurso
H com#artido de una cone'i)n de red
H (?R?ME,RO+: lcDrie
H U+O: I !etConnection4=7:=5
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
&UNC,1ON !etConnection4lcDrie5
DEC-?RE 1N,E!ER JNet!etConnection 1N J1N32?(1 K
+,R1N! l#-ocalName6 K
+,R1N! El#RemoteName6 K
1N,E!ER El#n-en*t:
-OC?- cRemoteName6 n-en*t:6 lcRet6 llRet
cRemoteNameL+(?CE41MM5
n-en*t: L 1MM
llRet L JNet!etConnection4lcDrie6EcRemoteName6En-en*t:5
lcRet L -E&,4cRemoteName6?,4C>R4M56cRemoteName5F15
RE,URN lcRet
END&UNC
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H &UNC,1ON ?ddConnection4tcDrie6tcResource6tc(assNord5
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H Conecta un recurso com#artido a la unidad tcDrie
H U+O: I ?ddConnection4=@:=6=OO(CPREMO,?ORECUR+O=5
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
&UNC,1ON ?ddConnection4tcDrie6tcResource6tc(assNord5
-OC?- lnRet
DEC-?RE 1N,E!ER JNet?ddConnection 1N J1N32?(1K
+,R1N! El#0RemoteName6 K
+,R1N! El#0(assNord6K
+,R1N! El#0-ocalName
1& (?R?ME,ER+45 Q 3
lnRet L JNet?ddConnection4EtcResource6M6EtcDrie5
E-+E
lnRet L JNet?ddConnection4EtcResource6Etc(assNord6 EtcDrie5
END1&
1& lnRet R M
RE,URN =Error = S ?--,4+,R4lnRet55 S K
= al conectar el drie = S tcDrie
END1&
RE,URN ==
END&UNC
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H &UNC,1ON CancelConnection4tcDrie5
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H Desconecta una unidad de red
H U+O: I CancelConnection4=@:=5
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
T de 99
&UNC,1ON CancelConnection4tcDrie5
-OC?- lnRet
DEC-?RE 1N,E!ER JNetCancelConnection 1N J1N32?(1K
+,R1N! El#0-ocalName6 K
1N,E!ER n&orce
lnRet L JNetCancelConnection4 EtcDrie6 M5
1& lnRet R M
RE,URN =Error = S ?--,4+,R4lnRet55 S K
= al desconectar el drie = S tcDrie
END1&
RE,URN ==
END&UNC
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Detectar si se est e,ecutando (E-E o proyecto
%ersion425 L M UU Ejecuta9le
%ersion425 L 2 UU (ro$ecto
Directorio de .indo/s( O%tener
V !E,EN%4WJ1ND1RW5.
E*itar 0ue un pro!rama acti*ado desde &F" se car!ue ms de una *e1
-a misma 2unci)n 8ue :emos isto en el caso anterior #uede ser usada #ara eitar 8ue un #ro*rama e'terno se car*ue m)s de una
e0.
Un ejem#lo sencillo es el de la calculadora de JindoNs.
1ma*inemos 8ue en nuestra a#licaci)n demos la #osi9ilidad de utili0ar la calculadora. (ondrGamos una lGnea come esta:
RUN /N C?-C.EBE
(ero si esta lGnea la ejecutamos m"s de una e06 se car*ar"s la calcuadora una $ otra e0.
H ?ntes de actiar la calculadora:
1& NO, &P?ctiaJin4=Calculadora=5
H -a calculadora no est" car*ada:
RUN /N C?-C.EBE
END1&
H X E+,? E+ -? &UNC1ON YUE -O >?CE ,ODO:
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
&UNC,1ON &P?ctiaJin4cCa#tion5
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-OC?- n>JD
DEC-?RE 1N,E!ER &indJindoN 1N J1N32?(1 K
+,R1N! cNU--6 K
+,R1N! cJinName
DEC-?RE +et&ore*roundJindoN 1N J1N32?(1 K
1N,E!ER n>andle
DEC-?RE +et?ctieJindoN 1N J1N32?(1 K
1N,E!ER n>andle
DEC-?RE +:oNJindoN 1N J1N32?(1 K
1N,E!ER n>andle6 K
1N,E!ER n+tate
n>JD L &indJindoN4M6 cCa#tion5
1& n>JD Z M
H %EN,?N? X? ?C,1%?
H -? =--?M?MO+=:
[ de 99
+:oNJindoN4n>JD695
H -? (ONEMO+ ENC1M?
+et&ore*roundJindoN4n>JD5
H -? ?C,1%?MO+
+et?ctieJindoN4n>JD5
RE,URN .,.
E-+E
H %EN,?N? NO ?C,1%?
RE,URN .&.
END1&
FileSystemO%,ect
httpA++msdn(microsot(com+li%rary+de*prods+*sG+*%asic+*%enlrCH+*ao%,ilesystemo%,ect(htm
Formularios a%iertos
HF 9orrar todos los 2ormularios de la memoria.
HF si no 8uedo nin*un 2orm corriendo6 este metodo deuele .t.
HF $ .2. en caso de error o 8ue no se :a$an cerrado todos los 2ormularios
HF a9iertos.
-ocal lDeoler
DoEents
lDeoler L .,.
&or E?C> o2orms?9iertos 1N ?((-1C?,1ON.&ORM+
H\H 12 o2orms?9iertos.J1NDOJ,X(E L 1
H\H lDeoler L .&.
H\H E'it
H\H Endi2
12 \o2orms?9iertos.+alir45 UU o .release45
HF mis 2orms 9ase tienen un metodo +?-1R...
lDeoler L .&.
E'it
Endi2
Ne't
Return lDeoler
Grupo de pro!ramas( Crear
Un *ran cola9orador de este *ru#o de noticias6 me enio esto6 es#ero te sira:
En el #aso T del asistente de instalaci)n6 9uscas el ejecuta9le de tu a#licaci)n $ clic3 en la casilla 8ue #one =administrador del
#ro*rama=. Entonces de9er" de salir una #antalla en la 8ue de9es es#eci2icar una descri#ci)n de tu a#licaci)n $ en la casilla lGnea
de comando colocas:
]sOa#licacion.e'e 4-o*icamente a8uG #ones el nom9re real de tu
#ro*rama6 no olides el ]s5.
?'el Oliares
2acer desaparecer las %arras de herramientas
12 J%isi9le4^Est"ndar_5
>ide JindoN ^Est"ndar_
End12
X asG con todas las dem"s.
Identiicar las unidades
?riel: Yui0"s con esto #uedas =ir tirando= :asta conse*uir lo 8ue 9uscas
. de 99
I======================================================
F?3CTIO3 $istDri*es8:
$OCA$ ln@ lnTipo
FOR ln J GK TO C;
lnTipo J DRI&ETF"E8C2R8ln::
DO CASE
CASE lnTipo J 9
I=== 3in!4n tipo
CASE lnTipo J ;
L C2R8ln:MNA Dis0ueteN
CASE lnTipo J <
L C2R8ln:MNA Disco duroN
CASE lnTipo J O
L C2R8ln:MNA ?nidad de red o unidad e)trai%le N
CASE lnTipo J K
L C2R8ln:MNA CD=ROMN
CASE lnTipo J G
L C2R8ln:MNA Disco RAMN
E3DCASE
E3DFOR
RET?R3 NN
E3DF?3C
I======================================================
-uis MarGa !ua$"n
,ucum"n F ?r*entina
)
(uedes usar el &ile +$stem O9ject:
o&+O L CRE?,EO`AEC,4W+cri#tin*.&ile+$stemO9jectW5
&or Eac: oDrie in o&so.Dries
I oDrie.Drie-etter
End&or
declare laDiscosaTb
laDiscosa1b L =Desconocido=
laDiscosa2b L =Remoi9le=
laDiscosa3b L =(artici)n -ocal=
laDiscosa4b L =Com#artido -?N=
laDiscosa/b L =CDFROM=
laDiscosaTb L =R?M Dis3=
&or Eac: oDrie in o&so.Dries
n L oDrie.Drie,$#e
I oDrie.Drie-etter S =:O= S +(?CE445 S laDiscos4nS15
End&or
FF
?le' &eldstein F MC(
Miami6 &-6 U+?
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

Incluir rutinas de &B en &F"
Com#ilala como un com#onente COM $ listo. Distri9u$es el dll junto con tu a#licacion.
?si la #uedes llamar desde %&(6 E'cel6 Jord6 etc.
$an1ar un pro!rama y esperar a 0ue termine
Usando JindoNs +cri#tin* >ost.
-OC?- loJs:+:ell
H +e :ace cosas antes de ejecutar
9 de 99
loJs:+:ell L CreateO9ject4=J+cri#t.+:ell=5
loJs:+:ell.Run4Q#at: de e'eZ6 16 .,.5
H+e :acen cosas des#ues de ejecutar
(asando .t. en el tercer #ar"metro del m<todo RUN 2uer0a a %&( es#erar :asta 8ue el EBE llamado termine.
$o!o en pantalla principal
E2ectiamente como dice ?le'6 E ... +?X es coneniente no usarlo. +i no 8uieres usar
Pscreen.ima*e L =d:OMi?rc:io.j#*=
#uedes controlar el tamaCo $ la #osici)n con:
Pscreen.addo9ject4=o1m*=6 =ima*e=5
Pscreen.o1m*.#icture L =d:OconsultaOd.j#*=
Pscreen.o1m*.isi9le L .,.
Pscreen.o1m*.stretc: L 1
Pscreen.o1m*.Nidt: L T4M
Pscreen.o1m*.:ei*:t L 4MM
FF
-uis MarGa !ua$"n
,ucum"n F ?r*entina
Memoria( $imitar en &F"
De9es c:e8uear la 2uncion +X+43M/M56 resulta 8ue %&( usa la memoria irtual de NindoNs6 #or lo tanto esta usando mas ram de
la 8ue #osee 2isicamente6 $ en consecuencia el uso es WindiscriminadoW.
Con esta 2uncion #uedes setear tanto en 2ore*round como en 9ac3*round. X se*un cuentan se de9eria #ro9ar mas o menos al
tercio de lo 8ue te in2orma la #rimera e0...
(ero la recomendacion es 8ue seteas tu necesidad o a$as 9ajando de a un 3 #ara ir #ro9ando la #er2ormance.
?demas de lo*rar un mejor control de memoria6 tendras un mejor a#roec:amiento 8ue redundara en ma$or elocidad de
ejecucion.
Claudio Cam#os
Modiicar clases %ase
En toolsFZo#tionsFZ2ield ma##in* $ a:G #odes es#eci2icar 8ue classes de9e usar %&( #ara cada ti#o
>u*o
34mero de *ersi5n
ln L ?!E,&1-E%ER+1ON4la?rra$6=C:OE'eOMi?##.e'e=5
D1+( MEMO -17E la?rra$
)
&OR ln1 L 1 to ln
I la?rra$4ln15
END&OR
-uis MarGa !ua$"n
,ucum"n F ?r*entina
"asar parmetros a un e,ecuta%le
En el #r* #rinci#al de9es tener en la #rimera lGnea:
(?R?ME,ER+ u(aram16 u(aram26 u(aram3
Cuando ejecutes tu #ro*rama le de9es #asar los #arametros de la si*uiente manera:
C:O?#licacionesOMi(r*.e'e (?R?ME,RO1 124/ O,RO
1M de 99
Recuerda 8ue todos los #arametros #asan al ejecuta9le como del ti#o caracter.
-uis MarGa !ua$"n
,ucum"n F ?r*entina
"ro!rama DOS( E,ecutar
Corre el #ro*rama en DO+ desde JindoNs +cri#tin* >ost6 #asando un #ar"metro .,. #ara 8ue corra en 2orma sincr)nnica 4o sea
8ue es#ere5.
Rde2ine +JP+>OJPNORM?- 1
Rde2ine +JP+>OJPM1N1M1@ED 2
Rde2ine +JP+>OJPM?B1M1@ED 3
o+:ell L createo9ject4=J+cri#t.+:ell=5
o+:ell.Run4=note#ad.e'e=6+JP+>OJPNORM?-6.,.5
FF
?le' &eldstein F MC(
Miami6 &-6 U+?
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
"ro!ramar el o%,eto 6screen
No se #ueden #ro*ramar directamente6 #ero un truco 8ue se #uede usar es6 en una clase tu$a a*re*" un #untero a Pscreen6 lue*o
#uedes re#ro*ramar los m<todos del mismo. (or ejem#lo
Pscreen.neNo9ject4WscW6 W+creenControllerW6 Wsc.#r*W5
H +C.(R!
de2ine class +creenController as custom
o+creen L Pscreen
2unction o+creen.resi0e
Nait NindoN WCam9iando el tamaCo de la entana #rinci#alW noNait
end2unc
2unction o+creen.mousedoNn4n`utton6 n+:i2t6 nBCoord6 nXCoord5
Nait NindoN WMouse doNn at: WSalltrim4str4nBCoord55SW6
WSalltrim4str4nXCoord55
dode2ault4n`utton6 n+:i2t6 nBCoord6 nXCoord5
end2unc
endde2ine
(ero no lo*r< 8ue 2uncione 8uer$unload6 #ero i*ual no creo 8ue sea
necesario $a 8ue #uedes usar #ara el mismo on s:utdoNn Vo noI 4no esto$
mu$ se*uro5
>u*o

Sa%er los usuarios 0ue estn usando la Aplicaci5n
,e contar< como controlo $o este tema de los usuarios en a#licaciones en red6 8ui0"s te #ueda serir.
?Cado una ta9la adicional con los si*uientes cam#os: (uesto6 &ec:a6 >ora6 Usuario
En esta ta9la6 al con2i*urar el #uesto de red #ara 8ue #ueda o#erar con la a#licaci)n6 el #roceso a*re*a un re*istro a dic:a ta9la $
deja en el cam#o =(uesto= el alor de s$s4M5 8ue deuele como $a sa9r"s 4la m"8uina de red cuando se utili0a %&( en un entorno
de red.5
Cuando una m"8uina6 arranca la a#licaci)n lo #rimero 8ue :ace es 9uscar en dic:a ta9la su s$s4M5
+E-E =lo8uesea=
-OC?,E &OR s$s4M5 ; =lo8uesea=.#uesto
HHH $ si no lo encuentra est" claro 8ue no se le #ermite se*uir ....
11 de 99
1& eo245 UU no se encontr)
HHH4mensaje de: terminal no autori0ado $ a la (. calle5
YU1,
END1&
si lo encuentra6 `-OYUE? E- RE!1+,RO X #one en los cam#os 2ec:a6 :ora6 usuario los res#ectios alores
+E, RE(ROCE++ ,O 1
1& .not. loc345 UU $a esta 9lo8ueado la a#licaci)n esta arrancada en este #uesto
8uit UU salida
END1&
RE(-?CE =lo8uesea=.&ec:a J1,> date456 =lo8uesea=.>ora Nit: time456
=lo8uesea=.Usuario Nit: m.user
+E, RE(ROCE++ ,O =lo 8ue uses :a9itualmente=
Este 9lo8ueo6 lo manten*o :asta 8ue sal*a de la a#licaci)n como se de9e salir $ entonces deja en 9lanco los cam#os 2ec:a6 :ora6
usuario a la e0 8ue des9lo8uea el re*istro.
RE(-?CE =lo8uesea=.&ec:a J1,> c= =d6 =lo8uesea=.>ora Nit: ==6
=lo8uesea=.Usuario Nit: ==
unloc3
-a entaj 8ue esto tiene6 es 8ue al salir de la a#licaci)n =de 2orma incorrecta6 #or error6 a#a*on etc= se des9lo8uea el re*istro si
9ien 8uedan anotados los datos del #uesto6 usuario6 2ec:a $ :oraK los 8ue 9orro si sale como es de9ido.
+i al entrar en la a#licaci)n6 el re*istro est" 9lo8ueado6 es seCal de 8ue $a tiene a9ierta la a#licaci)n $ se*uramente la tiene
minimi0ada #or lo 8ue #uedes #rocedo a leantarsela $ no se*uir en esta nuea a#ertura.
+i al entrar en la a#licaci)n6 no esta 9lo8ueado el re*istro #ero resulta 8ue se encuentra los alores de 2ec:a6 :ora6 usuarioK es
seCal de 8ue la e0 anterior 8ue entr)6 no salido de 2orma correctaK en tal caso #rocedo a lan0arle un mensaje de +E%ERO X
(E-1!RO+O ?%1+O 4 ...tal usuario6 entro en 2ec:a $ :ora a la a#licaci)n $ no salio como de9Ga6 =es la BBBB e0 8ue se a#a*a
de 2orma ile*al= o#eraci)n mu$ #eli*rosa6 #osi9le #erdida de datos ...aise al sericio tecnico...5
e No te #uedes :acer idea6 de lo 9ien 8ue 8ueda uno cuando :a$ #ro9lemas $ #uedes mirar $ decirles 8ue $a se :a salido de la
a#licaci)n 23 eces de 2orma incorrecta6 8ue V8ue es lo 8ue 8uieren 8ue :a*asI6 merece la #ena *uardar estos incidentes $a 8ue
se*uramente6 aca9ar"n #or mostrarte 8ue #uestos tienen #ro9lemas6 9ien sea de o#erador o de m"8uina o 8ui0"s de
NindoNs6 reinstalar nueamente el NindoNs en al*unas m"8uinas suele ser el 2inal de muc:os #ro9lemas.
(ara sa9er si un terminal6 esta conectado6 o cuantos :a$ conectados solamente :a9r" 8ue re#asar la ta9la en cuesti)n $ contar el
numero de re*istro 9lo8ueados.
+E, RE(ROCE++ ,O 1
+E-E =lo8uesea=
!O ,O(
m.contadorLM
DO J>1- .not. eo245
m.contadorLm.contadorS11&4loc3456M615
uncloc3
+71(
ENDD
+E, RE(ROCE++ ,O =lo 8ue uses :a9itualmente=
I =>a$ =Sstr4m.contador5S= terminales conectados=
Es#ero 8ue todo lo anterior6 te #ueda serir de al*oK En cual8uier caso6 un saludo a ,odos
jesse
Sa%er si inali15 un pro!rama
RDE&1NE NORM?-P(R1OR1,XPC-?++ 32
RDE&1NE 1D-EP(R1OR1,XPC-?++ T4
RDE&1NE >1!>P(R1OR1,XPC-?++ 12.
RDE&1NE RE?-,1MEP(R1OR1,XPC-?++ 1TMM
H Return code 2rom Jait&or+in*leO9ject45 i2
H it timed out.
RDE&1NE J?1,P,1MEOU, M'MMMMM1M2
H ,:is controls :oN lon*6 in milli secconds6 Jait&or+in*leO9ject45
12 de 99
H Naits 9e2ore it times out. C:an*e t:is to suit $our #re2erences.
RDE&1NE J?1,P1N,ER%?- 2MM
DEC-?RE 1N,E!ER Create(rocess 1N 3ernel32.D-- K
1N,E!ER l#?##licationName6 K
+,R1N! l#Command-ine6 K
1N,E!ER l#(rocess?ttri9utes6 K
1N,E!ER l#,:read?ttri9utes6 K
1N,E!ER 91n:erit>andles6 K
1N,E!ER dNCreation&la*s6 K
1N,E!ER l#Enironment6 K
1N,E!ER l#CurrentDirector$6 K
+,R1N! El#+tartu#1n2o6 K
+,R1N! El#(rocess1n2ormation
DEC-?RE 1N,E!ER Jait&or+in*leO9ject 1N 3ernel32.D-- K
1N,E!ER :>andle6 1N,E!ER dNMilliseconds
DEC-?RE 1N,E!ER Close>andle 1N 3ernel32.D-- K
1N,E!ER :O9ject
DEC-?RE 1N,E!ER !et-astError 1N 3ernel32.D--
H +,?R,U(1N&O is T. 9$tes6 o2 N:ic: Ne need to
H initiall$ #o#ulate t:e Wc9W or Count o2 `$tes mem9er
H Nit: t:e oerall len*t: o2 t:e structure.
H ,:e remainder s:ould 9e MF2illed
start L lon*2str4T.5 S RE(-1C?,E4C>R4M56 T45
H (ROCE++P1N&ORM?,1ON structure is 4 lon*s6
H or 4H4 9$tes L 1T 9$tes6 N:ic: NeWll 2ill Nit: nulls.
#rocessPin2o L RE(-1C?,E4C>R4M56 1T5
H +tart a co#$ o2 NO,E(?D 4EBE name must 9e nullFterminated5
&ile2Run L =C:OJ1NN,ONO,E(?D.EBE= S C>R4M5
H Call Create(rocess6 o9tain a #rocess :andle. ,reat t:e
H a##lication to run as t:e Wcommand lineW ar*ument6 acce#t
H all ot:er de2aults. 1m#ortant to #ass t:e start and
H #rocessPin2o 9$ re2erence.
RetCode L Create(rocess4M6 &ile2Run6 M6 M6 16 K
NORM?-P(R1OR1,XPC-?++6 M6 M6 Estart6 E#rocessPin2o5
H Una9le to run6 e'it noN.
1& RetCode L M
LME++?!E`OB4=Error occurred. Error code: =6 !et-astError455
RE,URN
END1&
H E'tract t:e #rocess :andle 2rom t:e
H (ROCE++P1N&ORM?,1ON structure.
:(rocess L str2lon*4+U`+,R4#rocessPin2o6 16 455
DO J>1-E .,.
H Use timeout o2 ,1MEOU,P1N,ER%?- msec so t:e dis#la$
H Nill 9e u#dated. Ot:erNise6 t:e %&( NindoN neer re#aints until
H t:e loo# is e'ited.
1& Jait&or+in*leO9ject4:(rocess6 J?1,P1N,ER%?-5 \L J?1,P,1MEOU,
EB1,
E-+E
DOE%EN,+
END1&
ENDDO
H +:oN a messa*e 9o' N:en NeWre done.
13 de 99
LME++?!E`OB 4=(rocess com#leted=5
H Close t:e #rocess :andle a2terNards.
RetCode L Close>andle4:(rocess5
RE,URN
HHHHHHHHHHHHHHHHHHHH
&UNC,1ON lon*2str
HHHHHHHHHHHHHHHHHHHH
H (assed : 32F9it nonFne*atie numeric alue 4m.lon*al5
H Returns : ?+C11 c:aracter re#resentation o2 #assed
H alue in loNF:i*: 2ormat 4m.retstr5
H E'am#le :
H m.lon* L 999999
H m.lon*str L lon*2str4m.lon*5
(?R?ME,ER+ m.lon*al
(R1%?,E i6 m.retstr
m.retstr L ==
&OR i L 24 ,O M +,E( F.
m.retstr L C>R41N,4m.lon*al/42fi555 S m.retstr
m.lon*al L MOD4m.lon*al6 42fi55
NEB,
RE,URN m.retstr
HHHHHHHHHHHHHHHHHHH
&UNC,1ON str2lon*
HHHHHHHHHHHHHHHHHHH
H (assed: 4F9$te c:aracter strin* 4m.lon*str5
H in loNF:i*: ?+C11 2ormat
H returns: lon* inte*er alue
H e'am#le:
H m.lon*str L =1111=
H m.lon*al L str2lon*4m.lon*str5
(?R?ME,ER+ m.lon*str
(R1%?,E i6 m.retal
m.retal L M
&OR i L M ,O 24 +,E( .
m.retal L m.retal S 4?+C4m.lon*str5 H 42fi55
m.lon*str L R1!>,4m.lon*str6 -EN4m.lon*str5 F 15
NEB,
RE,URN m.retal
Sal*apantallas( E,ecutar desde &F"
(uedes ejecutar tu sala#antallas desde %&( con:
RUN /N 9lac31T.scr /+
(rue9a cam9iar el nom9re del arc:io .+RC con los 8ue se encuentran en tu (C.
FF
-uis MarGa !ua$"n
,ucum"n F ?r*entina
14 de 99
Tama7o del e,ecuta%le( Reducir
. E'cluir los 2ormularios
. E'cluir los re#ortes $ las ta9las.
. No #oner im"*enes mu$ #esadas. +i est"s en %&( conierte los `M(Ws a A(!Ws ) !1&Ws
. +i inclu$es una `ase de Datos 4solo de istas o cone'iones5 :a0le un (?C7 D?,?`?+E
. Meng W#ro$ectoW F -im#iar #ro$ecto
. Meng W(ro$ectoW F W1n2ormaci)n del #ro$ectoW F Yuitar marca Win2ormar de de#uraci)n.
. -im#iar 9i9liotecas de clases 4c'5
&aria%le p4%lica
+e trata 4:a9itualmente5 de un o9jeto de clase 9ase WcustomW con muc:os m<todos #ersonales 8ue as a usar a lo lar*o de toda la
a#licaci)n $ con #ro#iedades 8ue necesitas acceso r"#ido a ellas sin leer ta9las. ,G#ico:
codi*o de usuario6 #ais6 moneda6 em#resa6 etc.... Metodos #ara calcular la letra del ni26 los c)di*os de control de una cuenta6 etc.
(uedes a#roec:arlo tam9i<n #ara *uardar al*unos datos 8ue necesites en un momento determinado. (or ejem#lo #uede ser una
9uena idea 8ue ten*a una #ro#iedad Wdatos42M5W 8ue uses #ara *uardar alores.
+e de2ine como #g9lica $ se crea en el WmainW del #ro$ecto
#u9lic o?##
o?## L createo9ject4=mio9jetoa#licacion=6 #ar16 #ar26 ...5
X en cual8uier lu*ar de la a#licaci)n #uedes re2erirte a el
o?##.datos435 L m.nMidato
m.nMidato2 L o?##.datos4/5
etc...
FF
+aludos6
FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Carlos Xo:n @u9iria
?.!.(.
.ord( Automati1aci5n
loJord L CRE?,EO`AEC,4=Jord.?##lication=5
loJord.?##lication.JindoN+tate L 1 UU NdJindoN+tateMa'imi0e
loJord.Documents.?dd45
loJord.+election.,$#e,e't4^el te'to 8ue se desee_5
loJord.?##lication.%isi9le L .,.
loRan*e L loJord.?ctieDocument.Ran*e45
loRan*e.1nsert?2ter4=%isual &o'(ro es su#er\=5
loJord.?ctieDocument.+ae?s4=c:Otem#Otest.doc=5
HloJord.(rintOut45
HloJord.Yuit45
Hrelease loran*e6 loJord
.actieDocument.Content.1nsert(ara*ra#:?2ter
.actieDocument.Content.ta9les.add4.selection.ran*e6 ren*lones6 35
FFFFFFFFFFFFFFFFFFFFF
Nit: oJord.selection.ta9les415
.9orders4Nd9orderle2t5.linest$le L Ndlinest$lenone
.9orders4Nd9orderri*:t5.linest$le L Ndlinest$lenone
.9orders4Nd9orderto#5.linest$le L Ndlinest$lenone
.9orders4Nd9order9ottom5.linest$le L Ndlinest$lenone
.9orders4Nd9order:ori0ontal5.linest$le L Ndlinest$lenone
.9orders4Nd9orderertical5.linest$le L Ndlinest$lenone
end Nit:
(or su#uesto necesitas la ca9ecera de o22ice #ara acceder a las constantes.
+i no la tienes:
Ndlinest$lenone L M
Nd9orderle2t L F2
Nd9orderri*:t L F4
Nd9orderto# L F1
Nd9order9ottom L F3
Nd9order:ori0ontal L F/
1/ de 99
Nd9orderertical L FT
FF
+aludos6
FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Carlos Xo:n @u9iria
?.!.(.
Bases de Datos
ADO en &F"
Es #er2ectamente #osi9le usar ?DO con %&(.
loConnection L createo9ject4=?DOD`.Connection=5
lcConnect+trin* L =(roiderL+Y-O-ED`61KData +ourceLMi+eridorKUser
1DLsaK(assNordL =
loConnection.O#en4lcConnect+trin*5
h
&Gjate en los documentos $ ejem#los en 1nternet:

Este artGculo de Ao:n %. (etersen es e'celente:
:tt#://msdn.microso2t.com/li9rar$/tec:art/?DOAum#.:tm

El J13i de &o' tiene muc:o material so9re %&(S?DO:
:tt#://2o'.Ni3is.com/Nc.dllIJi3iiCate*or$?DO

?lli encontra"s un 9uen jue*o de ejem#los en:
:tt#://2o'.Ni3is.com/Nc.dllIJi3iiUsin*?DOiJ1NPCOMPDN?

En tu ejem#lo6 te 2altan los #ar<ntesis en la 2unci)n O#en45 4%` no los necesita $a 8ue lo usa como sentencia5

?8ui te re#rodu0co el ejem#lo sim#le 8ue da ?nd$ McNeill #ara acceder a ta9las de %&( a tra<s de OD`C $ ?DO:

o9jConn L Createo9ject4=?DOD`.Connection=5
o9jR+ L Createo9ject4=?DOD`.Recordset=5
c+Y- L =+E-EC, H &ROM Customers=
o9jConn.O#en4=m$data=6==6==5
o9jR+.O#en4c+Y-6o9jConn635
>,>
FF
?le' &eldstein F MC(
Miami6 &-6 U+?
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Bases de Datos de Access
+i creamos istas remotas actuali0a9les de todas las ta9las de la .Md96 #odremos manejar la `ase de Datos de ?ccess desde
%isual &o'#ro.
Bases de Datos en aplicaciones multiusuario
,am9ien meto mi cuc:ara en esta so#a... :F5 O#ino 8ue la mejor 2orma de manejar el tema de la 9ase de datos en a#licaciones
multiusuario es la de no incluir la misma en los instaladores sino =*enerarla= desde la a#licaci)n.
El #rocedimiento es m"s o menos asG:
15 +e ejecuta la utilidad !END`C de %&( la cual *enera un #ro*rama 8ue =reconstru$e= la 9ase de datos.
25 +e inclu$e este #ro*rama en el #ro$ecto de la a#licaci)n.
35 !enerar los instaladores de la a#licaci)n e'clu$endo la 9ase de datos.
45 1nstalar la a#licaci)n en una de las estaciones
/5 Ejecutar la a#licaci)n
T5 -a a#licaci)n tratar de car*ar la ruta a la 9ase de datos desde un arc:io de con2i*uraci)n 4D`&6 1N16 MEM como #re2ieran5
1T de 99
[5 ?l no encontrar la ruta6 el #ro*rama #re*unta si se desea =conectar= a una 9ase de datos e'istentes o desea crear una nuea. -a
o#ci)n de conectar lo 8ue :ace es mostrar el di"lo*o de selecci)n de directorio #ara 8ue el usuario indi8ue la u9icaci)n de la 9ase
de datosK la o#ci)n de crear la 9ase de datos #ide la u9icaci)n de la misma $ la *enera utili0ando el #ro*rama *enerado #or la
utilidad !END`C.
.5 +e selecciona la o#ci)n de =crear `D= #ara crear la 9ase de datos acia
95 +e sale del #ro*rama.
1M5 +e re#iten los #asos 46 / $ T6 solo 8ue esta e0 se selecciona la o#ci)n =Conectar con `D=.
Este mecanismo $a 2u< im#lementado en una a#licaci)n masia multiusuario $ 2unciona de maraillasK claro6 solo #ara 9ases de
datos %&(: clienteFseridor es otra cosa...
%ictor
Cam%iar la locali1aci5n de la Base de Datos
-os 2ormularios almacenan el #at: de las ta9las de2inidas en el Entorno de Datos. (or des*racia cuando se distri9u$e la
a#licaci)n6 estos 2ormularios #ueden a#untar al directorio donde se desarrollaron. Estos #at:s de9en ser reseteados en tiem#o de
ejecuci)n #ara ase*urarnos 8ue a#untan a las ta9las correctas.
H en el #ro*rama #rinci#al o en la de cone'ion determinar el directorio actual
H almacenarlo en aria9les *lo9alos o del o9jeto a#licaci)n.
*c?##(at: L s$s42MM35
*cD`(at: L alltrim4*c?##(at:5S=OdatosO=
*cD`Name L =mi9asededatos.d9c=
(oner en el entorno de datos la #ro#iedad ?utoO#en,a9les L .&.
modi2icar la clase 9ase del 2ormulario 4o cam9ialo en cada 2ormulario5 en el Metodo -oad:
H a#untar todas las ta9las al directorio $ 9ase de datos correcto t:is2orm.+et?ll4=Data9ase=6*cD9(at:S*cD9name6=Cursor=5
H a9rir las ta9las
t:is2orm.dataenironment.o#enta9les45
HNO,?: esto 2unciona con ta9las de una 9ase de datos6 este codi*o de9e ser modi2icado si se usan ta9las li9res.
+aludos6
(a9lo Roca
-a CoruCa F Es#aCa
:tt#://#a*ina.de/isual2o' 4(ortal !ratuito de %isual&o'(ro en es#aCol5
Cam%iar la locali1aci5n de la Base de Datos 89:
1D ?rtGculo:
&ec:a de Creaci)n:
&ec:a de Reisi)n:
E1M11[
22FnoF199T
19F?(RF199[
-a in2ormaci)n en este artGculo se re2iere a:
FMicroso2t &o'(ro6 ersi)n 3.M
RE+UMEN
En este artGculo encontrar" in2ormaci)n de c)mo cam9iar en el Entorno de datos la locali0aci)n de la `ase de datos.
Mj+ 1N&ORM?C1hN
El Entorno de datos contiene in2ormaci)n so9re todas las ta9las6 istas6 $ relaciones 8ue interactuan con un &ormulario. En el
!enerador de &ormularios6 cuando se aCade una ta9la al Entorno de datos6 la #ro#iedad Data9ase del cursor se esta9lece con el
camino com#leto de directorios $ el nom9re de la `ase de datos contenedora 4.D`C5. El #at: 8ue contiene la #ro#iedad Data9ase
se esta9lece como a9soluto.
+i la 9ase de datos no se encuentra al a9rir el &ormulario6 a#arecer" el si*uiente error:
=Error al crear instancia de o9jeto Cursor. No se #uede
encontrar.Q9ase de datosZ=
1[ de 99
El c)di*o de ejem#lo de este artGculo6 #ro#orciona un m<todo de modi2icar el (?,> contenido en la #ro#iedad Data9ase.
Mj+ 1N&ORM?C1hN
Cuando una ta9la se aCade al Entorno de datos #or medio del !enerador de &ormularios6 se crea un o9jeto cursor. +i la ta9la
2orma #arte de un D`C6 la #ro#iedad Data9ase 4solo lectura en modo diseCo5 del cursor se esta9lece con el #at: com#leto $ el
nom9re del D`C. +in em9ar*o6 #uede 8ue se necesite cam9iar o modi2icar el #at: a9soluto al D`C cuando se distri9u$a la
a#licaci)n. (or ejem#lo6 di2erentes usuarios #ueden a9rir 9ases de datos con el mismo nom9re6 #ero situadas en di2erentes
directorios. +i usted necesita re2erenciar una 9ase de datos en un directorio di2erente al 8ue est" es#eci2icado en la #ro#iedad
Data9ase del O9jeto Cursor6 #uede :acerlo usando el comando +E, (?,>6 antes de 8ue el #ro*rama llame al &ormulario6
indicando la nuea locali0aci)n de la `ase de datos. +i la `ase de datos es#eci2icada en la #ro#iedad Data9ase del cursor no se
encuentra en el directorio tam9i<n es#eci2icado #or dic:a #ro#iedad6 %isual &o'(ro se*uir" 9uscando en todos los directorios
indicados #or +E, (?,>.
Otra alternatia es cam9iar la #ro#iedad Data9ase en tiem#o de ejecuci)n6 8ue es de lectura/Escritura. El ejem#lo si*uiente o2rece
2le'i9ilidad a su c)di*o6 actuali0ando el #at: de la #ro#iedad D?,?`?+E de todos los o9jetos Cursor 8ue :u9iera en el Entorno
de datos. Este c)di*o #uede actuali0ar el #at: de di2erentes 9ases de datos re2erenciadas en el Entorno de datos. +olo se re2erencia
un directorio en el ejem#lo6 asG 8ue necesitar" modi2icar el c)di*o si 8uiere a9rir `ases de datos de arios directorios.
(ara usar este ejem#lo:
1. Cree dos aria9les accesi9les #or el &ormulario. (or ejem#lo6 si
llama al &ormulario desde un.(R!6 introdu0ca la si*uiente
declaraci)n:
(U`-1C DataPDrie6 DataP(at:
FDataPDrie. Contiene la unidad $ dos #untos.
DataPDrie L =C:=
FDataP(at:. Contiene el nueo (?,> aca9ado en 9ac3slas:.
DataP(at: L =OD?,O+O?-M?CENO?R,1CU-O+O=
2. 1ntrodu0ca el si*uiente c)di*o en el eento `e2oreO#en,a9les del
DataEnironment. El comando J?1, J1NDOJ es solo ilustratio6 si
lo desea #uede eliminarlo.
1& \EM(,X4DataP(at:5 and \EM(,X4DataPDrie5
H Crea una matri0 9idimensional con todos los com#onentes
H del DataEnironment. (ara er su contenido use D1+(-?X
MEMORX L?MEM`ER+4?PCursors6,>1+&ORM.dataenironment615
H Ordena la matri0 ascendentemente #or la se*unda columna
L?+OR,4?PCursors6 25
H `usca el #rimer O9jeto en la matri0 $ deuele su #osici)n
n+tart#osL?+U`+CR1(,4?PCursors6 ?+C?N4?PCursors6
=O9ject=5615
H Recorre uno #or uno los elementos de la matri06 em#e0ando
H #or la #osici)n calculada en el #aso anterior
&OR 1 L n+tart#os ,O ?-EN4?Pcursors615
1& ?PCursors4i625 L =O9ject=
cO9jClass L =,>1+&ORM.D?,?EN%1RONMEN,.=
SaPcursors4i615S=.class=
H +i el elemento es un Cursor
1& E%?-4cO9jClass5L=Cursor=
cO9jNameL=,>1+&ORM.D?,?EN%1RONMEN,.= K
S ?PCursors4i615S=.D?,?`?+E=
J?1, J1NDOJ cO9jName
DataPNameLE%?-4cO9jName5
J?1, J1NDOJ =DataPName es : =S DataPName
H Modi2ica el #at: de la 9ase de datos
NeNData(at:L?--,R1M4DataPDrie5S
?--,R1M4DataP(at:5 K
S ?--,R1M4+U`+,R4DataPName6
R?,4=O=6DataPName5S155
J?1, J1NDOJ NeNData(at:
H Ealga el o9jeto cursor
oRe2 L E%?-4 =,>1+&ORM.D?,?EN%1RONMEN,.=
SaPcursors4i615 5
H Modi2ica la #ro#iedad Data9ase con el nueo
H #at:.
oRe2.Data9ase L NeNData(at:
END1&
1. de 99
E-+E
EB1,
END1&
END&OR
END1&
Cam%iar la locali1aci5n de la Base de Datos 8;:
Yuiero #oner mi *ranito de arena en este tema. -a 2unci)n 8ue ane'o al 2inal del mensaje actuali0a la #ro#iedad Data9ase de
todos los o9jetos Cursor de2inidos en un DataEnironment6 a 2Gn de 8ue a#unten al D`C actualmente seleccionado. -a llamada se
:ace desde el eento `e2oreO#en,a9les del o9jeto DataEnironment de la 2orma:
+etCursorD`C4,>1+6*cD`C(at:5
donde:
*cD`C(at:: nom9re $ u9icaci)n del arc:io D`C actual.
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
%ictor Es#ina
:tt#://NNN.mitrom#o.com/es#ina
H +etCursorD`C
H Esta9lece la #ro#iedad Data9ase de todos los o9jetos Cursor 8ue
H conten*a el dataenironment indicado en la #ro#iedad #oDataEnironment
H
(roc +etCursorD`C4toDataEnironment6tcD`C5
H
HFF +i no se indicaron #ar"metros o toDataEnironment no es un o9jeto6 se
cancela el m<todo
local lnNum(arams
lnNum(aramsL#arameters45
i2 lnNum(aramsLM or t$#e4=toDataEnironment=5QZ=O=
return
endi2
HFF +e actuali0a la #ro#iedad Data9ase de todos los o9jetos Cursor del
dataenironment
local i6j6Cursor
local arra$ laCursorsa1b
jLamem9ers4laCursors6toDataEnironment625
Nit: toDataEnironment
H
2or iL1 to j
H
CursorLeal4=.=SlaCursorsaib5
i2 Cursor.`aseClassQZWCursorW
loo#
endi2
i2 not em#t$4Cursor.Data9ase5
Cursor.Data9aseLtcD`C
endi2
end2or
endNit:
End(roc
[
Conectarse con Access desde &F"
,ienes 8ue crear un D+N de sistema 6desde el mismo #anel de control6 con el controlador de ?ccess6 le das un nom9re descri#tio
$ lo conectas a tu md9.
19 de 99
X dentro de tu #ro*rama :aces:
nCone'ionLs8lconnect4Nom9redecone'ionOD`C5 UU Deuele F1 si no :a$ cone'ion
c+Y-L=select H 2rom ta9ladeaccess=
s8le'ec4nCone'ion6cs8l6Nom9reCursoradeolerlosdatos5
Es#ero 8ue te sira de al*o
Un saludo
Oscar &ernande0
MadridFEs#aCa
Cone)i5n MyS#$
+im#lemente con una cone'ion OD`C 8ue se #uede conse*uir en su #a*ina NNN.m$s8l.com en el a#artado doNnload6 m$od9c.
`asta crear6 una e0 instalado6 una cone'ion con DN+ $ conectar con +Y-CONNEC,4Qnom9re del dnsZ5 o :acerlo sin crear
cone'ion con DN+6 de esta 2orma:
s8lset#ro#4M6=D1+(-O!1N=635
Qaria9leZ L s8lstrin*connect4=D`LQnom9re9asedatosm$s8lZK+ER%ERLQDir.1#donde esta el seridor de m$s8lZK
U1DLrootK(JDLK(OR,L33MTKO(,1ONL2/K+,M,L=KDR1%ERLcM$+Y-dKD+NLWW5
a #artir de a8ui6 $ de cual8uiera de las dos 2ormas anteriores6 teneis el numero de cone'ion en Qaria9leZ $ =atacas= a m$s8l con
ordenes del ti#o:
s8le'ec4Qaria9leZ6=+E-EC, H &ROM ...=6Qnom9redelcursorZ56 etc.
%uelo a insistir en 8ue es un sistema mu$ esta9le $ 8ue nos esta dando unos resultados 2antasticos. ?demas6 a #artir de la
ersion creo 8ue 3.23.19 4a:ora a #or la 3.23.2456 tiene re#licacion de 9ases de datos entre un maestro $ n esclaos. Nosotros
tenemos dos seridores cada uno con las mismas 9ases de datos m$s8lK cada e0 8ue modi2icamos un re*istro en el seridor
maestro nos esta actuali0ando6 automaticamente6 el seridor esclao. ?demas no :a$ limite en #oner tantos seridores esclaos
como se 8uiera. Nuestro miedo esta9a en 8ue ca$era la elocidad de #roceso #ero no
lo :a :ec:o en a9soluto.
+olo una cosa mas. ?un8ue M$+8l nacio #ara -inu' es #er2ectamente utili0a9le en JindoNs6 de :ec:o nosotros la estamos
utili0ando con seridores N,. -a elocidad de actuali0acion de las ersiones es mu$ alta6 inclu$endo mejoras
continuas. ?demas M$+8l es mu$6 mu$ ra#ido6 ...6 en NindoNs. Con un seridor -inu' uela.
+i necesitais mas a$uda 8uedo a uestra dis#osicion.
Un saludo.
Ra2ael Mateo Riero
Crear ori!en de datos ODBC <; por pro!rama
>ola Edison6 $o lo #ude :acer mediante una ?#i6 no se si se #uede de otro modo6 te #aso el codi*o6 es#ero te sira.
DEC-?RE +:ort +Y-Con2i*Data+ource 1N OD`CC(32 -on* :Nnd(arent6 1nte*er
2Re8uest6 +trin* El#s0Drier6 +trin* El#s0?ttri9utes
R DE&1NE OD`CP?DDPD+N 1 UU ?*re*a un Data +ource
lnRes# L +Y-Con2i*Data+ource4 M6 OD`CP?DDPD+N6 =+Y- +erer=6 K
=D+NL= S =Miod9c= S C>R4M5 S K
=Descri#tionL= S =9la 9la 9la 9la= S C>R4M5 S K
=Data9aseL= S =Mid9= S C>R4M5 S K
=+ererL= S =seridorPmio= S C>R4M5 S K
=,rustedPConnectionL1= C>R4M5 S K UU 1 si*ni2ica N, autenti2icacion6 M
+8l autenti2icacion
=Use(roc&or(re#areLM= S C>R4M5 5
1& lnRes# L M
ME++?!E`OB4=No se #udo crear el OD`C=6 4. 6 =ERROR=5
llRt L .&.
E-+E
2M de 99
H ME++?!E`OB4=`1EEEEEEEEEN =6 4. 6 =O7=5
llRt L .,.
END1&
(D: la in2ormaci)n #ara :acer esto la sa8ue de aca:
:tt#://NNN.3onstruct.com/2o'/articles/article1.:tm 2ijate6 #ara 8uedar mas claro lo anterior.
+aludos6 Emiliano
Direccionar ruta BD
>ola Oscar. Xo utili0o el 9ot)n de acceso directo de NindoNs. En el destino #on*o la ruta donde est" mi ejecuta9le $ en =iniciar
en= #on*o el directorio com#artido donde ten*o los datos. Con esto ten*o los ejecuta9les en cada m"8uina $ los datos
com#artidos en el seridor. Dentro de la a#licaci)n ten*o un #at: al s$s4/5Ss$s42MM35 mas mi directorio de datos. De esta 2orma
no :a$ 8ue cam9iar nada6 ale tanto si est" todo en el mismo directorio como si est"n se#arados los ejecuta9les de los datos.
Un saludo. ?n*ela.
$impiar una Base de Datos
U+E MiData`ase.D`C EBC-U+1%E
(?C7 D?,?`?+E
U+E
MSDE( Documentaci5n
M1croso2t Data En*ine 4M+DE5 es #r"cticamente lo mismo 8ue +Y- +erer T./
Entiendo 8$ue esta #or salir una ersi)n con el motor de +Y- +erer [
(uedes usarlo con la limitaciKon de #ocos usuarios $ #uedes mi*rar en 2orma
trans#arente a +Y- +erer en el 2uturo.
:tt#://msdn.microso2t.com/li9rar$/de2ault.as#IUR-L/li9rar$/9ac3*rnd/:tml/usin*msde.:tm
:tt#://msdn.microso2t.com/li9rar$/de2ault.as#IUR-L/li9rar$/9ac3*rnd/:tml/msde2ors.:tm
FF
?le' &eldstein F MC(
Miami6 &-6 U+?
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
ODBC( Con*eniencia
(aso #reio mu$ economico #ara #asar tus a#licaciones a cliente / seridor. Esto $a no es tan im#ortante al :a9er arias 9ases de
datos 2ree6 como m$+Y-6 1nter9ase T6 ...
-as transacciones las #uede llear el ,ransaction +erer
En concreto le eo otra a#licaci)n6 #ara mi 9astante im#ortante6 ima*inate 8ue comunicas con la central o una dele*aci)n 6 ia
internet6 #n6 o una cone'ion R?+ directa. +i desde tu #uesto a9res una ta9la6 ten en cuenta 8ue en ese momento em#ie0a a iajar
#or el ca9le el indice de dic:a ta9la6 :a$ eces 8ue moerse #or las ta9las en una cone'i)n de este ti#o son un su#licio6 si accedes
a las ta9las ia OD`C #ara %&(6 solo te traeras los datos 8ue necesites6 en nin*un caso te traeras el indice. +i no 8uieres #asarte a
una 9ase de datos de seridor6 esto resulta muc:o mas comodo de
tra9ajar 8uecon las ta9las directamente.
Res#ecto a la elocidad6 lo descono0co6 $o esto$ #or im#lementar al*o so9re OD`C #ara %&(6 $ entonces em#e0are a reali0ar las
#rue9as de elocidad.
FF
+aludos6
(a9lo Roca 4B#rocaEclao.net5 48uitar la B5
-a CoruCa F Es#aCa
1CY /M3/..[
+$so# del (ortal !ratuito de %isual&o'(ro en Es#aCol
:tt#://cli3.to/isual2o'
21 de 99
ODBC( Crear cone)i5n
Es#ero 8ue lo si*uiente te sira. +i tu 8uieres conectarte a `D %&( mediante OD`C6 de9es #rimero crear tu cone'ion en el
administrador de OD`C. ?:i de9era indicar el nom9re de la cone'ion.
Este mismo nom9re de9es senalar #ara conectarte en %&(. (Or ejem#lo6 si creaste una cone'ion llamada =datos=6 de9eras
conectarte DE+DE %&( con el comando Ls8lconnect4=datos=5 como es una 2uncion te deolera un alor6 es un alor numerico si
es ma$or a M la cone'ion 2ue e'istosa. El alor deuelto te #ermitira manejar tus datos. (or ejem#lo si te deuele el alor 16 tu te
re2eriras #ara reali0ar una consulta de la si*uiente manera6 Ls8le'ec416=select H 2rom autor=5
Marcelo 1an
Controles
Ancho de lista de un cuadro com%inado
(ara 8ue coincida con el anc:o del cuadro6 de9e ser i*ual a <ste menos 2T6 #ero si est" dentro de una #"*ina ser" i*ual al anc:o
del cuadro menos 1M.
Asociar un Ima!e$ist a un control Tree&ie/
1nserta un ima*elist en el 2ormulario des#u<s de :a9er insertado el treeieN6 ajusta sus im"*enes $ en el eento WinitW del treeieN
sitga este c)di*o:
t:is.1ma*e-ist L t:is2orm.ima*elist1.o9ject
(ara asi*nar una ima*en a un nodo usa los #ar"metros / $ T del m<todo WaddW de la colecci)n WnodesW
t:is2orm.treeieN1.Nodes.add4relatia6 relaci)n6 clae6 te'to6 ima*en6 ima*enPseleccionada5
FF
+aludos6
FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Carlos Xo:n @u9iria
?.!.(.
Calendario
(ara 8ue en el inicio el control tome la 2ec:a del sistema #one en el 1nit
del 2ormulario:
,:is&orm.oleCalendar.O9ject.,oda$
-uis MarGa !ua$"n
,ucum"n F ?r*entina
Cam%iar el RecordSource a un !rid
Cuando reali0amos o#eraciones con los datos de un *rid6 como cam9iarle el recordsource $ incularlo a otro ori*en de datos
4ta9la/cursor/ista56 :a$ eces en las 8ue se estro#ea el *rid 4se #ierden los anc:os de las columnas6 ...56 incluso sucede cuando
reali0amos diersas o#eraciones con dic:os datos:
(ara solucionar esto se de9e :acer de la si*uiente manera:
-OC?- lcRecord+ource
lcRecord+ource L ?--,R1M4,:is.Record+ource5
,:is.Record+ource L ==
HH ejecutar el codi*o 8ue se desee #ara la ta9la/ista o cursor
HH +C?NWs6 RE(-?CEWs ...
,:is.Record+ource L lcRecord+ource
+i 8ueremos incularlo a otro cursor o datos6 #ues sim#lemente :a$ 8ue :acer:
t:is2orm.csP*rdresal1.recordsourceLWlPdiarioteW
22 de 99
Es alido si se mantienen los mismos nom9res de cam#os $ orden6 $o tam9i<n #or ase*urarme 8ue todo a 9ien6 siem#re restauro
los controlsources de las columnas:
t:is2orm.csP*rdresal1.column1.controlsourceLWlPdiariote.dia2a#unW
t:is2orm.csP*rdresal1.column3.controlsourceLWlPdiariote.dianasiW
t:is2orm.csP*rdresal1.column4.controlsourceLWlPdiariote.diacuentaW
t:is2orm.csP*rdresal1.columnT.controlsourceLWlPdiariote.diaconce#W
t:is2orm.csP*rdresal1.column[.controlsourceLWlPdiariote.diade9eW
t:is2orm.csP*rdresal1.column..controlsourceLWlPdiariote.dia:a9erW
t:is2orm.csP*rdresal1.column9.controlsourceLWlPdiariote.diadicodW
Cam%iar la tecla pulsada
Cam9iar ^C_ #or ^D_
Eento 7e$(ress
-(?R?ME,ER+ n7e$Code6 n+:i2t?ltCtrl
i2 inlist4n7e$Code6 996 T[5
node2ault
3e$9oard =D=
endi2
FF
+aludos6
FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Carlos Xo:n @u9iria
?.!.(.
h
En el metodo KEYPRESS del control prueba a poner algo de este estilo:

LPARAMETERS nKeyCode, nSi!tAltCtrl

"# nKeyCode$%
&ode!ault'(,nSi!tAltCtrl)
E*&"#
Toni At+ncia i Puigdom+nec
&epartamento in!orm,tico
tona-e.co/er0com
1110e.co/er0com
E2C34ER, S0A0
Cam%iar propiedades a controles del mismo tipo
,:is&orm.+et?ll4=&oreColor=6 =R!`42//6M6M5=6 =-a9el=5
Com%o%o)( A%rir lista
3e$9oard Wc'41?MdW a9re el com9o sea del ti#o 8ue sea.
Com%o%o)( A7adir *alores
(uedes usar t:is.add#ro#ert$
t:is.add#ro#ert$4Wa,est415W5
Nit: t:is
dimension .a,est4/5
.a,est415LW?r*entinaW
.a,est425LWCanadaW
.a,est435LWMe'icoW
.a,est445LWNicara*uaW
23 de 99
.a,est4/5LW1n*laterraW
asort4.a,est5
.RoN+ourceLWt:is.a,estW
.RoN+ource,$#eL/
endNit:
Compro%ar si un control est re!istrado
Est" el iejo truco de intentar crearlo desactiando la rutina de error6 $ si la creaci)n tiene <'ito est" re*istrado.
on error nada45
mmm L createo9ject4...5
on error ...
i2 t$#e4=mmm=5 L =O= UU <'ito en la creaci)n
...
else
...
endi2
FF
+aludos6
FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Carlos Xo:n @u9iria
?.!.(.
Contar los controles de un ormulario
Este es el es8ueleto de un m<todo de una 2orma. Es un m<todo recursio
+e llama dentro de la 2orma ,:is&orm.Nom`reB4 ,:is&orm5
H M<todo Nom9reB
-(?R?ME,ER+ o,:is
-OC?- loControlRe2
-OC?- loControlCont
H Controles de la 2orma
&OR E?C> loControlRe2 1N o,:is.CON,RO-+
J1,> loControlRe2
DO C?+E
C?+E .`?+EC-?++ L =,e't9o'=
H >acer al*o en en este ,e'9o'
C?+E .`?+EC-?++ L =Edit9o'=
C?+E .`?+EC-?++ L =Com9o9o'=
C?+E .`?+EC-?++ L =Command9utton=
C?+E .`?+EC-?++ L =C:ec39o'=
C?+E .`?+EC-?++ L =!rid=
C?+E .`?+EC-?++ L =(a*e2rame=
&OR E?C> lo(a*eRe2 1N .(?!E+
J1,> lo(a*eRe2
,>1+&ORM.Nom9reB4 lo(a*eRe2t5
ENDJ1,>
END&OR
C?+E .`?+EC-?++ L =(a*e=
,>1+&ORM.Nom9reB4 loControlRe2 5
C?+E .`?+EC-?++ L =Container=
,>1+&ORM.Nom9reEste M<todo4 loControlRe2 5
ENDC?+E
ENDJ1,>
END&OR
Esta listo #ara ser com#letado $ am#liado.
+e #uede contar6 *uardar datos en una matri0 etc.
24 de 99
Desinstalar OC-
Re*+r32 /u RutaNom9re
En*iar al ondo
@order4M5 UU al 2rente
@order415 UU al 2ondo
Gi animado( Tani(oc)
En el !ru#o microso2t.#u9lic.es.9 conse*ui este Control 8ue te #ermite mostrar un !i2 ?nimado.
Utili0a solamente dos comandos:
,:is2orm.Olecontrol1.&ileName L WC:OMis 1ma*enesO`annerP1.*i2W
,:is2orm.Olecontrol1.+:oN!i2
Grid( B4s0ueda incremental
-uis: Esto lo enie al*una e0 $ 2unciona.
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H (ara :acer una `U+YUED? 1NCREMEN,?- en un &ormulario6 de9emos #oner un
H ,e't`o' 4,e't15 $ una !rilla 4!rid15.
H En el Entorno de datos insertaremos la ta9la 4Mi,a9la5
H En el m<todo 1nteractieC:an*e del ,e'`o'
H escri9ir el si*uiente c)di*o:
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
HFFF 1nteractieC:an*e FFF
local lc6 lnRecno
+elect Mi,a9la
lc L allt4,:is.%alue5
lnRecno L recno45
i2 Mi,a9la.Nom9re ZL lc
i2 not 9o245
s3i# F1
endi2
i2 Mi,a9la.Nom9re Q lc UU de9e 8uedar donde esta9a
i2 lnRecno QL recc45
*o recno45
else
*o 9ott
endi2
return
endi2
i2 not em#t$4order455 UU 9us8ueda con indice
see3 lc
else
*o to#
locate rest 2or Mi,a9la.Nom9reLlc N:ile Mi,a9la.Nom9re QL lc noo#timi0e
endi2
else
locate rest 2or Mi,a9la.Nom9reLlc N:ile Mi,a9la.Nom9re QL lc noo#timi0e
endi2
i2 lnRecno R recno45
,:is&orm.!rid1.+et&ocus UU el nom9re del ,e't`o'
,:is&orm.,e't1.+et&ocus UU el nom9re del !rid
endi2
return
HFFF END 1nteractieC:an*e FFF
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H NO,?: +E DE`E ,ENER -?+ +1!U1EN,E+ CON+1DER?C1ONE+:
2/ de 99
H F-a ta9la de9e estar ordenada ?+CENDEN,EMEN,E o e'istir un indice
H #or Nom9re $ estar seleccionado 4el m<todo 9usca si :a$ un
H +E, ORDER esta9lecido5
H F&ijarte 9ien el nom9re del ,e'`o' $ del !rid #ara inocar el
H m<todo +et&ocus 4en el ejem#lo !rid1 $ ,e't15
H F&ijarte el alias de la ta9la del *rid 4en el ejem#lo Mi,a9la5
H FConiene 8ue los nom9res est<n en ma$gsculas $ aCadir en la
H #ro#iedad &ormat del ,e't`o' L \ #ara 8ue sean in*resados en ma$gsculas
H FConiene 8ue la #ro#iedad del !rid RecordMar3 L .,. #ara 8ue se ea
H el re*istro marcado6 o manejar el color del re*istro seleccionado
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-uis MarGa !ua$"n
,ucum"n F ?r*entina
Grid( Eliminar un control a7adido
+eCalas el control aCadido con las #ro#iedades6 #resionas clic3 en el marco su#erior de la entana $ lue*o #resionas delete
+er*io Roc:a ,enorio
srnicE:otmail.com
Grid( Cam%iar colores
#ro#iedad Wre*istroW en el 2ormulario6 iniciali0ada a M m<todos W#unteroW $ W#on*ridW en el 2ormulario
M<todo #untero
t:is2orm.re*istro L recno4=mialias=5
t:is2orm.*rid1.re2res:45
M<todo #on*rid
m.condicion L Wii24recno4=mialias=5 L t:is2orm.re*istro6 r*94...56
r*94...55W UU elije los colores 8ue 8uieras
t:is2orm.*rid1.setall4=d$namic9ac3color=6 m.condicion6 =column=5
m.condicion L Wii24recno4=mialias=5 L t:is2orm.re*istro6 r*94...56
r*94...55W UU elije los colores 8ue 8uieras
t:is2orm.*rid1.setall4=d$namic2orecolor=6 m.condicion6 =column=5
Eento a2terroNcolc:an*e del *rid
dode2ault45
t:is2orm.#untero45
Eento W1nitW del 2ormulario o del *rid
t:is2orm.#on*rid45
FF
+aludos6
FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Carlos Xo:n @u9iria
?.!.(.
Grid( Columna desacti*ada
Ena9led L .&.
Grid( Mantener las propiedades
?ntes de :acer un REYUERX45 #ara 8ue se re2rescara la in2ormaci)n de los *rid6 de9Ga #rimero 8ue desconectarle a ellos la
2uente6 es decir:
si el Record+ource del !rid es =Mi%ista= entonces tendrGa 8ue :acer lo si*uiente:
,:is2orm.!rid1.Record+ource L == UU(ar de comillas #ara indicar acGo
REYUERX4=Mi%ista=5
,:is2orm.!rid1.Record+ource L =Mi%ista=
,:is2orm.!rid1.Re2res:45
2T de 99
RO`ER, !1O%?N1 C>UR1ON ROA?+
Colom9iaFCasanareFOrocu<
1CY Nro. 2.2[./.3
Grid( Marcar toda la l'nea actual
Crea una #ro#iedad en tu 2ormulario con el nom9re nRe*istro?ctual!rid6 e inicialG0ala a alor M.
H En el eento 1nit del !rid escri9e el si*uiente c)di*o
t:is.+et?ll4=D$namic`ac3Color=6K
=11&4RECNO45Lt:is2orm.nRe*istro?ctual!rid6 R!`4M6M612.56 t:is.`ac3Color5=6K
=Column=5
t:is.+et?ll4=D$namic&oreColor=6K
=11&4RECNO45Lt:is2orm.nRe*istro?ctual!rid6 R!`42//62//62//56
t:is.&oreColor5=6K
=Column=5
H En el eento ?2terRoNColC:an*e #on el si*uiente c)di*o
t:is2orm.nRe*istro?ctual!rid LRECNO45
t:is.Re2res:45
Grid( Ordernar columnas
,omado de nuestro code9oo3 $ i*ente desde el 9/ \
>as un metodo en tu *rid 9ase6 $ solo #oner en los clic3 de tus :eader lo si*uiente
t:is.(arent.(?rent.+etORder4=c(olic$=6 ,>1+5
Donde el #rimer #arametro es el ,?! 8ue de9es tener 4el se*undo es una ariante mia6 aun no im#lementada6 la idea era mandar
el :eader como #arametro #ara mani#ular su color $ ca#tion6 e indicar isualmente la columna 8ue esta Wactiamente ordenadaW5.
X :a$ 8uien dice 8ue el code9oo3 es WanticuadoW...
+aludos $ 8ue te sira.
Claudio Cam#os
Ra2aela6 +anta &e
cC+E,ORDER!R1D.+E,ORDERd
-(?R?ME,ER+ tcControl+ource6 to>eader
-OC?- lo+elect6 K
lnCount6 K
lc&ield
HFF 9e sure to select t:e ri*:t alias45
-OC?- lo+elect
lo+elect L CRE?,EO`AEC,4=c+elect=6 t:is&orm.o`i0O9j.!et?lias455
HFF +ets t:e order to t:e currentl$ selected
HFF controlsource i2 #ossi9le
HFF !et t:e 2ieldname 9ein* used
lc&ield L K
+U`+,R4tcControl+ource6 ?,4=.=6 tcControl+ource5 S 15
HFF +ee i2 t:e 2ield name is in t:e le2tmost #art o2 t:e inde'
HFF e'#ression. 12 so6 +E, ORDER ,O t:e inde'.
&OR lnCount L 1 ,O ,?!COUN,45
1& U((ER4+X+4146 lnCount55 L U((ER4lc&ield5
+E, ORDER ,O lnCount
1& ,X(E4=t:is2orm=5 LL =O=
2[ de 99
t:is2orm.Re2res:45
END1&
EB1,
END1&
END&OR
M"< en &F"
En la !aleria de com#onentes de >erramientas esta el control Psound#la$er1. (ara er mejor como 2unciona :a$ un sam#le de
?(1 #ara re#roducir musica con %&(.
Otro control en columna de Grid
(or de2ecto %&(6 te #one te't9o' en las columnas6 lo 8ue tienes 8ue :acer es lo si*.
selecciona el te't9o' de la columna 8ue 8uieres6 #ero desde la entana de #ro#iedades6 des#u<s de9es :acer clic3 en el
2ormulario6 #ero OAO6 de9e ser so9re la 9arra de titulo del 2ormulario6 #ara 8ue no #ierda el 2oco el te't9o'6 des#u<s de eso
#resionas la tecla +u#rimir6 #ara 8ue lo 9orres6 o36 des#u<s de eso seleccionas el control Com9o`o'6 de la 9arra de controles $
:aces clic3 so9re la columna donde lo 8uieres6 $ listo a modi2icar las #ro#iedades del com9o6 $a 8ue autom"ticamente se te
modi2ica la #ro#iedad CurrentControl de la columna corres#ondiente..\\
:tt#://NNN.sistec.com.m'/ileodan
"a!eFrame y Ta%Strip
+i an a utili0ar #a*e2rames el control incluido en el %&OB unicamente so#orta los ta9s en la #arte su#erior6 #eeeerooooo:
#ueden usar el ?ctie' incluido =,a9+tri#= en com9inacion con el #a*e2rame
?l #a*e2rame de2inanlo con la cantidad de #a*inas 8ue necesiten la #ro#iedad ,a9s #on*anla a .2. #ero durante el diseCo no
#odran manejar las #a*inas directamente6 asi 8ue durante el diseCo #ueden dejarla como .t. $ en el init del #a*e2rame #on*anlas
como .2. 4 t:is.ta9s L .2.5
en el ta9stri# en el eento clic3 #ueden mandar llamar un metodo 8ue ejecute el si*uiente
codi*o 4o #ueden #oner el si*uiente codi*o directamente a:i mismo5
2rame1 L ,:is.(arent.(a*e2rame1 UU #ara 2acilidad de manejo mas adelante
#*?ctia L 2rame1.?C,1%E(?!E UU re*resa el alor de la #a*ina actia
1& ,>1+.+E-EC,ED1,EM.1NDEB QZ #*?ctia UU si la actia es distinta de la seleccionada
2rame1.?C,1%E(?!E L ,>1+.+E-EC,ED1,EM.1NDEB UU actiar la #a*ina del #a*e2rame
END1&
t:is.set2ocus45
UU dejar 2ocous en el ta9 4#ara simular el e2ecto5
com9inando estos dos controles #odran tener un #a*e2rame con los ta9s arri9a6 a la i08uierda6 a la derec:a6 a9ajo
solo 8ue no se les olide 8ue de9en :a9ilitar el ,a9+tri#6 entre los actie' a incluir en la distri9ucion6 en el +etu#Ji0ard
RichTe)t( Imprimir
De9es utili0a el metodo sel#rint del control. ?8ui te #on*o un ejem#lo #ara im#rimir todo el contenido
control.selstartL1
control.sellen*t:Llen4control.te'trt25
Control.sel#rint
(ara im#rimir solo una #arte maneja selstart $ sellen*t:
+aludos. Es#ero 8ue te sira
Emilio &ernande0
RTF
2. de 99
,ienes todas las re2erencias en:
:tt#://msdn.microso2t.com/li9rar$/de#rods/sT/9asic/rt29o'9./9ojric:edit.:tm
RTF( Impresi5n
Ricardo : No #odes im#rimir directamente del Ric:te't control lo tenes 8ue :acer en coninacion con un CommonDialo*. ,e
mando un ejem#lo #ara #oner en un 9oton de im#resion6 Es#ero te sira.
cdl(DReturnDC L2/T
cdl(DNo(a*eNums L.
cdl(D?ll(a*es LM
cdl(D+election L1
J1,> ,>1+&ORM
.CommonDialo*1.&la*s L cdl(DReturnDC S cdl(DNo(a*eNums
12 .Ric:,e't`o'1.+el-en*t: L M ,:en
.CommonDialo*1.&la*s L .CommonDialo*1.&la*s S cdl(D?ll(a*es
Else
.CommonDialo*1.&la*s L CommonDialo*1.&la*s S cdl(D+election
End12
.CommonDialo*1.+:oN(rinter
.Ric:,e't`o'1.+el(rint4 .CommonDialo*1.:DC 5
ENDJ1,>
Tree&ie/( Borrar nodos
t:is2orm.treeieN1.nodes.clear45
Tree&ie/( Recorrer
&or iL1 to t:is2orm.lN-ist.Nodes.Count
i2 t:is2orm.lN-ist.Nodes4i5.7e$L....
endi2
End2or
)
&or eac: oNodo in t:is2orm.lN-ist.Nodes
i2 oNodo.7e$L....
endi2
End&or
>,>
%ictor Es#ina
Tree&ie/( Sa%er %ot5n presionado
Xo #ersonalmente :a*o lo si*uiente #ara sa9er cual 9ot)n 2ue #resionado.
1.F De2ino una #ro#iedad en el 2orm 8ue contendr" el ngmero de 9ot)n a#retado. Ejem#lo `oton
2.F En el m<todo MouseDoNn #on*o al*o asG.
-(?R?ME,ER+ 9utton6 s:i2t6 '6 $
,>1+&ORM.9oton L 9utton FZ !uardo 8ue 9ot)n se #resion)
3.F En el m<todo nodeclic3 al*o asG
-(?R?ME,ER+ NODE
1& ,>1+&ORM.9oton L 2 UU Ri*:tClic3
,>1+&ORM.actiaPmenu4NODE5
E-+E UU ?ctuali0o el listieN
29 de 99
,>1+&ORM.actuali0arPlistieN4NODE5
END1&
Mario Aacas
Cu9a. Costa Rica
Tree&ie/( &ersi5n
Yueda claro.
-a ersi)n 1 est" en comctl32.oc'
-a ersi)n 2 en mscomctl.oc'
FF
+aludos6
FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Carlos Xo:n @u9iria
?.!.(.
?ltimo eno0ue
15 En el 1nit del 2ormulario colocas:
t:is2orm.?dd(ro#ert$4=c-ast&ocus=6==5
25 En el eento -ost&ocus de cada o9jeto en la 2orma colocas:
t:is2orm.c-ast&ocusLstrtran4s$s412[26t:is56t:is2orm.NameS=.=6==5
35 -ue*o6 cuando re2erirte al o9jeto 8ue tenia antes el 2oco6 usas:
o-ast&ocusLeal4=t:is2orm.=St:is2orm.c-ast&ocus5
.indo/s Script 2ost
Es MUC>O6 mas #oderos 8ue los iejos .`?,
,e #ermite controlar el sistema de directorios $ arc:ios6 s:ortcuts6 re*istr$ $ muc:o mas
&ijate en :tt#://msdn.microso2t.com/scri#tin*
FF
?le' &eldstein
MC( F %isual &o'(ro
Direcciones
ADO en &F"
`usca en NNN.microso2t.com/data/
h
en la si*uiente direccion tenes un articulo mu$ interesante so9re ?DO $ %&(
:tt#://NNN.microso2t.com/s#ain/msdn/articulos/arc:io/M9MTMM/oices/adojum#.as#
Chat en &F"
En el si*uiente lin3 #odras 9ajar una a#licacion mu$ interesante de c)mo #oder c:atear #or medio de 2o'.
:tt#://NNN.2#ress.com/reista/NumMM12/articulo.:tm
Curso de AS"
+olo #ara Caracas %ene0uela6 curso de ?+( en Es#aCol
:tt#://NNN.loresoli.com/#ortal/as#.#:#
Dialer para llamada tele5nica
3M de 99
NNN.2#ress/reista/Num9.M3/Mar9..:tm
E=Mail en &F"
>a$ un e'celente jue*o de controles 4todos escritos en %&( natio6 no ?ctieB5 llamados &o' E'tension Classes. Uno de ellos
:ace e'actamente lo 8ue tu 8uieres.
%er: :tt#://NNN.e#sFso2tNare.com/2ec
FF
?le' &eldstein F MC(
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Empa0uetar inormaci5n para transmitir por modem
2ijate en la a#licacion del ejem#lo de uso del control M+COMM32.OCB en
NNN.2#ress.com/reista/Num9.M3/Mar9..:tm
Claudio Riadera
-a RiojaF?r*entina
FileSystemO%,ect
?#arte del lin93 8ue te :an dado6 #uedes er m"s so9re J+> $ &+O en:
:tt#://msdn.microso2t.com/scri#tin*/
:tt#://NNN.NindoNsFscri#t.com/
$ t$am9i<n en la e'celente serie de artGculos $ ejem#los so9re ello en %&U!
4lo*in *ratis5
:tt#://NNN.2u*.or*
escritos #or Ed Rau: $ !eor*e ,as3er
FF
?le' &eldstein F MC( %isual &o'(ro
Miami6 &-6 U+?
Frame.or>s
Es di2Gcil recomendar un 2rameNor3. ,odos tienes sus #ros $ sus contras. Es una decisi)n mu$ #ersonal.
>a$ una cantidad6 con diersas 2iloso2Gas. -a decisi)n de#ende muc:o de tus necesidades6 conocimientos $ estilo de
#ro*ramaci)n.
(uedes er muc:a in2ormaci)n en el Ni3i de 2o':
:tt#://2o'.Ni3is.com/Nc.dllIJi3iiCate*or$&rameNor3s
(ara #ro*ramas m"s =cl"sicos= de red uso %isual Ma'2rame (ro2esional / de DreN +#eedie. Este #or su#uesto :ace todo lo 8ue
mencion< anteriormente.
,ienen su 2oro de so#orte t<cnico en :tt#://discussion.isualma'2rame.com/ $ tam9i<n :a$ muc: a *ente 8ue lo usa $ a$uda en
U,.
Con res#ecto a tu #re*unta so9re cam9io de idioma 4se conoce esto como =internacionali0aci)n= de #ro*ramas56 %M( es mu$
2"cil de :acer $a 8ue se conecta mu$ 9i<n con 1N,- de +teen `lac36 el 8ue tam9i<n uso. %M( tam9i<n tiene 2"cil cone'i)n
4:oo3s5 con +D, de Dou* >enni* $ NNBM- de Ric3 +tra:l en el caso 8ue los 8uieras usar.
(ara diseCos distri9uidos 4NF,ier56 %M( es un #oco mas com#licado de ada#tar 4al menos en esta ersi)n5 $a 8ue est" 9asado en
2orms. En ese caso #uedes er %isual &o' E'#ress6 Mere Mortals6 Code9oo36 COMCode9oo36 entre otros.
?le' &eldstein F MC( %isual &o'(ro
Miami6 &-6 U+?
Fo)"ress
31 de 99
&o'(ress cam9i) su seridor6 $ su DN+ tardar" al*unos dGas en actuali0arse.
-a nuea direcci)n 1( del sitio: :tt#://19/.//.1[4.243
FF
-uis MarGa !ua$"n
,ucum"n F ?r*entina
Gar%a!e Collection
:tt#://2o'.Ni3is.com/Nc.dllIJi3iiManual!ar9a*eCollectioni%&(
FF
?le' &eldstein F MC(
Miami6 &-6 U+?
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Instalador Inno Setup
Xo no s< 8u< :arGa sin el 1nno +etu#. !ratuito $ e'celente6 es una de mis :erramientas 9"sicas.
:tt#://NNN.jordanr.d:s.or*/isin2o.:tm
%icent (alasG
$i%rer'a Fast$i%
V?l*uien :a #ro9ado esta colecci)n de controlesI
+e*gn dicen es 2reeNare6 $ en un #rinci#io #arece diseCada #ara %isual `asic6 #ero desde %&(6 los esto$ #ro9ando $ 2uncionan
mu$ 9ien.
V-os #uede incluir en mis a#licaciones6 o al ser 2reeNare no se #uede co9rar #or una a#licaci)n 8ue incor#ore estos controlesI
-a direcci)n donde encontrar los controles es:
:tt#://#ersonal/.iddeo.es/mroi9al/:ome.:tm
FF
Un saludo.
Aesgs +an0
jsan0Ereolution.es
Manuales
NNN.manuales*ratis.com
Este tiene Mu$ `uenos Manuales en 1n*les $ Es#aCol.
:tt#://mem9ers.es.tri#od.de/*ratis
+(EC1?- ED1,1ON U+1N! %1+U?- &OB(RO T
El li9ro 8ue te recomendaron6 8ue es mu$ 9ueno6 lo tienes en:
:tt#://docs.rinet.ru:.M.M/!l$adi-isu/inde'.:tm
-a direcci)n es del Gndice del li9ro. +i lo sincroni0as en tu nae*ador lo #uedes leer entero 2uera de lGnea en la
#antalla. -as clases est"n e'#licadas en e'tenso en los ca#Gtulos 1/ $ 1T.
Est" en in*l<s.
Mensa,es anteriores
Xo lo 8ue utili0o es ?2oro.
:tt#://NNN.a2oro.com/2oros.as#Iid*ru#L31.T2UcatidL[Usu9catidL1T
%icent (alasG
h
32 de 99
(rue9a en :tt#://NNN.deja.com/:omeP#s.s:tml
MsA!ent
:tt#://msdn.microso2t.com/Nor3s:o#/cF2rame.:tmI929MTT[1T.2TR/Nor3s:o#/imedia/a*ent/de2ault.as#UR-DL[9
MyS0l
+e #ueden usar en JindoNs $ -inu'4 $ al*un otro mas 8ui0as56 $o ten*o instalado #ara Nin9/ $ 2unciona de maraillas 4 #:# $
m$s8l 5.
el site de #:# es NNN.#:#.net
m$s8l NNN.m$s8l.com
+aludos $ 2eli0 aCo6
Emiliano.
FF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Mail to: EmilP39 ?RRO`? :otmail.com
FFFFFFFFFFFFFFFFFFFFFFF
1CY 34M131[/
3ormali1acion
httpA++o)(/i>is(com+/c(dllL.i>iPData3ormali1ation
httpA++///(oreilly(com+catalo!+accessdata;+chapter+chQO(html
httpA++///(comptechne/s(com+Preaster+d%desi!n(html
2u!o
"ortal de pro!ramaci5n
Nueo #ortal de #ro*ramaci)n de 9ases de datos en:
:tt#://#ro*9d.#irt.com
"ortal de &F"
El (ortal&o': :tt#://cli3.to/isual2o'
El nueo (ortal&o': :tt#://#ortal2o'.ne'en.net
"rote!er+Restaurar Outloo>
>a$ un #roceso 8ue te sire #ara dejar tu recien instalado Outloo3 $ Outloo3 E'#ress como esta9a en el otro disco. `usca en
:tt#://NNN.setlian.net/.
+aludos
Ra2ael &i*ueroa
Reo)
:tt#://m'.9rie2case.$a:oo.com/#orcamic:eria
FZ Mi Car#eta
FZ `in*o F -o 8ue esta9as 9uscando \
LRe2o' ..M 1nstalacion.0i#
)
Es#ero 8ue esta li*a si les 2uncione.
Es necesario 8ue se suscri9an $ o9ten*an una cuenta en NNN.m$s#ace.com
-in3 al &older com#artido:
:tt#://NNN.m$s#ace.com/&olders/2MT2[21M/
33 de 99
Datos de ?cceso:
+creen Name: HHHEl usuario de su cuenta de M$+#aceHHH
User (assNord: HHHE- (assNord de su cuenta de M$+#aceHHH
+:ared &older (assNord: com#artido
?rc:io:
Re2o' ..M 1nstalacion.0i# 1.4M9
Yue les a#roec:e \
+aludos desde (ue9la6 Me'ico.
7ein Mitnic3
Maicroso2t -%(
h
En esta otra direcci)n #ueden encontrar m"s. +olo 8ue necesitan el Jinrar #ara descom#rimir6 en otros casos se #uede utiliar el
Nin0i#.
:tt#://NNN.2ilesearc:.ru/c*iF9in/sI8Lre2o'UmL2MU2L1UlLen
co#ien $ #e*uen.
?ni*ersal Thread
U, es el Uniersal ,:read. (ro9a9lemente el 2oro mas *rande de %&( en el
mundo.
:tt#://NNN.uniersalt:read.com/
FF
?le' &eldstein F MC(
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
&F"(3et
-aa resurreccion de %&( $ las consejos #ara #ro*ramadores %&( en el entorno .Net
:tt#://NNN.les#inter.com/!etO#Ed.as#I?rtNumL21
a #artir de enero este site a a estar com#letamente en castellano e in*les6 #or a:ora es todo en in*les.
.indo/s interace
:tt#://msdn.microso2t.com/li9rar$/de#rods/sT/isualc/ccore/PcorePt:ePuserPinter2aceP*uidelinesP2orPmicroso2tPNindoNs.:tm
FF
?le' &eldstein F MC(
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Fechas y tiempo
Calcular el primer d'a del mes
(rimerDia L ,u&ec:a F da$4,u&ec:a5 S 1
Calcular el 4ltimo d'a del mes
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
&UNC,1ON PEOM4d&ec:a5
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H Retorna el gltimo dGa del mes 4EndO2Mont:5
H U+O: PEOM4D?,E455
H RE,ORN?: &ec:a
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-OC?- ld
34 de 99
ld L !OMON,>4d&ec:a615
RE,URN ld F da$4ld5
END&UNC
)
UltimoDia L *omont:4,u&ec:a F D?X4,u&ec:a5 S 16 1 5F1
Calcular la dierencia de dos echas en a7os@ meses y d'as
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H &UNC,1ON Di2P?MD4td1ni6 td&in5
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H Calcula la di2erencia entre dos 2ec:as en:
H aCos6 meses $ dGas
H Usa la 2unci)n DiasDelMes45
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
&UNC,1ON Di2P?MD4td1ni6 td&in5
-OC?- ld?u'6 ln?nio6 lnMes6 lnDia6 lcRet
HFFF &ec:a inicial siem#re menor
1& td1niZtd&in
ld?u' L td1ni
td1ni L td&in
td&in L ld?u'
END1&
ln?nio L XE?R4td&in5 F XE?R4td1ni5
ld?u' L !OMON,>4td1ni6 12 H ln?nio5
HFFF No cum#lio el aCo aun
1& ld?u' Z td&in
ln?nio L ln?nio F 1
END1&
lnMes L MON,>4td&in5 F MON,>4td1ni5
1& lnMes Q M
lnMes L lnMes S 12
END1&
lnDia L D?X4td&in5 F D?X4td1ni5
1& lnDia Q M
lnDia L lnDia S DiasDelMes4td1ni5
END1&
HFFF +i el dia es ma$or6 no cum#lio el mes
1& 4D?X4td&in5 Q D?X4td1ni55
1& lnMes L M
lnMes L 11
E-+E
lnMes L lnMes F 1
END1&
END1&
lcRet L ?--,R1M4+,R4ln?nio55S = ?kO+6 = S K
?--,R1M4+,R4lnMes55S = ME+E+ X = S K
?--,R1M4+,R4lnDia55S = D1?+.=
RE,URN lcRet
END&UNC
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H &UNC,1ON DiasDelMes4d&ec:a5
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H Retorna los dGas de un mes. Usada #or Di2P?MD
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
&UNC,1ON DiasDelMes4d&ec:a5
-OC?- ld
ld L !OMON,>4d&ec:a615
RE,URN D?X4ld F D?X4ld55
END&UNC
Calcular la edad
3/ de 99
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H &UNC,1ON Edad4tdNac6 td>o$5
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H Calcula la edad #asando como #ar"metros:
H tdNac L &ec:a de nacimiento
H td>o$ L &ec:a a la cual se calcula la edad.
H (or de2ecto toma la 2ec:a actual.
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
&UNC,1ON Edad4tdNac6 td>o$5
-OC?- ln?nio
1& EM(,X4td>o$5
td>o$ L D?,E45
END1&
ln?nio L XE?R4td>o$5 F XE?R4tdNac5
1& !OMON,>4tdNac6 12 H ln?nio5 Z td>o$
ln?nio L ln?nio F 1
END1&
RE,URN ln?nio
END&UNC
Calcular la echa de semana santa
Auan (a9lo te #aso una 2unci)n 8ue no es mGa6 calcula el Domin*o de (ascua6 #or ende6 se deduce la +emana +anta.
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H &UNC,1ON P(ascua4tn?nio5
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H U+E: P(ascua419995
H (?R?ME,RO: ?Co a calcular
H RE,ORNO: &ec:a del Domin*o de (ascua
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
&UNC,1ON P(ascua4tn?nio5
-OC?- lnCentena6 ln?u'6 lnNro?ureo6 lnDomin*o6 lnE#actaAul6 K
lnCorr+olar6 lnCorr-unar6 lnE#acta!re*6 lnDias-una(6 K
lnDias-una1/6 lnDias(ascua6 ld&ec1ni6 ld&ec(ascua
1& NO, `E,JEEN4tn?nio61MMM699995
ME++?!E`OB4=Ran*o in"lido a1MMM..9999b=5
RE,URN c//d
END1&
lnCentena L 1N,4tn?nio/1MM5
ln?u' L 4tn?nioS15]19
lnNro?ureo L ln?u'S419H1N,4419Fln?u'5/1955
lnDomin*o L [S41Ftn?nioF1N,4tn?nio/45SlnCentenaF1N,4lnCentena/455][
lnE#actaAul L 4411HlnNro?ureo5F1M5]3M
lnCorr+olar L F4lnCentenaF1T5S1N,44lnCentenaF1T5/45
lnCorr-unar L 1N,44lnCentenaF1/F1N,44lnCentenaF1[5/2/55/35
lnE#acta!re* L 43MSlnE#actaAulSlnCorr+olarSlnCorr-unar5]3M
lnDias-una( L 24FlnE#acta!re*S43MH1N,4lnE#acta!re*/2455
lnDias-una1/ L 42[FlnE#acta!re*S43MH1N,4lnE#acta!re*/24555][
lnDias(ascua L lnDias-una(S4[SlnDomin*oFlnDias-una1/5][
ld&ec1ni L E%?-U?,E4=cf=S+,R4tn?nio645S=/M3/21d=5
ld&ec(ascua L ld&ec1niSlnDias(ascua
RE,URN ld&ec(ascua
END&UNC
?/( Nelson Rodri*ue0
+alto F Uru*ua$
nriEadinet.com.u$
Cam%iar la echa y la hora del "C
HLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
&UNC,1ON Jrite-ocal,ime4ltDate,ime5
3T de 99
HLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
H Escri9e mediante ?(1 el !et-ocal,ime
H (arametro: De9e #asarse una aria9le del ti#o Date,ime
H Retorno: .,. si #udo cam9iar 2ec:a $ :ora
H .&. enio un #ar"metro no "lido o error
H ?utor: -M! F 199..M9.14
HLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
1& ,X(E4=ltDate,ime=5 R =,=
RE,URN .&.
END1&
-OC?- lcCadena
lcCadena L P1Mto2/T4XE?R4ltDate,ime5625 S K
P1Mto2/T4MON,>4ltDate,ime5625 S K
P1Mto2/T4DOJ4ltDate,ime5625 S K
P1Mto2/T4D?X4ltDate,ime5625 S K
P1Mto2/T4>OUR4ltDate,ime5625 S K
P1Mto2/T4M1NU,E4ltDate,ime5625 S K
P1Mto2/T4+EC4ltDate,ime5625 S K
P1Mto2/T4MMM625 S +(?C4245
DEC-?RE +et-ocal,ime 1N Nin32a#i K
+,R1N! lcCadena
RE,URN +et-ocal,ime4lcCadena5
END&UNC
HLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
&UNC,1ON P1Mto2/T4lnNumero6 lnCant5
HLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
H ,oma ngmero en 9ase 1M $ lo conierte en =lnCant= caracteres en 9ase 2/T
H Usada #or: Jrite-ocal,ime45
H ?utor: -M! F 199..M9.14
HLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
-OC?- lcRetorno6 ln?scii
lcRetornoLWW
DO J>1-E lnNumero ZL 2/T
ln?sciiLMOD4lnNumero62/T5
lcRetornoLlcRetorno S C>R4ln?scii5
lnNumeroL1N,4lnNumero / 2/T5
ENDDO
ln?sciiLlnNumero
lcRetornoLlcRetorno S C>R4ln?scii5
RE,URN (?DR4lcRetorno6 lnCant6 C>R4M55
END&UNC
HLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
-uis MarGa !ua$"n
,ucum"n l ?r*entina
Con*ertir una echa a ormato lar!o
m.d&ec:a L cM1/M1/2MMMd
allt4str4da$4m.d&ec:a555 S = = S cmont:4m.d2ec:a5 S = = S
allt4str4$ear4m.d2ec:a555
)
V DMX4d&ec:a5
Modiicar echa y hora
3[ de 99
>ola Aaier6
Run /N Control ,imedate.c#l
Es#ero 8ue te sira6 saludos $ :asta #ronto \\\
FF
Aose# Mm (icaCol
?U,O D1E+E- %1C6 +.?.
%icF`arcelona
eFmail: adminEautodieselic.com
Ne9: NNN.autodieselic.com
O%tener el n4mero de d'a del a7o
Resta la 2ec:a en cuesti)n menos el #rimer dGa del aCo M16M16 $ear4date5
&UNC,1ON NumDia4 #2ec:a 5
Return #2ec:aFdate4$ear4#2ec:a561615S1
"rimer dia del mes de un dia de la semana 8primer *iernes de A!osto(((:
>a$ al*unas ocasiones en las 8ue es gtil sa9er el #rimer dia del mes en el 8ue cae un dia de la semana. (or ejem#lo en los Estados
Unidos el #rimer lunes de se#tiem9re es acaciones.
-a si*uiente 2unci)n dado un mes $ un aCo deuele la 2ec:a en la 8ue cae un dia de la semana 1 L Domin*o6 2 L -unes6...
Notas: el si*uiente codi*o usa 2unciones 8ue #ueden estar solo dis#oni9les a %&( T.M.
H &UNC,1ON: &irstDa$.#r*
-(?R?ME,ER+ #nmont:6 #n$ear6 #ndoN
H (arameter list descri#tion
H #nmont: numero del mes 41F125
H #n$ear numero del aCo 4en 2ormato cuatro dG*itos5
H #ndoN dia de la semana a inesti*ar 4Domin*o L 16 -unes L 26 etc.5
-OC?- ldresult6 lddate6 lndoN
lddate L D?,E4#n$ear6 #nmont:6 15
ldresult L lddate
H &uer0a a %&( /.M/T.M a usar el Domin*o
H como #rimer dia de la semana
H %ersiones anteriores de9er"n 9orrar el #ar"metro
ln2irstda$ L DOJ4lddate6 15
1& ln2irstda$ R #ndoN
1& ln2irstda$ Q #ndoN
ldresult L lddate S 4#ndoN F ln2irstda$5
E-+E
ldresult L lddate S 4[ S #ndoN5 F ln2irstda$
END1&
END1&
RE,URN ldresult
Ejem#lo:
H +a9er el #rimer -unes de se#tiem9re del aCo actual.
ld+e#tMon L &irstDa$496 XE?R4D?,E4556 25
Transormar un n4mero de se!undos a 22AMMASS
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H &UNC,1ON P+e*2>or4n+e*undos5
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H ,rans2orma se*undos a 2ormato ::>>:MM:++
3. de 99
H U+O: P+e*2>or4n+e*undos5
H EAEM(-O: P+e*2>or43/MMM5
H RE,ORN?: Caracter W>>:MM:++W
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H&UNC,1ON P+e*2>or4n+e*undos5
l#ara n+e*undos
-OC?- ln>oras6 lnMinutos6 ln+e*undos
ln>oras L 1N,4n+e*undos/3TMM5
lnMinutos L 1N,444n+e*undosF4ln>orasH3TMM55/TM55
ln+e*undos L MOD4n+e*undos6TM5
RE,URN 1i&4ln>orasQ1MM6,R?N+&ORM4ln>oras6=E- 99=56,R?N+&ORM4ln>oras6=E- 9999=55 S=:=S K
,R?N+&ORM4lnMinutos6=E- 99=5S=:=S K
,R?N+&ORM4ln+e*undos6=E- 99=5
END&UNC
Ficheros
C5di!os correlati*os
15 Usa +E, RE(ROCE++ ,O 1 en lu*ar de ?U,OM?,1C. Esto :ara 8ue %&( trate de
9lo8uear el re*istro solo una e0.
25 En tu rutina de contadores6 utili0a la si*uiente t<cnica:
U+E Contadores
-OC?,E &OR ContadorLcContador
1& NO, &OUND45
....
END1&
DO J>1-E NO, R-OC745 UU +e 8ueda en un ciclo :asta 8ue #ueda
9lo8uear el re*istro
ENDDO
RE(- %alor J1,> %alor S n+alto
&-U+> UU &uer0a 8ue los datos se *ra9en a disco
UN-OC7 UU Retira el 9lo8ueo.
Como e06 la rutina se 8ueda en el ciclo DO J>1-E :asta 8ue el usuario 8ue
est" o9teniendo el si*uiente alor de un contador lo li9ere con el UN-OC7.
Esto te *aranti0a 8ue6 no im#orta 8ue tan r"#idas sean las llamadas a la
2unci)n6 el re*istro nunca estar" des9lo8ueado #ara dos usuarios
simult"neamente.
>,>
%ictor
Compro%ar si hay disco en la ?nidad
(ara sa9er si tienes el disco en 8ual8uier unidad6 #uedes utili0ar la si*uiente 2unci)n... 8ue es natia de 2o' $ no necesita li9rerias
ni declaraciones....
(odemos su#oner 8ue la unidad e: <s la del cdFrom...
12 Dis3+#ace4=e:=5LF1 UU F1 indica 8ue no :a$ disco en la unidad
4ale #ara dis8ueteras u otras unidades5
Nait NindoN =No :a$ disco en la unidad e:=
Return .2.
End12
FF
Aose# Mm (icaCol
?U,O D1E+E- %1C6 +.?.
%icF`arcelona
eFmail: adminEautodieselic.com
39 de 99
Ne9: NNN.autodieselic.com
h
&UNC,1ON DrieRead$
-(?R?ME,ER+ cDrie
-OC?- lReturn6 oDrie6 o&ile+$stemO9ject
o&ile+$stemO9ject L CRE?,EO`AEC,4=+cri#tin*.&ile+$stemO9ject=5
oDrie L o&ile+$stemO9ject.!etDrie4cDrie5
lReturn L oDrie.1sRead$
RE,URN lReturn
FF
Mario ?ceedo
maa#Eadinet.com.u$
MonteideoFUru*ua$
4M de 99
Escri%ir y leer un *alor de un ichero I3I
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
&UNC,1ON Jrite&ile1ni4tc&ileName6tc+ection6tcEntr$6tc%alue5
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H Escri9e un alor de un arc:io 1N1.
H +i no e'iste el arc:io6 la secci)n o la entrada6 la crea.
H Retorna .,. si tuo <'ito
H (?R?ME,RO+:
H tc&ileName L Nom9re $ ruta com#leta del arc:io.1N1
H tc+ection L +ecci)n del arc:io.1N1
H tcEntr$ L Entrada del arc:io.1N1
H tc%alue L %alor de la entrada
H U+O: Jrite&ile1ni4=C:OMi?rc:io.ini=6=De2ault=6=(ort=6=2=5
H RE,ORNO: -o*ico
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
DEC-?RE 1N,E!ER Jrite(riate(ro2ile+trin* K
1N J1N32?(1 K
+,R1N! c+ection6+,R1N! cEntr$6+,R1N! cEntr$6K
+,R1N! c&ileName
RE,URN 11&4Jrite(riate(ro2ile+trin*4tc+ection6tcEntr$6tc%alue6tc&ileName5L16 .,.6 .&.5
END&UNC
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
&UNC,1ON Read&ile1ni4tc&ileName6tc+ection6tcEntr$5
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H -ee un alor de un arc:io 1N1.
H +i no e'iste el arc:io6 la secci)n o la entrada6 retorna .NU--.
H (?R?ME,RO+:
H tc&ileName L Nom9re $ ruta com#leta del arc:io.1N1
H tc+ection L +ecci)n del arc:io.1N1
H tcEntr$ L Entrada del arc:io.1N1
H U+O: Read&ile1ni4=C:OMi?rc:io.ini=6=De2ault=6=(ort=5
H RE,ORNO: Caracter
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-OC?- lc1ni%alue6 lnResult6 ln`u22er+i0e
DEC-?RE 1N,E!ER !et(riate(ro2ile+trin* K
1N J1N32?(1 K
+,R1N! c+ection6K
+,R1N! cEntr$6K
+,R1N! cDe2ault6K
+,R1N! EcRet%al6K
1N,E!ER n+i0e6K
+,R1N! c&ileName
ln`u22er+i0e L 2//
lc1ni%alue L s#ac4ln`u22er+i0e5
lnResultL!et(riate(ro2ile+trin*4tc+ection6tcEntr$6=HNU--H=6K
Elc1ni%alue6ln`u22er+i0e6tc&ileName5
lc1ni%alueL+U`+,R4lc1ni%alue616lnResult5
1& lc1ni%alueL=HNU--H=
lc1ni%alueL.NU--.
END1&
RE,URN lc1ni%alue
END&UNC
E)istencia de 'ndice
?8ui tienes una 2uncion 9asada en otra i*ual del ,rastade:
&UNC,1ON Es,a* 4#Nom9re,a*6 #?lias5
-OC?- lEs,a*6 K
l,a*Encontrado
1& (?R?ME,ER+45 Q 2
41 de 99
#?lias L ?-1?+45
END1&
1& EM(,X4#?lias5
RE,URN .&.
END1&
lEs,a* L .&.
#Nom9re,a* L U((ER4?--,R1M4#Nom9re,a*55
l,a*Num L 1
l,a*Encontrado L ,?!4l,a*Num6 #?lias5
DO J>1-E \EM(,X4l,a*Encontrado5
1& U((ER4?--,R1M4l,a*Encontrado55 LL #Nom9re,a*
lEs,a* L .,.
EB1,
END1&
l,a*Num L l,a*Num S 1
l,a*Encontrado L ,?!4l,a*Num6 #?lias5
ENDDO
RE,URN lEs,a*
END&UNC
+aludos
Eduardo ?mat.
Ficheros Co%ol
Mira6 $o me tue el mismo #ro9lema $ estue inesti*ando un #oco. E'iste un #ro*rama llamado D?,? AUNC,1ON 8ue lee un
arc:io de un ti#o $ lo conierte a otro ti#o 4reconoce $ conierte mas de 3M 2ormatos distintos5. ,am9ien
tra9aja con arc:ios Co9ol como M+FCo9ol6 etc6 MENO+ con los arc:ios de RMFCO`O- 48ue #or su#uesto son con los 8ue
necesita9a la9urar $o5. +i tus arc:ios no estan en RMFCO`O- #odes usar esta a#licacion6 e'isten una ersion demo 8ue $o use $
la o9tue de la reista numero T1 de +olo (ro*ramadores 4una reiste de ori*en es#aCol5. +i #or des*racia son RMFCO`O- o
conse*uis a al*uien 8ue los conierta en ,B, o usas el metodo del listado el cual esta #iola siem#re $ cuando el sistema iejo
liste todos los datos necesarios. 4El #ro9lema #rinci#al 8ue e'iste con los arc:ios de co9ol es
8ue este len*uaje usa como el R(! cam#os numericos em#a8uetados6 #ara a:orrar es#acio en el disco6 entonces cuando lo 8ueres
isuali0ar es un codi*o de ?+C11 ti#o arc:io @1( en e0 de numeros6 es a:i donde necesitas al*o 8ue lo =a9ra= $ lo *ra9e en un
2ormato le*i9le #or otros #ro*ramas5.
`ueno6 es#ero esto te sira.
&eli0 Naidad.
>ernan.
>CF+1+,EM?+
?r*entina
1CY: 143[.324
2acer un cursor modiica%le
(ara :acer el cursor modi2ica9le te ale la si*uiente 2uncion:
&UNC,1ON :a0modi2ica9le
-(?R?ME,ER+ tcalias
U+E D`&4tcalias5 1N M ?!?1N alias '',em#
U+E D`&4='',em#=5 1N 4tcalias5 ?!?1N ?-1?+ 4tcalias5
U+E 1N '',em#
2acer un SEEB o I3DE-SEEB a cual0uier *ista
En las istas con modo de almacenamiento en 9u2er a ta9la 4es decir 4 o /56 no se
les #uede crear un indice6 $ #or tanto no se #uede :acer +EE7 o 1NDEB+EE7 en ellas.
(ara resoler esto se :a reeali0ado la sisuiente rutina:
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
42 de 99
H
H &uncion: 1NDEB%1+,?
H
H 1nde'a cual8uier ti#o de ista
H
H (arametros:
H
H tcista F Nom9re de la ista
H tce'#r F e'#resion com#leta #ara inde'ar
H tcta* F nom9re del indice 4ta*5
H
H Ejem#los:
H
H retLinde'ieN4=lPalelin=6=allartS+,R4mo635=6=allart=5
H
H Retorno
H
H deuele erdadero/2also si se #udo crear el indice
H
H Nota
H
H -a ista de9e estar a9ierta
H
H Ultima Modi2icacion: M//M4/2MMM (a9lo Roca
H Creacion : M//M4/2MMM (a9lo Roca
H
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
&UNC,1ON inde'ista 4tcista6 tce'#r6 tcta*5
-OC?- lcOld`u2erin*6 llret6 lcalias
1& (COUN,45L3
lcalias L ?-1?+45
+E-EC, 4tcista5
lcOld`u2erin*LCUR+OR!E,(RO(4=`u22erin*=5
llretLCUR+OR+E,(RO(4=`u22erin*=635
1& llret
1NDEB ON Utce'#r ,?! 4tcta*5
+E, ORDER ,O
llretLCUR+OR+E,(RO(4=`u22erin*=6lcOld`u2erin*5
END1&
1& \EM(,X4lcalias5
+E-EC, 4lcalias5
E-+E
+E-EC, M
END1&
E-+E
llret L .&.
END1&
RE,URN llret
END&UNC
Ejem#lo de uso:
retLinde'ista4=lPalelin=6=allartS+,R4mo635=6=allart=5
Con esto #odremos reali0ar cual8uier +EE7 4mejor +EE745 5 o 1NDEB+EE7 so9re la ista
Sa%er si se ha modiicado un re!istro
!E,&-D+,?,E45
Necesita manejar `u22ers.
O%tener los icheros de un directorio
?#arte de adir45
43 de 99
lc L +X+42MMM6 =H.D`&=5
DO J>1-E NO, EM(,X4lc5
U+E 4lc5 EBC-U+1%E
RE1NDEB
lc L +X+42MMM6 =H.D`&=6 15
ENDDO
-uis MarGa !ua$"n
,ucum"n F ?r*entina
Sa%er si e)iste un directorio
?*re*a ?UB en tu cadena de 9us8ueda de directorio.
'DirL=C:OC-1EN,E+ /?u'=
12 \&ile4'Dir5
Nait Nind =No e'iste=
Else
Jait Jind =Xa e'iste=
Endi2
Sa%er si un alias pertenece a una *ista
(ara sa9er si es ista o ta9la #uedes utili0ar la 2unci)n
CUR+OR!E,(RO(4=+ource,$#e=6 c?lias56 los alores retornados son:
1 F Es#eci2ica 8ue el ori*en de datos es una ista +Y- local.
2 F Es#eci2ica 8ue el ori*en de datos es una ista +Y- remota.
3 F Es#eci2ica 8ue el ori*en de datos es una ta9la.
Tratar icheros (I3I
Con estas 2unciones #uedes leer $ escri9ir arc:io.ini
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
&UNC,1ON Jrite&ile1ni4tc&ileName6tc+ection6tcEntr$6tc%alue5
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H Escri9e un alor de un arc:io 1N1.
H +i no e'iste el arc:io6 la secci)n o la entrada6 la crea.
H Retorna .,. si tuo <'ito
H (?R?ME,RO+:
H tc&ileName L Nom9re $ ruta com#leta del arc:io.1N1
H tc+ection L +ecci)n del arc:io.1N1
H tcEntr$ L Entrada del arc:io.1N1
H tc%alue L %alor de la entrada
H U+O: Jrite&ile1ni4=C:OMi?rc:io.ini=6=De2ault=6=(ort=6=2=5
H RE,ORNO: -o*ico
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
DEC-?RE 1N,E!ER Jrite(riate(ro2ile+trin* K
1N J1N32?(1 K
+,R1N! c+ection6+,R1N! cEntr$6+,R1N! cEntr$6K
+,R1N! c&ileName
RE,URN
11&4Jrite(riate(ro2ile+trin*4tc+ection6tcEntr$6tc%alue6tc&ileName5L16 .,.6
.&.5
END&UNC
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
&UNC,1ON Read&ile1ni4tc&ileName6tc+ection6tcEntr$5
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H -ee un alor de un arc:io 1N1.
H +i no e'iste el arc:io6 la secci)n o la entrada6 retorna .NU--.
H (?R?ME,RO+:
H tc&ileName L Nom9re $ ruta com#leta del arc:io.1N1
44 de 99
H tc+ection L +ecci)n del arc:io.1N1
H tcEntr$ L Entrada del arc:io.1N1
H U+O: Read&ile1ni4=C:OMi?rc:io.ini=6=De2ault=6=(ort=5
H RE,ORNO: Caracter
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-OC?- lc1ni%alue6 lnResult6 ln`u22er+i0e
DEC-?RE 1N,E!ER !et(riate(ro2ile+trin* K
1N J1N32?(1 K
+,R1N! c+ection6K
+,R1N! cEntr$6K
+,R1N! cDe2ault6K
+,R1N! EcRet%al6K
1N,E!ER n+i0e6K
+,R1N! c&ileName
ln`u22er+i0e L 2//
lc1ni%alue L s#ac4ln`u22er+i0e5
lnResultL!et(riate(ro2ile+trin*4tc+ection6tcEntr$6=HNU--H=6K
Elc1ni%alue6ln`u22er+i0e6tc&ileName5
lc1ni%alueL+U`+,R4lc1ni%alue616lnResult5
1& lc1ni%alueL=HNU--H=
lc1ni%alueL.NU--.
END1&
RE,URN lc1ni%alue
END&UNC
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-uis MarGa !ua$"n
,ucum"n F ?r*entina
4/ de 99

Formularios
Copiar el DataEn*ironment a otro ormulario
&o'(ress l Enero 2MM1
:tt#://NNN.2#ress.com/
-os Dataenironment tiene un #ro9lema $ es 8ue e'isten en los .sc' #ero no en los .c' De tal 2orma 8ue cuando se crea un
2ormulario mediante createo9jected45 este 2ormulario no tiene DE. >a$ diersas 2ormas de crear uno6 $a sea mediante el inter2a0
usando el diseCador de 2ormularios6 una clase +ession6 o sencillamente a9riendo las ta9las mediante el sistema tradicional.
Una e0 tue un #ro9lema $ es 8ue 8uerGa crear una serie de 2ormularios con DE e'actamente i*uales. +i los *uarda9a como clase
#erdia el DE $ al instanciarlos no lo tenGa $a. -a soluci)n la encontr< en el si*uiente c)di*o.
do orm 8cOldForm: name oOldForm nosho/
oDEJcOldForm(DataEn*ironment
o3e/FormJcreateo%,ect8c3e/FormClass:
o3e/Form(Sa*eAs8Nne/orm(sc)N@ oDE:
NeN2orm.sc' tendr" un DE 4entorno de datos5 id<ntico al de cOld&orm.

&o'(ress l Enero de 2MM1
n 2MM1 FoxPress. ?ll ri*:ts resered
De*ol*er ms de un *alor desde un ormulario
DO &ORM &orma ,O Deuele16 deuele2
+aludos.
Aesgs ?cees.
jaceesE2a9ricasselectas.com.m'
Formulario o*alado
En realidad es mu$ 2"cil6 siem#re $ cuando sea oalada $ no tridimensional.
En el eento load #oner:
local lJ>6 lnJidt:6 ln>ei*:t6 ln>R6 :Ratio6 Ratio
DEC-?RE 1N,E!ER CreateElli#ticR*n 1N *di32 1N,E!ER6 1N,E!ER6 1N,E!ER6 1N,E!ER
DEC-?RE 1N,E!ER +etJindoNR*n 1N user32 1N,E!ER6 1N,E!ER 6 1N,E!ER
+E, -1`R?RX ,O 4 >OME415SW2o'tools.2llW 5
lJ> L PJ:,o>Jnd4PJ&ind,itl4t:is.ca#tion55
:RatioL1.M UU Cam9i" estos alores #ara darle la 2orma a la eli#se
RatioL1.M
lnJidt: L t:is.Nidt: / :Ratio
ln>ei*:t L t:is.:ei*:t / Ratio
ln>R L CreateElli#ticR*n4M6 M6 lnJidt:6 ln>ei*:t5 UU Deuele un :andle a la re*ion
+etJindoNR*n4lJ>6 ln>R6 15
H ,ener cuidado 8ue no as a #oder cerrar la entana con la W'W de arri9a.
Formulario redondo
+E, -1`R?RX ,O +X+42MM45S=2o'tools.2ll= ?DD1,1%E
2cn%entana?ctia L re*2n4=!et?ctieJindoN=6==6=1=5 UU &unci)n #ara encontrar el >andle de la entana actia
HEn este caso es la entana #rinci#al de %&(
H(ueden utili0ar =&indJindoN= #ara o9tener el :andle de la entana 8ue uds 8uieran
2cnR*nEli#tica L re*2n4=CreateElli#ticR*n=6=1111=6=1=5 UU 2unci)n #ara crear la re*ion elG#tica
2cnColocaRe*ion L re*2n4=+etJindoNR*n=6=111=6=1=5 UU &unci)n #ara colocar la re*i)n en la entana con el :andle o9tenido
4T de 99
:Jnd?ctia L Call2n42cn%entan?ctia5 UUO9tenemos el :andle de la entana actia
1& :Jnd?ctia QZ M ,>EN UU +i se encontr) el :andle
mR!N L call2n4&cnR*nEli#tica6M6M6,>1+&ORM.J1D,>6,>1+&ORM.>E1!>,5 UU!eneramos la re*i)n
H(ueden modi2icar los #ar"metros #ara colocar la re*i)n donde uds 8uieran $ :acerla m"s o menos anc:a
1& mR!N QZ M ,>EN UU +i se cre) la re*i)n
m+alida L call2n42cnColocaRe*ion6:Jnd?ctia6mR!N615 UUColocamos la re*i)n en la entana de la
H 8ue o9tuimos en :andle
1& m+alida QZ M t:en
J?1, J1ND =&UNC1hN EB1,O+?=
END1&
END1&
END1&
&unction !et>Nnd&orm
-(arameter to&orm
-ocal lcCa#tion
lcCa#tion L to&orm.Ca#tion
to&orm.Ca#tion L +$s435
12 not =&OB,OO-+= ; U##er4 +et4=-i9rar$=5 5
+et -i9rar$ to 4>ome45S=O&o',ools.&ll=5 ?dditie
Endi2
-ocal ln>JND
ln>JND L PJ:,o>Nnd4 PJ&ind,itl4to&orm.Ca#tion5 5
to&orm.Ca#tion L m.lcCa#tion
Return m.ln>JND
Formulario transparente
Por Sergio E. Aguirre
Mucas /eces 5ueremos dar un aspecto 6raro6 a determinados !ormularios de una aplicaci7n espec8!ica y, casi
siempre, terminamos diciendo: 6por lo /isto, esto no se puede acer6 y nos resignamos a de9ar tal cual como estaba
antes el aspecto de dico !ormulario0 :oy /eremos la !orma de acer !ormularios transparentes, usted dir,: 6;Para 5u<
necesito un !ormulario transparente=6 , la respuesta a esa pregunta es: 6*o s<, pero puede necesitarlo para una
situaci7n en particular60
Ejemplo de un formulario transparente
Para poder e9ecutar el e9emplo debemos crear un !ormulario y agregar dos nue/os m<todos: GetHwndForm y
SetTransparent0 El c7digo, 5ue debemos agregar a los m<todos del !ormulario, es el siguiente:
Mtodo Init
Set Library To Home() + "Foxtools.fll" ADDITIVE
** Declaramos las f!cio!es "el A#I "e $i!"o$s %e &amos a tili'ar.
Declare I!te(er )ombi!e*(! i! "("i+," i!te(er -Dest*(!. i!te(er -*(!/. i!te(er -*(!,. i!te(er
!0o"e
Declare I!te(er )reate*ect*(! i! "("i+," i!te(er 1/. i!te(er 2/. i!te(er 1,. i!te(er 2,
Declare I!te(er Set3i!"o$*(! i! "ser+," i!te(er -$!". i!te(er -*(!. i!te(er !*e"ra$
** Llamamos al m4to"o %e -ace tra!s5are!te el formlario.
T-is.SetTra!s5are!t()
Mtodo GetHwndForm
** Este m4to"o "e&el&e el $i!"o$s -a!"le o i"e!tifica"or
** (H$!") "el formlario.
Local lc6l")a5tio!. l!H37D
3it- T-isform
lc6l")a5tio! 8 .)a5tio!
.)a5tio! 8 Sys(+)
l!H37D 8 93-ToH$!"(93Fi!"Titl(.)a5tio!))
.)a5tio! 8 lc6l")a5tio!
E!"3it-
*etr! l!H37D
Mtodo SetTransparent
4[ de 99
L6)AL l!)o!trol:ottom. ;
l!)o!trol*i(-t. ;
l!)o!trolLeft. ;
l!)o!trolTo5. ;
l!:or"er3i"t-. ;
l!TitleHei(-t. ;
l!FormHei(-t. ;
l!Form3i"t-. ;
l!I!!er*(!. ;
l!6ter*(!. ;
l!)ombi!e"*(!. ;
l!)o!trol*(!. ;
l!)o!trol. ;
l!*(!Diff. ;
l!*(!6r. ;
llTre
** Asi(!amos &alores a las &ariables %e tili'aremos co! las f!cio!es "el A#I "e $i!"o$s.
l!*(!Diff 8 <
l!*(!6r 8 ,
llTre 8 =/
3it- T-isform
** Fi>amos el tama?o "el bor"e y la barra "e t@tlo "el formlario
l!:or"er3i"t- 8 +
l!TitleHei(-t 8 ,+
** 6bte!emos la altra y el a!c-o "el formlario
l!Form3i"t- 8 (.3i"t- + /) + (l!:or"er3i"t- * ,)
l!FormHei(-t 8 .Hei(-t + l!TitleHei(-t + l!:or"er3i"t-
** )reamos la re(iA! i!ter!a y exter!a "el formlario
l!6ter*(! 8 )reate*ect*(!(B. B. l!Form3i"t-. l!FormHei(-t)
l!I!!er*(! 8 )reate*ect*(!(l!:or"er3i"t-. l!TitleHei(-t. ;
l!Form3i"t- = l!:or"er3i"t-. l!FormHei(-t = l!:or"er3i"t-)
** Extraemos la re(iA! i!ter!a "e la re(iA! exter!a
l!)ombi!e"*(! 8 )reate*ect*(!(B. B. B. B)
)ombi!e*(!(l!)ombi!e"*(!. l!6ter*(!. l!I!!er*(!. l!*(!Diff)
** )reamos las re(io!es "e los co!troles "el formlario y combi!amos a 4stas co! la
re(iA! a!terior.
For Eac- )o!trol i! .)o!trols
l!)o!trolLeft 8 )o!trol.Left + l!:or"er3i"t-
l!)o!trolTo5 8 )o!trol.To5 + l!TitleHei(-t
l!)o!trol*i(-t 8 )o!trol.3i"t- + l!)o!trolLeft
l!)o!trol:ottom 8 )o!trol.Hei(-t + l!)o!trolTo5
l!)o!trol*(! 8 )reate*ect*(!(l!)o!trolLeft. l!)o!trolTo5.
l!)o!trol*i(-t. l!)o!trol:ottom)
)ombi!e*(!(l!)ombi!e"*(!. l!)ombi!e"*(!. l!)o!trol*(!. l!*(!6r)
E!"For
** Establecemos la re(iA! "e la &e!ta!a
Set3i!"o$*(!(.CetH$!"Form(). l!)ombi!e"*(!. llTre)
E!"3it-
Mtodo Resize
** Llamamos al m4to"o %e -ace tra!s5are!te al formlario ca"a &e' %e 4ste cambia "e tama?o.
THIS.SetTra!s5are!t()
Espero 5ue el truco les pueda ser de utilidad, asta la pr7.ima000
Sergio E0 Aguirre reali>a traba9os para "n#o. Creati/idad ? Tecnolog8a, se puede entrar en contacto con <l en
paycon-impsat@0com0ar
2andle de un orm
***************************************************************************
***************************************************************************
*
* F!ciA! D Ha!"lerVe!ta!a
* #ro5osito D 6btie!e le ma!e>a"or "e la &e!ta!a 5ri!ci5al "e VF#
* #arametros D Titlo "e la &e!ta!a "e VF#
* 7ota D La &e!ta!a "ebe te!er el mismo )a5tio! o Texto "el Titlo
* %e la ca"e!a %e se 5asa e! el 5arametro
* *e(resa D 7mero e!tero co! el ma!e>a"or "e la &e!ta!a
* E>em5lo D Ha!"lerVe!ta!a(")alcla"ora")
*
***************************************************************************
***************************************************************************
4. de 99
FE7)TI67 Ha!"lerVe!ta!a(c9)a5tio!)
L6)AL !9H3D

DE)LA*E I7TECE* Fi!"3i!"o$ I7 3I7+,A#I ;
ST*I7C c7ELL. ;
ST*I7C c3i!7ame

!9H3D 8 Fi!"3i!"o$(B. c9)a5tio!)

IF !9H3D F B

*ETE*7 !9H3D

E7DIF

E7DFE7)

***************************************************************************
Imprimir un ormulario
,e enGo una 2unci)n 8ue me encontr< en internet de Mauricio ?tanac:e6 $ 8ue a mG me 2unciona correctamente. >as de tener
car*ado &o'tools.&--.
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
H\H LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
H\H C:ild and (arent &orm (rint &unction FF 9$ Mauricio ?tanac:e
H\H LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
H Use t:is #rocedure as (rint&orm4 ,:is2orm 5 or (rint&orm4 P+creen 5
HHHHHHHHHHHHHHHHHHH
H ?ut:or : Mauricio ?tanac:e !.
H Date : Decem9er 1M/9[
H (arameters : oO9jeto is an o9ject &ORM6 2or e'am#le ,>1+&ORM6
H ?C,1%E&ORM6 P+CREEN
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
(rocedure (rint&orm
HHHHHHHHHHHHHHHHHH
l(arameters oO9jeto
-OC?- c?lias6 lUsado
(U`-1C c,itulo&orm(rint
H +ae current alias
1& U+ED4?-1?+455
c?liasL?-1?+45
lUsadoL.,.
E-+E
lUsadoL.&.
END1&
H (ut ima*e in cli#9oard
12 \,oma&oto4 oO9jeto 5
Return
Endi2
H+E, +,E( ON
H Create a cursor 2or store t:e ima*e6 uses a *eneral 2ield
CRE?,E CUR+OR &otoP(antalla 4+CREEN !5
+E-EC, &otoP(antalla
?((END `-?N7
H Co#$ t:e ima*e 2rom t:e cli#9oard to t:e *eneral 2ield
DE&1NE J1NDOJ %entana &ROM 161 ,O 464
MOD1&X !ENER?- &otoP(antalla.+CREEN NOJ?1, J1NDOJ %entana
7EX`O?RD =cC,R-S%dcC,R-SJd= C-E?R
HJ?1, J1ND =HHHHHHHHHHHHHHHHHHHHHHHHHHH= ,1MEOU, 2
RE-E?+E J1ND %entana
DOE%EN,+
H De9emos crear un in2orme llamado #rt2orm con un OleControl $ +CREEN como
49 de 99
H 2uente
1& \EM(,X4&otoP(antalla.+CREEN5
+E-EC, &otoP(antalla
m.c,itulo&orm(rint L oO9jeto.Ca#tion
1& ,X(E4Wo?##W5 LL WOW
1& o?##.lDesarrollo
o?##.(rint(reieN4W#rt2ormW5
E-+E
RE(OR, &ORM #rt2orm.2r' NOCON+O-E ,O (R1N,ER (ROM(,
END1&
E-+E
RE(OR, &ORM #rt2orm.2r' (RE%1EJ NOCON+O-E
END1&
E-+E
J?1, J1NDOJ =No se #uede im#rimir el 2ormulario actio.=
END1&
H Cerramos el cursor
U+E 1N &otoP(antalla
H Restauramos el alias actio al entrar
1& lUsado
+E-EC,4c?lias5
END1&
Return
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
H ?ut:or : Mauricio ?tanac:e !.
H Date : Decem9er 1M/9[
H ,:is 2unction #uts t:e ima*e o2 t:e 2orm in t:e cli#9oard6 $ou can use
H it to send 2orm ima*es to ot:er a#lications as Jord etc.
H ?lso $ou can modi2$ t:is 2unction to #rint or co#$ an$ o9ject on
H screen.
H (arameters : o&orm is an o9ject &ORM6 2or e'am#le ,>1+&ORM6?C,1%E&ORM6
P+CREEN
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
&unction ,oma&oto
HHHHHHHHHHHHHHHHHH
l(arameters o&orm
-ocal n>Nnd6 tn>Nnd6 :DC6 :DCPMem6 :`itMa#6 :(re`m#
H Must use t:e &o'tools li9rar$6 someN:ere.
Declare inte*er &indJindoN in Jin32?#i +trin* cClassName6 +trin* cJindName
Declare inte*er !etDC in Jin32?#i inte*er n:Nnd
Declare inte*er CreateCom#ati9leDC in Jin32?#i inte*er n:cd
Declare 1nte*er `it`lt in Jin32?#i 1nte*er :DestDC6 1nte*er '6 1nte*er $6
1nte*er nJidt:6 1nte*er n>ei*:t6 1nte*er :+crDC6 1nte*er 'src6 1nte*er $src6
1nte*er dNRo#
Declare 1nte*er +electO9ject in Jin32?#i 1nte*er :DC6 1nte*er :O9ject
Declare 1nte*er CreateCom#ati9le`itma# in Jin32?#i 1nte*er :DC6 1nte*er
nJidt:6 1nte*er n>ei*:t
Declare 1nte*er +etCli#9oardData in Jin32?#i 1nte*er n&ormat6 1nte*er
:O9ject
Declare 1nte*er DeleteDC in Jin32?#i 1nte*er :DC
Declare 1nte*er ReleaseDC in Jin32?#i 1nte*er nNnd6 1nte*er :dc
Declare 1nte*er DeleteO9ject in Jin32?#i 1nte*er :DC
lnN:andle L PJ&ind,itl4o&orm.Ca#tion5
n>Nnd L PJ:,o>Jnd4lnN:andle5
:DC L !etDC4 n>Nnd 5
:DCPMem L CreateCom#ati9leDC4 :DC 5
:`itMa# L CreateCom#ati9le`itMa#4 :DC6 o&orm.Jidt:6 o&orm.>ei*:t 5
12 :`itMa#RM
:(re`m# L +electO9ject4 :DCPMem6 :`itMa# 5
`it`lt4 :DCPMem6 M6 M6 o&orm.Jidt:6 o&orm.>ei*:t6 :DC6 M6 M6 133T93[T 5
12 O#enCli#4 n>Nnd 5
Em#t$Cli#45
+etCli#9oardData4 26 :`itMa# 5
CloseCli#45
/M de 99
Else
Messa*e`o'4 WError o#enin* t:e cli#9oardW6 4.6 WMessa*eW 5
Endi2
Else
Messa*e`o'4 WError creatin* 9itma#W6 4.6 WMenssa*eW 5
Endi2
DeleteDC4 :DCPMem 5
ReleaseDC4 n>Nnd6 :DC 5
Return .t.
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
H\H eFmail : dsmauricioE>otmail.com
H\H ?ddress : Crr 19 No. [/ F 2M o2 4M16 `o*ot" F Colom9ia
H\H ,ele#:one : 34TM[4T F 34TMT[3
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
+aludos.
LLLLLLLLLLLLLLLLLLLLLLLLL
&rancisco A. +imarro -)#e0
2.simarroEdi#ual9a.es
De#artamento de 1n2orm"tica
Di#utaci)n de ?l9acete
:tt#://NNN.di#ual9a.es
LLLLLLLLLLLLLLLLLLLLLLLL
Matri1 a un ormulario como parmetro
-uis MarGa !ua$"n escri9i) en mensaje ...
-a gnica 2orma de #asar una matri0 como #ar"metro6 es #asarla #or re2erencia.
(ara ello antes de llamar al 2ormulario:
lc?nt L +E,4=UD&(?RM+=5
+E, UD&(?RM+ ,O RE&ERENCE
DO &ORM Mi&orm J1,> MiMatri0
+E, UD&(?RM+ ,O 4lc?nt5
+i as a tra9ajar en un 2ormulario6 #uedes crear una #ro#iedad del ti#o arra$6 aCadiendo una nuea #ro#iedad6 $ cuando te
#re*unta el nom9re le #ones: aMatri0415
FF
-uis MarGa !ua$"n
,ucum"n F ?r*entina
)
DO &ORM Mi&orm J1,> EMiMatri0
Mo*er una *entana sin t'tulo
Hola 0a!el. eso yo lo -a(o as@D
A(re(o tres 5ro5ie"a"es al formlario
MDownD Fla( 5ara saber si estG 5resio!a"o el mose
XD *efere!cia "e la coor"e!a"a "1" "o!"e se 5resio!A el botA!
YD *efere!cia "e la coor"e!a"a "2" "o!"e se 5resio!A el boto!
En el Evento: MouseDown
3it- T-isForm
.0Do$! 8 .T.
.1 8 !1)oor"
.2 8 !2)oor"
E!"3it-
En el Evento: MouseUp
T-isForm.0Do$! 8 .F.
En el Evento: MouseMove
3it- T-isForm
If .0Do$! T-e!
/1 de 99
.Left 8 .Left + !1)oor" = .1
.To5 8 .To5 + !2)oor" = .2
E!"If
E!"3it-
DIH
O%,etos de un ormulario
No entiendo mu$ 9ien lo 8ue 8uieres :acer ?*ustGn6 #ero a8uG an dos ti#s:
15 +i 8uieres usar el +X+412[25 #ara o9tener una re2erencia a un o9jeto cual8uiera6 de9es cam9iar el nom9re del 2ormulario en la
cadena deuelta #or la #ala9ra ,>1+&ORM:
cRutaO9jL+,R,R?N4cRutaO9j6t:is2orm.Name6=,>1+&ORM=5
lue*o:
oO9jLeal4cRutaO9j5
25 +i lo 8ue 8uieres es #asear #or todos los o9jetos e'istentes en un 2ormulario6 sin im#ortar si los mismos est"n contenidos en
containers o #a*e2rames6 #uedes usar la rutina ?O`AE,C+45 8ue ane'o 4la inclu$o #ara todos #or 8ue es mu$ #e8ueCa5. Un
ejem#lo de su uso:
local arra$ aO9jsa1b
local oO9j6nCount
nCountLaO9jects4EaO9js6t:is2orm5
i2 nCount Z M
2or eac: oO9j in aO9js
....
end2or
endi2
#or de2ecto6 la 2unci)n toma en cuenta todos los o9jetos dentro del contenedor indicado 4t:is2orm en el ejem#lo5 $ los o9jetos
contenidos a su e0 en ellos. +i solo 8uieres la lista de o9jetos en el contenedor6 sin
incluir los 8ue est"n contenidos a su e06 solo aCades .&.:
nCountLaO9jects4EaO9js6t:is2orm6.&.5
Es#ero 8ue te sira
%ictor
ThisForm como parmetro
Cuando llames al 2ormulario de 9us8ueda de9es :acerlo:
DO &ORM `us8uedas J>1, ,>1+&ORM
$ en el 1nit del 2ormulario `us8uedas:
-(?R?ME,ER+ t&orm(adre
,:is&orm.Codi*o L t&orm(adre.Codi*o
Con esto #asas como #ar"metro una re2erencia a todo el 2ormulario Clientes.
+i tu necesidad es solo tomar la (ro#iedad Codi*o del 2ormulario Clientes6 de9es llamar al 2ormulario `us8ueda:
DO &ORM `us8uedas J>1, ,:is&orm.Codi*o
$ en el 1nit del 2ormulario `us8uedas:
-(?R?ME,ER+ tCodi*o
,:is&orm.Codi*o L tCodi*o
/2 de 99
FF
-uis MarGa !ua$"n
,ucum"n F ?r*entina
Gricos
Di%u,ar cuadro@ l'neas@ etc(
En %&( T lo #uedes :acer con el o9jeto P+CREEN $ &ORM
(ara di9ujar un cuadro:
P+CREEN.`o'4/M6/M62/M63/M5
(ara di9ujar una linea:
P+CREEN.-ine4/M61/M62/M63/M5
(ara di9ujar un circulo:
P+CREEN.Circle41MM6 2MM6 2MM6 15
(ara con2i*urar el estilo $ el anc:o del tra0o:
P+CREEN.DraNJit: L n UU n L a1..32MMMb
P+CREEN.DraNMode L m UU m L a1..1Tb
P+CREEN.DraN+t$le L l UU l L aM..Tb
(ara con2i*urar el color del tra0o $ 2ondo:
P+CREEN.&oreColor L R!`4r6*695 UU r6*69 L aM..2//b
P+CREEN.`ac3Color L R!`4r6*695 UU r6*69 L aM..2//b
(ara con2i*urar el relleno $ color de las 2i*uras:
P+CREEN.&ill+t$le L n UU n L aM..[b
P+CREEN.&illColor L R!`4r6*695 UU r6*69 L aM..2//b
-uis MarGa !ua$"n
,ucum"n F ?r*entina
Dimensi5n de una ima!en
Simplemente crea el ob9eto "mage, asigna en la propiedad picture del mismo el nombre arci/o 9pg y le< luego las
propiedades 1idt y eigt de la imagen:
_screen.addobject('MyPicture', 'Image')
_screen.MyPicture.picture'Your!i"e.jpg'
# _screen.MyPicture.widt$, _%creen.MyPicture.$eig$t
Saludos
:ugo
MsGraph( Tipos de !rico
?nillos F412M
?nillos seccionados .M
jrea 3D F4M9.
jrea 3D a#ilada [.
jrea 3D 1MM] a#ilada [9
`arras 3D a*ru#adas TM
`arras 3D a#iladas T1
`arras 3D 1MM] a#iladas T2
Circular 3D F41M2
Circular 3D seccionado [M
Circular /
Circular seccionado T9
Circular con su9*r"2ico circular T.
Circular con su9*r"2ico de 9arras [1
Columnas 3D F41MM
/3 de 99
Columnas 3D a*ru#adas /4
Columnas 3D a#iladas //
Columnas 3D 1MM] a#iladas /T
-Gneas 3D F41M1
jrea 1
jrea a#ilada [T
jrea 1MM] a#ilada [[
`arras a*ru#adas /[
`arras a#iladas /.
`arras 1MM] a#iladas /9
`ur9ujas 1/
`ur9ujas con e2ectos 3D .[
Columnas a*ru#adas /1
Columnas a#iladas /2
Columnas 1MM] a#iladas /3
`arra c)nica a*ru#ada 1M2
`arra c)nica a#ilada 1M3
`arra c)nica 1MM] a#ilada 1M4
Columna 3D c)nica 1M/
Columna c)nica a*ru#ada 99
Columna c)nica a#ilada 1MM
Columna c)nica 1MM] a#ilada 1M1
`arra cilGndrica a*ru#ada 9/
`arra cilGndrica a#ilada 9T
`arra cilGndrica 1MM] a#ilada 9[
Columna 3D cilGndrica 9.
Columna cilGndrica a*ru#ada 92
Columna cilGndrica a#ilada 93
Columna cilGndrica 1MM] a#ilada 94
-Gneas 4
-Gneas con marcadores T/
-Gneas a#ilada con marcadores TT
-Gnea 1MM] a#ilada con marcadores T[
-Gneas a#iladas T3
-Gneas 1MM] a#iladas T4
`arra #iramidal a*ru#ada 1M9
`arra #iramidal a#ilada 11M
`arra #iramidal 1MM] a#ilada 111
Columna #iramidal 3D 112
Columna #iramidal a*ru#ada 1MT
Columna #iramidal a#ilada 1M[
Columna #iramidal 1MM] a#ilada 1M.
+u#er2icie 3D .3
+u#er2icie 4ista su#erior5 ./
+u#er2icie 4estructura met"lica ista su#erior5 .T
+u#er2icie 3D 4estructura met"lica5 .4
Dis#ersi)n F41T9
Dis#ersi)n con lGneas [4
Dis#ersi)n con lGneas $ sin marcadores de datos [/
Dis#ersi)n con lGneas o#timi0adas [2
Dis#ersi)n con lGneas o#timi0adas $ sin marcadores de datos [3
Radial F41/1
Radial relleno .2
Radial con marcadores de datos .1
FF
+aludos6
FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Carlos Xo:n @u9iria
?.!.(.
(OC- similar a "aint
MetaDraN en :tt#://NNN.9ennetFtec.com
1ma*eB#ress #ro en :tt#://NNN.#e*asustools.com/
/4 de 99
#ero no se si 2uncionen con %isual &o'(ro6 es cuestion de #ro9ar..\
Impresora
Cam%iar la Impresora por deecto
Por Ed Rahu
Puede e.istir algunos casos en los 5ue nos interese 5ue nuestro programa estable>ca la impresora por de!ecto en /e>
de AsometerseA a la 5ue 1indo1s le tiene marcada0 Para esto puedes utili>ar BetPrinter pero la /erdad es 5ue no acaba
de !uncionar como a uno le gustar8a0
En realidad la cla/e est, en usar la !unci7n APR"*TERS'), y la cla/e del Registry para el usuario acutal0
La cla/e del Registry
:KEYCCDRRE*TCC3*#"BESystemECurrentControlSetEControlEPrintEPrinters
Contiene la lista de las impresoras de!inidas en el sistema para el usuario 5ue a eco el login0 Cada impresora se
de!ine en una subcla/e y <sta es la lista 5ue nos de/uel/e APR"*TERS') en la primera columna del array de dos
dimensiones0
En la cla/e de impresoras del Registry e.iste una cla/e llamada &e!ault 5ue contiene el /alor de la impresora por
de!ecto0 Si en /e> de <sa escribes el nombre de la impresora 5ue 5uieres usar como impresora por de!ecto, tanto 4#P
como el resto de las aplicaciones Findo1s utili>ar,n esa impresora como la impresora por de!ecto
EMail: edrau-eartlinG0net
C5mo coni!urar Reports cuya lon!itud del impreso sea coni!ura%le por el usuario en .in C)+3T para impresoras
matriciales
Jos Manuel Soria
C7mo con!igurar Reports cuya longitud del impreso sea con!igurable por el usuario en Fin (.H*T para impresoras
matriciales
El Driver
I Tener instalado en la impresora el dri/er adecuado0
El Report
I En El Report, en el campo del primer registro se debe de poner:
Ta(D &ac@o
Ta(,D Vac@o
Ex5rD I6*IE7TATI678BJ + )H*(/+)+)HA*(/B)+#A#E*SIKE8J+
ALLT*I0(ST*(#*TI7F6(,)))+)H*(/+)+)H*(/B)+JDEFAELTS6E*)E8LJ
Consideraciones:
I El Report debe ser e.terno0 Se podr8a reempla>ar PRT"*#3'J), por una /ariable pKblica para e/itar 5ue !uera e.terno
I Antes de reali>ar la impresi7n seleccionar la impresora y modi!icar el registro E.pr en modo RunTime0 I La !unci7n
PRT"*#3'J) de/uel/e el papel seleccionado en la impresora0 I La impresora debe ser capa> de soportar papel
personali>ado0
Configuracin del Driver de Impresora
I Con!igurar el dri/er de impresora en papel como personali>ado 'en "mpresora /er PropiedadesHPapel)0 I Asignar
anco y largo adecuado
Observaciones:
Se podr8a con!igurar dos tipos de dri/ers iguales para una misma impresora una para los listados normales y otra para
los de papel personali>ado de sta !orma se puede traba9ar con dos tipos de papel en la misma impresora0
Controlar un poco la impresora
Puede ser 5ue en alguna ocasi7n te interese tener un control un poco m,s determinado de la impresora pudiendo
saber si tiene papel o no, si tiene tonner, si est, blo5ueada, etc000
Esto propiamente no se puede acer con 4#P pero s8 con el AP" de Findo1s0 Mira esto:
DE)LA*E SH6*T 65e!#ri!ter I7 ;
3i!s5ool."r&;
ST*I7C M5#ri!ter7ame.;
I7TECE* M5-#ri!ter.;
ST*I7C M5Defalt
DE)LA*E SH6*T )lose#ri!ter I7 3i!s5ool."r&;
I7TECE* -#ri!ter
// de 99
DE)LA*E SH6*T Cet#ri!ter I7 3i!s5ool."r& AS Cet#ri!terI!fo;
I7TECE* -#ri!ter. I7TECE* Le&el.;
ST*I7C M5#ri!ter. I7TECE* cb:f.;
I7TECE* M5cb7ee"e"
lc5ri!ter 8 NL#T/DN
l!-a!"le 8 B
llreslt 8 (65e!#ri!ter(Mlc5ri!ter.;
Ml!-a!"le. B) O B)
IF llreslt
l!si'e 8 B
8 Cet#ri!terI!fo(l!-a!"le. ,.;
B. B. Ml!si'e)
lcstrct 8 *E#LI)ATE()H*(B). l!si'e)
llreslt 8 (Cet#ri!terI!fo(l!-a!"le.;
,. Mlcstrct. l!si'e. Ml!si'e) O B)
IF llreslt
lcstats 8 SE:ST*(lcstrct. P+. <)
l!stats 8 B
F6* l!i 8 / T6 <
l!stats 8 l!stats + AS)(SE:ST*(;
lcstats. l!i. /)) * ;
(,QR S (l!i = /))
7E1T
T l!stats
E7DIF
8 )lose#ri!ter(l!-a!"le)
E7DIF
* Im5rime los cA"i(os "e&eltos 5or 3i!UQVUL
O"efi!e #*I7TE*9STATES9#AESED BxBBBBBBB/
O"efi!e #*I7TE*9STATES9E**6* BxBBBBBBB,
O"efi!e #*I7TE*9STATES9#E7DI7C9DELETI67 BxBBBBBBB<
O"efi!e #*I7TE*9STATES9#A#E*9HA0 BxBBBBBBBL
O"efi!e #*I7TE*9STATES9#A#E*96ET BxBBBBBB/B
O"efi!e #*I7TE*9STATES90A7EAL9FEED BxBBBBBB,B
O"efi!e #*I7TE*9STATES9#A#E*9#*6:LE0 BxBBBBBB<B
O"efi!e #*I7TE*9STATES96FFLI7E BxBBBBBBLB
O"efi!e #*I7TE*9STATES9I69A)TIVE BxBBBBB/BB
O"efi!e #*I7TE*9STATES9:ES2 BxBBBBB,BB
O"efi!e #*I7TE*9STATES9#*I7TI7C BxBBBBB<BB
O"efi!e #*I7TE*9STATES96ET#ET9:I79FELL BxBBBBBLBB
O"efi!e #*I7TE*9STATES976T9AVAILA:LE BxBBBB/BBB
O"efi!e #*I7TE*9STATES93AITI7C BxBBBB,BBB
O"efi!e #*I7TE*9STATES9#*6)ESSI7C BxBBBB<BBB
O"efi!e #*I7TE*9STATES9I7ITIALIKI7C BxBBBBLBBB
O"efi!e #*I7TE*9STATES93A*0I7C9E# BxBBB/BBBB
O"efi!e #*I7TE*9STATES9T67E*9L63 BxBBB,BBBB
O"efi!e #*I7TE*9STATES9769T67E* BxBBB<BBBB
O"efi!e #*I7TE*9STATES9#ACE9#E7T BxBBBLBBBB
O"efi!e #*I7TE*9STATES9ESE*9I7TE*VE7TI67 BxBB/BBBBB
O"efi!e #*I7TE*9STATES96ET96F90E06*2 BxBB,BBBBB
O"efi!e #*I7TE*9STATES9D66*96#E7 BxBB<BBBBB
O"efi!e #*I7TE*9STATES9SE*VE*9E7W7637 BxBBLBBBBB
O"efi!e #*I7TE*9STATES9#63E*9SAVE BxB/BBBBBB
Cuel!ues
Des#ues de muc:as :oras de inesti*aci)n6 #ro9ando con N9/6 N9.6 con s#36 sin s#36 con otros driers etc. >emos descu9ierto
8ue al menos con im#resorad st$lus color TMM6 laserjet T#/Tm $ otras muc:as el cuel*ue de la im#resora se soluciona cam9iando
en la 9ios el modo de l#t1 4E((S+((5 u otro modo6 lo mejor #ro9ar con todos.
(ara cuel*ue de st$lus TMM6 se soluciona con el drier 8ue iene con N9.6 #uesto 8ue con los driers 8ue est"n en las #a*inas de
e#son6 da i*ual la ersi)n del drier 4la gltima es de 199.5 se cuel*a6 adem"s cam9iar el modo de l#t1 a 4E((S+((5 #or ejem#lo.
Nada mas $ si es#ero 8ue a al*uien le sira.
/T de 99
Un saludo a todos.
Imprimir en cual0uier impresora
?9re el 2ic:ero 2r' del re#ort como si 2uera una ta9la $ en el #rimer re*istro deja en 9lanco los cam#os ta*6 ta*2 $ e'#r. Cuidado
#or8ue esto se cuel*a $ da errores en N,.
?n*ela.
Impresora por Deecto
(or la Redacci)n de &o'(ress
:tt#://NNN.2#ress.com/
Otro tema recurrente es la 2orma de cam9iar la im#resora #or de2ecto 8ue usa la a#licaci)n.
De 2orma interactia se #uede usar mediante +X+41M3[5 $ +E, (R1N,ER ,O
N?ME !E,(R1N,ER45
(ero 8ui0"s la 2orma mejor de :acerla #or c)di*o sea usando el JindoNs +ri#tin* >ost con un c)di*o #arecido a:
o.sh3et J CREATEOBR8S.script(3et/or>S:
o.sh3et(SetDeault"rinter83om%re de la impresora o del de*ice:
Este c)di*o 2unciona con la ersi)n 2.M del J+> #ero no con la ersi)n 1.M
&o'(ress l Enero de 2MMM
n 1999 FoxPress. ?ll ri*:ts resered
Imprimir ormularios
#rintscreen4PN:to:Nnd4PNonto#4556 =%entana ?ctia=5
2unction #rintscreen
-(?R?ME,ER+ tn>Jnd6 tcAo9Name
-OC?- lcAo9Name UU (rint jo9 name
-OC?- lnRet%al UU Return alue 2rom ?(1 2unctions
DEC-?RE 1N,E!ER (rintJindoN 1N Di9?#i32 K
1N,E!ER >Jnd6 K
1N,E!ER 2(rint?rea6 K
1N,E!ER 2(rintO#t6 K
1N,E!ER N'+cale6 K
1N,E!ER N$+cale6 K
+,R1N! E s0Ao9Name
H\H (rint entire NindoN or just client area
RDE&1NE (JPJ1NDOJ 1
RDE&1NE (JPC-1EN, 2
H\H >oN to si0e t:e #rinted ima*e
H\H (JP`E+,&1, resi0es to 2ill #a#er N:ile retainin* #ro#ortions
H\H (JP+,RE,C>,O(?!E resi0es to com#letel$ 2ill #a#er6 distorts #ro#ortions
H\H (RP+C?-E scale #rint si0e
RDE&1NE (JP`E+,&1, 1
RDE&1NE (JP+,RE,C>,O(?!E 2
RDE&1NE (JP+C?-E 3
lcAo9Name L tcAo9Name S C>R4M5
lnRet%al L (rintJindoN4 tn>Jnd6 (JPJ1NDOJ6 (JP+,RE,C>,O(?!E6 M6 M6
ElcAo9Name5
1& lnRet%al \L M
1& lnRet%al \L T UU T L User canceled #rintin*
L ME++?!E`OB4=No se #uede im#rimir la entana= S c:r4135 S c:r41M5 S K
=-a llamada a W(rintJindoNW de ?(1 :a deuelto: = S +,R4lnRet%al56 K
M S 4.6 K
=?.!.(.=5
END1&
END1&
/[ de 99
FF
+aludos6
FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Carlos Xo:n @u9iria

"apel de tama7o personali1ado
(ara el tamaCo #ersonali0ado del #a#el.
?9re tu re#orte como una ta9la6 asG:
Use mire#orte.2r'
inmediatamente ejecutas
`lan3 &ileds E'#r6 ,a*6 ,a*2
la instrucci)n anterior elimna los datos de los cam#os memo es#eci2icados del #rimer re*istro6 estos cam#os continen in2ormaci)n
del tamaCo de :oja.
Use (ara cerrar la ,a9la.
De esta 2orma6 a la :ora de im#rimir el re#orte tomar" el tamaCo de :oja es#eci2icado en la im#resora.
+aludos\
Del !ail"n\
"uertos
El +et #rinter actua a tra<s del +O 4JindoNs56 #ara saltarse NindoNs directamente al #uerto utili0a ... ,O -(,1 o -(,26 es decir
re#ort 2orm ... to l#t1 o l#t2.
&rancisco M.
Redireccionar impresion
(ara solucionar esto #uedes :acer lo si*uiente.
1. a una aria9le cual8uiera *uardas la im#resora 8ue tienes #or de2ecto ej. ide2aultLset4=(R1N,ER=625
2. 9uscas con a#rinters el nom9re de la otra im#resora #ara tener el nom9re de esta. ej. La#rinters4'5
en esta matri0 tienes todas las im#resoras instaladas en tu #c. entonces
3. a otra aria9le asi*nas el nom9re de la otra im#resora asi item#oralL'41615 o item#oralL'42615 ...
en #ocas #ala9ras de9es conocer el nom9re de la otra im#resora.
4. a:ora #re#aras el enio.
set #rinter on
set deice to #rint
set #rinter to name 4item#oral5
E #roN456M sa$ =(rimera linea=
E #roN45S16M sa$ =+e*unda linea=
.
.
/. :aces el cam9io de la im#resora #ara im#rimir el otro re#orte.
set #rinter to name 4ide2ault5
E #roN456M sa$ ==
....
Es#ero te sira.
Ro*er
Inormes
; tama7os para un report
Ricardo6
+i el in2orme no est" incluido en el #ro$ecto 4#ues entonces serGa de solo lectura5 #uedes antes de emitirlo cam9iar los alores del
cam#o We'#rW del #rimer re*istro del arc:io 2r'6 8ue como sa9es es una ta9la 2o'.
(or ejem#lo #ara #oner tamaCo #ersonali0ado a TMM ' /MM decimas de milimetro tendrGas 8ue incluir las si*uientes lGneas
4sustitu$endo las e'istentes5:
(?(ER+1@EL2/T
/. de 99
(?(ER-EN!,>LTMM
(?(ERJ1D,>L/MM
Es#ero 8ue te sira.
FF
+aludos6
FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Carlos Xo:n @u9iria
?.!.(.
< inormes en uno
(rimero su9es el ENC?`E@?DO DE (?!1N? al ,o#e del Re#orte.
-ue*o `ajas el DE,?--E al 2inal del re#orte. en el es#acio intermedio creas tu re#orte.
Xo lo :ice #ara emitir C:e8ues. ,en*o una #rimera #arte con el detalle del c:e8ue6 lue*o en la mitad est" el c:e8ue $ al 2inal otra
co#ia del detalle.
Esto lo :ice con ?RRE!-O+ 4arra$s5 en e0 de cam#os de la `ase de Datos.
Anclar la %arra del pre*ie/
Por la Redaccin de FoxPress
Copyrights 1998 by FoxPress, All rights reserved
FoxPress, ct!bre 1998
Yu< te #arece....
*e5ort Form ... #re&ie$ 7o$ait
if $exist("#ri!t #re&ie$")
mo&e $i!"o$ N#ri!t #re&ie$N to /B./B
mose "blclicX at //.//
e!"if
Centrar *erticalmente un report
(ara centrar las 2ilas a*ru#adas calcula las 2ilas en 9lanco 4nNum-ineas1nsertar 5 8ue de9erGas insertar al #rinci#io de la ca9ecera.
+olo necesitas sa9er el ngmero total de lGneas 8ue ca9en en el re#ort.
De2ines una aria9le en el re#ort llamada cRetornos
cRetornos la #uedes calcular en el Eento Qal entrarZ de la ca9ecera del re#ort corres#ondiente a la #arte a*ru#ada.
(ara ello utili0as una 2unci)n6 #or ejem#lo Calcula-ineas1nsertar4EcRetornos5
-a 2unci)n ser" de la si*uiente 2orma:
&unction Calcula-ineas1nsertar4tcRetornos5
.... calcular nNum-ineas1nsertar
tcRetornos L RE(-1C?,E4 C>R41356 nNum-ineas1nsertar 5
return
(intas cRetornos en una caja de te'to 8ue ocu#e todo el anc:o del re#ort6 $ la colocas inmediatamente encima de donde 8uieras
8ue se des#lace el contenido del re#ort.
?ctias la o#ci)n Qajustar al contenido del te'toZ.
,odos los controles del *ru#o los #ones 2lotantes.
De esta 2orma el *ru#o de lGneas su9ir" o 9ajar" de altura de acuerdo al alor de cRetornos.
(ru<9alo .....
Un saludo
(aco +atu<
C5mo a%rir un Report con un Doom determinado
Por la Redaccin de FoxPress
En los pre/ie1 de los Report se pueden acer Loom pero puede ser 5ue al cliente le interese 5ue se abran con un tipo
de Loom determinado0 Mue yo sepa no ay una !orma !,cil de acer esto0 Lo 5ue se me ocurri7 es lo siguiente:

re5ort form myre5ort 5re&ie$ !o$ait
/9 de 99
mo&e $i!"o$ "#ri!t #re&ie$" to ,B.<B
mose clicX at ,,.PB
Xeyboar" NYD7A**63ZN [[ PQ\
Xeyboar" NYD7A**63ZN [[ QB\
Xeyboar" NYE7TE*ZN
;Si conoces una !orma me9or=
C5mo e)portar los Report a 2TM$
"ladi#ir $hevchen%o
Copyrights 1998 by FoxPress, All rights reserved
FoxPress, &ayo 1998
Muc:os #ro*ramas de tratamiento de te'to o *eneradores de in2ormes tienen la #osi9ilidad de e'#ortar sus resultados a
documentos con 2ormato >,M-. +in sa9er >,M-6 #uedes tener lo mismo usando al*gn #e8ueCo truco como el 8ue te comento a
cotinuaci)n.
-o gnico 8ue tienes 8ue :acer es crear un 2ic:ero ?+C11 usando las 2unciones de 9ajo niel de %isual &o'(ro. ?l*o como lo
si*uiente #uede serir.
L6)AL l!)a!al.lc6t5t
l!)a!al8F)*EATE(Ntest.-tmlN)
lc6t5t8N
&sto es un test
N
F#ETS(l!)a!al.lc6t5t)
F)L6SE(l!)a!al)
$onrie por 'avor....
C5mo incluir la Barra de 2erramientas del dise7ador de Reports en tiempo de e,ecuci5n
Basado en Q138969
En los e9ecutables 5ue uno reali>a le puede interesar dotar a sus usuarios de la posibilidad de modi!icarse los in!ormes
para incorporar nue/os campos o eliminar algunos de los 5ue as puesto0 Esta posibilidad la puedes incluir poniendo el
M3&" REP3RT con el report correspondiente0
*o obstante, la barra de erramientas del diseNador de Reports no siempre se muestra y es relati/amente !,cil 5ue el
usuario la pierda0 A continuaci7n se e.plica como de9ar disponible para el susuario esa Oarra de :erramientas
:ay dos m<todos: el primero pasa por el arci/o de recursos #o.Dser0 El segundo utili>a el menK y el menK del
sistema0
Mtodo UNO
La in!ormaci7n de la Oarra de :erramientas se guarda en el arci/o de recursos #o.user0 Si un report se modi!ica o se
crea de nue/o en el entorno de desarrollo teniendo las barras de erramientas abiertas cuando el in!orme 5ueda
guardado tal estado 5uedar, de mani!iesto cuando se e9ecute el report0
*3TA: El submenK de Oarra de :erramientas no est, disponible asta 5ue se abre un report0 Cuando usas este
m<todo para asegurar 5ue las barras de erramientas est,n disponibles desde dentro de la aplicaci7n , debes tener en
cuenta estas condiciones:
&eber8as aber modi!icado o crado un report en el entorno de desarrollo con una barra de erramientas abierta0 A
continuaci7n deber8as guardar el report con lo 5ue se guardar, el entorno y por tanto la barra de erramientas0 El
arci/o de recursos #o.user se deber8a distribuir con la aplicaci7n0 El arci/o de recursos se deber8a introducir dentro
de tu aplicaci7n o deber8a ser marcado como ReadnI3nly0 Si no se actKa as8, cuando se modi!i5ue el report y se cierre
la barra de erramientas y el report guardado, el estado de la barra de erramientas tambi<n 5uedar, guardada0 Si no
est, cuando se modi!ica el report y se cierra la barra de erramientas el estado de la barra de erramientas tambi<n
5ueda guardado0 Como resultado al 5uedar la barra de erramientas cerrada no ay !orma de reabrirla desde dentro de
tu aplicaci7n0 Marcando el arci/o de recursos como de solo lectura, si el usuario cierra las barras de erramientas, el
arci/o de recursos no ser, actuali>ado con el nue/o estado de PcerradoQ0
Mtodo Dos
Dna segunda !orma y 5ui>,s m,s !,cil para obtener el mismo resultado pasa por el uso del menK de sistema de 4isual
#o.Pro0 El siguiente e9emplo muestra como acer esto:
@0 En la /entana de 7rdenes escribe: CREATE ME*D TESTME*D
J0 En el prompt, escribe la palabra 64er6 El resultado deber8a ser de establecer un Submenu0
R0 ClicG el bot7n de 3pciones0
TM de 99
S0 &ebido a 5ue la opci7n 4er te lle/a a un submenK, necesitas acer clicG en el bot7n de Create locali>ado a la
dereca del Submenu0 Para el prompt, el te.to standard es 6Toolbars6
%0 Establece el resultado a Oar T0 El prompt a la dereca deber, ser Cm/iCtoolb0
U0 En la opci7n del menK 4er, clicG las opciones del MenK, y llama al menK Cm/ie10
Cuando compiles el menK deber8as tener la !uncionalidad de la Oarra de :erramientas en tu aplicaci7n0
!""" FoxPress. #ll rig$ts reserved%
C5mo 0uitar el %ot5n de imprimir de los "re*ie/ de los Report en los e,ecuta%les
e la !e"
@) SET resource 3## J) DSE mainCesourceC!ileCname R) C3PY structure to 64ie13nly0&O#6 S) SET resource to
64ie13nly0&O#6 %) SET resource 3* U) Select 64ie16, 6Toolbars60 V) Escoge 6Print Pre/ie16, and clicG Customi>eW X)
ClicGIandIdrag el bot7n con el icono de la impresora 3## del Pre/ie1 Toolbar () ClicG 6Close6 en la Customi>e Toolbar
1indo1 @Y) Si normalmente 5uieres 5ue el Pre/ei1 Toolbar este anclado 'docGed), a>lo aora @@) SET resource 3##
@J) SET resource T3 mainCresourceC!ileCname @R) SET resource 3* @S) DSE 64ie13nly0&O#6 e.clusi/e @%)
OR3FSE @U) Locali>a el registro donde "&$6TT33LOAR6 y Memo contiene 6Print Pre/ie16 @V) Cange Read3nly to
True @X) E.it te Oro1seI1indo1 ? close te 64ie13nly0&O#6 table0 @() "*CLD&E te 64ie13nly0&O#6 and
64ie13nly0#PT6 !iles in your pro9ect0 JY) Cuando 5uieras acer un pre/ie1 de un report S"* el icono de imprimir, usa
las siguientes 7rdenes: J@) m03ldResource3n3!! $ SET'6RES3DRCE6) JJ) m03ldResource*ame$SET'6RES3DRCE6,
@) JR) SET resource 3## JS) SET resource T3 64ie13nly0&O#6 J%) RELEASE 1indo1 6Print Pre/ie16 JU) REP3RT
#3RM myCreport PRE4"EF JV) SET resource 3## JX) SET resource to ?3ldResource*ame J() SET resource
?3ldResource3n3!! RY) RELEASE 1indo1 6Print Pre/ie16
La 7rden para borrar la /entana del 6Print Pre/ie16 se incluye para asegurarse de 5ue #o.Pro usara< la con!iguraci7n
del ToolOar en el nue/o arci/o de recursosZ en caso de 5ue el pre/ie1 de un report aya sido reali>ado ba9o un
arci/o de recursos di!erente 'o con ninguno), donde el icono de la impresora s8 5ue estaba disponible0 En ese caso sin
la 7rden RELEASE, #o.Pro usar8a la con!iguraci7n del original toolOar, en lugar de los /alores establecidos en el
arci/o de recursos 64ie13nly60 Esto no es algo !,cil de imaginar pues ni la !orma de adaptar esas barras de
erramientas ni los arci/os de recursos son e.plicados con detalle en la documentaci7n de 4#P0
!""" FoxPress. #ll rig$ts reserved%
Contador de ho,as
+e corre el re#orte dos eces. -a #rimera e0 la salida del re#orte a a una entana no isi9le.
H +e de2ine la entana
De2ine JindoN ' &rom 161 ,o 2M62M
H +e actia la entana de manera inisi9le
?ctiate JindoN ' No+:oN
H +e #re#ara una aria9le #g9lica #ara reci9ir el ngmero de :ojas
o?##.n(a*inas L M
H +e ejecura el re#orte6 cu$o nom9re est" en la aria9le cRe#orte
Re#ort &orm 4cRe#orte5
H +e *uarda el ngmero de :ojas del re#orte
o?##.n(a*inas L P(?!ENO
H +e elimina la entana de #aso
Release JindoN '
H +e actia la entana actual6 en este caso =in2ormes=
?ctiate JindoN 1n2ormes
H +e ejecuta el re#orte a la im#resora6 como 8uieras
H Dentro de tu re#orte usas la aria9le o?##.n(a*inas #ara la e'#resi)n 8ue
deseas.
H (or ejem#lo =?--,R1M4+,R4 P#a*eno55 de o?##.n(a*inas=
Crystal Report( Cam%iar datos
Creo 8ue lo 8ue 8uieres es conectar tu re#orte a otra 9ase de datos6 4si no es asi discul#a5.
#ara reali0ar esto de9es entonces reali0ar lo si*uiente:
Cr$stalRe#ort1.Data&iles4M5 L c(at:D`
donde c(at:D` es una ari9le donde colocas la direccion de la 9ase de datos.
Cristal Report( En*iar parmetros
T1 de 99
>ola claro 8ue se #ueden eniar #arametros6 #uedes eniar al*un alor a una 2ormula 8ue este insertada en el re#orte #or
ejem#lo
En tu re#orte #uedes insertar un 2omula 2ield 4o cam#o 2ormula56 tu #or de2ault o #or 8ue te dieron *anas le asi*naste el alor de:
=Miercoles=6 $ cuando as a mandar llamar el re#orte $a no 8uieres 8ue di*a Miercoles sino
-unes entonces lo 8ue de9es :acer es dentro del codi*o de isual esta9lecer
re#orte.2ormulas4M5L=&ORMU-?LW= S D?,O S = W =
a8ui ca9e seCalar 8ue las 2ormulas dentro de un re#orte se manejan o se :acen re2erencias como elementos de un arre*lo6 #ero no
8uiere decir 8ue la 2ormula =&ORMU-?=6 sea el elemento M del arre*lo si no 8ue le indicas al
cr$stal cuantas 2ormulas estas usando me entiendesII lo de menos es el indice 8ue le des.
Crystal Report( Inormes
+elect H 2rom m$,a9le N:ere +omet:in* into cursor m$Cursor
PCRRe#ort4=m$Cursor=6=c:Om$CRPR(,P&ilesO=6 =m$,est.R(,=6 =m$,a9le=5
return
&unction PCRRe#ort
-#arameters tcCursorName6 tc(at:6 tcR(,Name6 tc,a9leName
lc?lias L alias45
+elect 4tcCursorName5
lc,em# L s$s42M1/5
Co#$ to 4tc(at:Slc,em#5 t$#e 2o'2'
oCr$stalLCreateO9ject4=Cr$stal.CR(E.?##lication=5
RDe2ine J+PM?B1M1@E 299499/2
Declare inte*er !et&ore*roundJindoN in J1N32?(1
Declare s:ort 1sJindoN in J1N32?(1 inte*er
oR#t L oCr$stal.O#enRe#ort4tcR(,Name5
Jit: oR#t
Jit: .Data9ase.,a9les4tc,a9leName5
.-ocation L tc(at:Slc,em#S=.d92=
EndNit:
Jit: .(rintJindoNO#tions
.CanDrillDoNn L .t.
.>asCancel`utton L .t.
.>asClose`utton L .t.
.>asE'#ort`utton L .t.
.>as!rou#,ree L .t.
.>asNai*ationControls L .t.
.>as(rint`utton L .t.
.>as(rint+etu#`utton L.t.
.>as(ro*ressControls L.t.
.>asRe2res:`utton L.2.
.>as+earc:`utton L.t.
.>as@oomControl L.t.
EndNit:
.#reieN 4=Re#ort (reieN =S=9$ %&(=66666J+PM?B1M1@E6M5
EndNit:
ln>Nnd?ctieB L !et&ore*roundJindoN45 UU +ae NindoN :andle
Do N:ile 1sJindoN4ln>Nnd?ctieB5 R M UU Jait N:ile ?ctieB ?lie
Enddo
Clear dlls
Erase 4tc(at:Slc,em#S=.H=5
12 \em#t$4lc?lias5and used4lc?lias5
+elect 4lc?lias5
Endi2
Eliminar el %ot5n cancelar al imprimir
T2 de 99
(ara 8uitar el icono de im#resora:
En modo diseCo:
1.F Modi2ica cual8uier in2orme
2.F ?se*grate de 8ue es al*una 9arra de :erramientas 4#or ejem#lo la de controles de in2ormes5
3.F (inc:a con el 9ot)n derec:o en cual8uier 9arra de :erramientas.
4.F De la lista 8ue a#arece selecciona W%ista #reliminar 4?#arece la 9arra ista #reliminar5
/.F (inc:a con el 9ot)n derec:o en la 9arra de :erramientas W%ista #reliminarW
T.F Eli*e la o#ci)n W#ersonali0arW 4?#arece la entana W(ersonali0ar 9arra de :erramientas...W5
[.F (inc:a el 9ot)n Wim#rimirW 4icono im#resora5 de la 9arra de :erramientas $ arr"stralo 2uera de ella 4desa#arecer" de la 9arra5
..F +al del diseCo de in2orme 4no es necesario *uardar cam9ios5
9.F Distri9u$e tu arc:io de recursos 42o'user.d92 $ 2o'user.2#t5 junto con las a#licaciones.
(ara eitar 8ue lo uelan a #oner:
1.F ?9re la ta9la de recursos 4use 2o'user a*ain s:ared5
2.F `usca un re*istro cu$o WnameW es W%ista #reliminarW 4locate 2or name L =ista #reliminar=5
3.F Cam9ia el alor del cam#o Wreadonl$W de ese re*istro a .t.
FF
+aludos6
FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Carlos Xo:n @u9iria
?.!.(.
En*iar un inorme por e=mail
Mira6 $o :e isto en otras noticias anteriores $ :e encontrado una #"*ina 8ue contiene un so2tNare 8ue te #ermite eniar tus
re#ortes #or mail. -a #"*ina es NNN.:otsend.com en ella lo #uedes 9ajar. es a9solutamente *ratis $ 2acil de usar. ,e crea una
1m#resora6 la cual tu seleccionas al tirar el re#orte $ lue*o te car*a un #ro*rama 8ue te indica si 8uieres eniar el re#orte o
*uardarlo en disco. E+ MUX `UENO.
Fuente predeterminada
`ueno6 $o solo cono0co una manera $ se :ace des#ues de crear el in2orme6 no es nada intuitia #ero 2unciona... me e'#lico:
1. U+E miin2orme.2r' 4creo 8ue te lo #odias ima*inar :5
2. RE(-?CE 2ont2ace Nit: =,a:oma=6 2ontsi0e J1,> 126 2ontst$le J1,> 1 &OR o9jt$#e L 1
Con esto #onemos como #redeterminado la 2uente ,a:oma a 12 #untos $ ne*rilla6 si en 2ontst$le #onemos M tendremos letra
normal.
Con esto se #odria :acer una rutina 8ue inesti*ara en el directorio $ lo :iciera #ara todos los in2ormes6 o sea recursia.
+aludos6
(a9lo Roca
-a CoruCa F Es#aCa
:tt#://#a*ina.de/isual2o' 4(ortal !ratuito de %isual&o'(ro en es#aCol5
Impresoras matriciales
Mira el arc:ios DO+(R1N,.@1( en la secci)n ?rc:ios de mi #"*ina. Es una clase 8ue te 2acilita la ida a la :ora de *enerar
re#ortes #ara im#resoras matriciales.
%ictor Es#ina
:tt#://NNN.mitrom#o.com/es#ina
Imprimir con ormato de E)cel
Rde2ine 'l-astCell 11
Rde2ine 'lMa'imi0ed F413[
Rde2ine 'lRan*e?uto2ormatClassic2 2
Rde2ine 'l(ortrait 1
use M$,a9le UU or +E-EC, H 1N,O M$Cursor
T3 de 99
c&ileName L =M$B-+&ile= UU o lo 8ue sea6 inclu$endo ruta
Hco#$ to 4c&ileName5 2ields 4c&ields5 ,X(E 'ls
co#$ to 4c&ileName5 ,X(E 'ls
H a9rir e'cel $ 2ormatear datos
oE'cel L CreateO9ject4=E'cel.?##lication=5
i2 art$#e4oE'cel5 \L =O=
H mostar mensaje de error a8ui
return .&.
endi2
H :acer a E'cel isi9le durante desarrollo
HoE'cel.isi9le L .,.
H a9rir el Nor39oo3
oE'cel.+:eets1nNeNJor3`oo3 L 1
oJor39oo3 L oE'cel.Jor39oo3s.O#en4c&ileName5
H enom9rar la #"*ina 4s::et5 a lo 8ue 8uiera
o?ctie+:eet L oE'cel.?ctie+:eet
o?ctie+:eet.Name L =M$Data=
oE'cel?## L oE'cel.?##lication
oE'cel?##.JindoN+tate L 'lMa'imi0ed
H 9uscar direcci)n de la gltima celda
lc-astCell L oE'cel.?ctieCell.+#ecialCells4'l-astCell5.?ddress45
H ajustar anc:o de columnas
lnMar3er1 L at4=;=6lc-astCell615 UU i.e. 1 N:en lc-astCell L =;?&;1M/=
lnMar3er2 L at4=;=6lc-astCell625 UU i.e. 4 N:en lc-astCell L =;?&;1M/=
ln+tart(os L lnMar3er1 S 1
ln+tr-en L lnMar3er2 F ln+tart(os
oE'cel.Columns4=?:= S su9str K
4lc-astCell6ln+tart(os6ln+tr-en55.EntireColumn.?uto&it
H usar auto2ormat 4a8ui usamos 2 como ejem#lo5
oE'cel.Ran*e4=?= S alltrim4str4n,O(`-?N7ROJ+S155 S =:= S lc-astCell5.+elect
oE'cel.+election.?uto&ormat4'lRan*e?uto2ormatClassic26.t.6.t.6.t.6.t.6.t.6.t
.5
H marcar area a im#rimir
o?ctie+:eet.(a*e+etu#.(rint?rea L =;?;1:= S lc-astCell
H de2inir #ie de #"*ina
Jit: lo?ctie+:eet.(a*e+etu#
H.-e2t>eader L ==
H.Center>eader L ==
H.Ri*:t>eader L ==
.-e2t&ooter L =U`M$ &ooter *oes :ereU`=
.Center&ooter L =UD=
.Ri*:t&ooter L =(a*e U(=
H.(rint>eadin*s L .&.
.(rint!ridlines L .&.
.Center>ori0ontall$ L .,.
.Center%erticall$ L .&.
.Orientation L 'l(ortrait
endNit:
H *uardar E'cel en 2ormato nueo 4CO(X ,O B-+ usa 2ormato iejo5
oJor39oo3.+ae45
H mostrar E'cel al usuario
oE'cel.isi9le L .,.
T4 de 99
Es#ero te sea de a$uda
FF
?le' &eldstein F MC(
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Imprimir te)to DOS desde &F"
set #rinter to l#t1
set deice to #rint
co#$ 2ile Nom?rc:io.#rn to l#t1
set #rinter to
set deice to screen

Inorme con n4mero total de p!inas 82o,a ) de y:
(ara im#rimir un in2orme con un (ie de #"*ina 8ue ten*a el 2ormato =("*ina R de R=6 donde se indica el no de #"*ina actual $ el
total de #"*inas del in2orme6 se de9e usar una 2unci)n de2inida #or el usuario6 tal como se e'#lica a continuaci)n.
(ara o9tener el ngmero total de #"*inas6 es necesario ejecutar el in2orme dos eces. (ara lan0ar el in2orme se #uede utili0ar el
si*uiente c)di*o :
HHHHHHHHHH(R1NC1(1O DE (RO!R?M?HHHHHHHHHHHHHHHHH
C-E?R
C-O+E D?,?`?+E+
U+E ta9la.d92 UU ta9la.d92 es la ta9la utili0ada #or el 1n2orme
#*cnt L M UU ?lmacenar" el ngmero de #"*inas total
c:ec3 L.,. UU (ara ejecutar la 2unci)n #*cnt solo una e0
OldPCon L +E,4WCON+O-EW5
+E, CON+O-E O&&
RE(OR, &ORM 1n2orme NOCON+O-E UU W1n2ormeW se lan0a una 1m e0
RE(OR, &ORM 1n2orme ,O (R1N,ER UU W1n2ormeW se im#rime
+E, CON+O-EUOldPCon
(ROCEDURE #*cnt
c:ec3 L.&.
#*cnt L P(?!ENO UU O9tiene el ngmero total de #"*inas
RE,URN WW
HHHHHHHHHHHH&1N DE (RO!R?M?HHHHHHHHHHHHHHHHHHHHHHH
-a aria9le Wc:ec3W se utili0a #ara im#edir 8ue la 2unci)n (!CN,45 se ejecute m"s de una e0.
+e de9e modi2icar el in2orme #ara introducir en la `anda de Resumen un cam#o con la si*uiente e'#resi)n:
11&4c:ec3L.,.6(!CN,456WW5
En el (ie de #"*ina del in2orme6 se de9e introducir:
("*ina P(?!ENO de (!CN,
donde W("*inaW $ WdeW se #ueden introducir mediante un o9jeto Eti8ueta $ P(?!ENO $ (!CN, serian las e'#resiones de dos
o9jetos cam#o.
-a 2unci)n 11&45 com#rue9a si la aria9le Wc:ec3W es.,. la #rimera e0 8ue se ejecuta el in2ormeK si Wc:ec3W es.,.6 ejecutar" la
2unci)n (!CN,45. Esta 2unci)n sim#lemente almacena la aria9le P(?!ENO en otra aria9le llamada W#*cntW. En el 1n2orme
2inal6 W#*cntW tendr" el alor correcto.
Inorme en .ord
+i te re2ieres a la clase 2r'2Nord a8ui tienes un ejem#lo
U+E D:OCOM(?R,1RO%?-C?RPM/FM9F2MMM
lc,itulo L =(RUE`?=
o&r'2Jord L CRE?,EO`AEC,4W&r'2JordW5
o&r'2Jord.+ae&olderL=C:O,em#O=
o&r'2Jord.DOCP&ileNameL=Jord#rue9a.doc=
n+uccessLo&r'2Jord.Re#ort&orm4=ClanPEmail=5
1& n+ucces L M
L messa*e9o'4WsiiiiiiiiiiiW6 4. 5
T/ de 99
else
L messa*e9o'4Wno 2unciona.....W6 4. 5
endi2
+aludos6 Emiliano.
FF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Mail to: EmilP39 ?RRO`? :otmail.com
FFFFFFFFFFFFFFFFFFFFFFF
1CY 34M131[/
Inorme en 2TM$
HH ?9ri el ta9le 4esta o caul8uira5
U+E d:O2#/MOsam#lesOdataOem#lo$ee.d92
HHHHHHHHHHHHHHHHHHHHHH
HH el si*uiente codi*o te :ace un re#ort de todos los 2ields
HH te recomiendo 8ue en e0 de esto a*as el re#orte como
HH lo 8ueres $ lo unico 8ue tenes 8ue :acer es ca9iar el nom9re 8ue
HH le das a tu re#orte #or la #ala9ra =EB?M(-E= $ delete CRE?,E RE(OR, line
CRE?,E RE(OR, EB?M(-E &ROM em#lo$ee
DO 4P!EN>,M-5 J1,> =EB?M(-E=6=EB?M(-E.&RB=
HHHHHHHHHHHHHHHHHHHHHH
+e9asti"n Men<nde0.
Inormes en miniatura
+u#on*o 8ue te im#rime en miniatura cuando utili0as la cl"usula (ROM(, en el RE(OR, &ORM ...
Xo eit< el #ro9lema lan0ando un +X+41M3[5 4creo 8ue es ese5 antes del RE(OR, &ORM... en lu*ar de aCadir (ROM(,.
Mi8uel pn*el !uerrero
Interrumpir impresi5n
O #oner el UD& en el N:ile del re#ort 2orm.
Re#ort 2orm re#orte N:ile si*ue45
2unc si*ue
HH a8ui c:e8uear in3e$45 o al*un 2la* actiado con un
HH on 3e$ 6 etc. >a$ muc:as 2ormas.
Imprimir *arias copias de un inorme
(rintjo9
P#co#ies L totalPco#ias
re#ort 2orm in2orme noconsole to #rinter
end#rintjo9
>a$ dos maneras #osi9les. -a #rimera es mas sencilla #ero tiene el #ro9lema de 8ue es 9astante mas lenta
15 &OR iL1 ,o nco#ias
RE(OR, &ORM ...
END&OR
25 LRe#ortCo#ias4=c:OlistadosOmire#ort=6nco#ias5
RE(OR, &ORM ...
LRe#ortCo#ias4=c:OlistadosOmire#ort=615
&UNC,1ON Re#ortCo#ias
-(?R?ME,ER lc&RB6 lnCo#ias
-OC?- lcNeNE'#r6 ln+tartCo#ies-ine6 lc+tart?tCo#ies-ine6 lnEndCo#ies-ine K
ln-enCo#ies-ine6 lc,o#6 lc`ottom6 lc?lias
TT de 99
RDE&1NE 2CR-& C>R4135 S C>R41M5
1& \4U((ER4R1!>,4lc&RB6 455 L =.&RB=5
lc&RB L lc&RB S =.&RB=
END1&
lc?lias L ?-1?+45
+E-EC, M
U+E 4lc&RB5
-OC?,E &OR o9j,$#e L 1 ?ND o9jCode L /3
1& EM(,X4EB(R5
lcNeNE'#r L =CO(1E+L= S ?--,4+,R4lnCo#ias55 S 2CR-&
E-+E
ln+tartCo#ies-ine L ?,C4=CO(1E+=6 EB(R5
lc+tart?tCo#ies-ine L +U`+,R4EB(R6 ln+tartCo#ies-ine5
lnEndCo#ies-ine L ?,C42CR-&6 lc+tart?tCo#ies-ine5
ln-enCo#ies-ine L -EN4+U`+,R4lc+tart?tCo#ies-ine6 16 lnEndCo#ies-ine55
lc,o# L +U`+,R4EB(R6 16 ln+tartCo#ies-ine F 15
lc`ottom L +U`+,R4EB(R6 4-EN4lc,o#5 S ln-enCo#ies-ine55
lcNeNE'#r L lc,o# S =CO(1E+L= S ?--,4+,R4lnCo#ias55 S lc`ottom
END1&
RE(-?CE EB(R J1,> lcNeNE'#r
U+E
1& \EM(,X4lc?lias5
+E-EC, 4lc?lias5
END1&
END&UNC
Ma)imi1ar *enta de print pre*ie/
>a$ un truco 8ue 2unciona mu$ 9ien:
7EX`O?RD WcC,R-S&1MdW
RE(OR, &ORM MiRe#orte (RE%1EJ
-uis MarGa !ua$"n
,ucum"n F ?r*entina
34mero de copias de un Report
(or la Redacci)n de &o'(ress
:tt#://NNN.2#ress.com/
Otro #ro9lema comgn es el ngmero de co#ias de un re#ort.
,enemos arias o#ciones:
El sistema cl"sico leGa el c)di*o de dentro de la ta9la del re#ort $ cam9ia9a el alor de la aria9le co#ias #or las 8ue te interesa9a:
el c)di*o 8ue :ace eso es:
close all
set de2au to *:O
lcnomIn J Sinorm<(r)S
lcAlias J Sinorm<S
lncopias J <
lcCopias J A$$TRIM8 "ADR8lnCopias@;: :
SE$ECT Q
I= A%re el report
?SE 8lc3omIn: AGAI3 A$IAS 8lcAlias:
set step on
GO TO"
IF lnCopias T 9
I= Cam%ia el n4mero de copias
ln"os J AT8SCO"IESS@ UlcAlias((E-"R:
IF ln"os T Q
RE"$ACE UlcAlias((E-"R .IT2 V
ST?FF8UlcAlias((E-"R@ ln"osMW@V
9@ lcCopias:
T[ de 99
E3DIF
E3DIF
Otro sistema m"s sencillo es usar la )rden (R1N,AO`.
En la ?$uda dice 8ue: q (R1N,AO` ... END(R1N,AO` iniciali0a la im#resora $ al*unas aria9les del sistema 8ue a2ectan al
resultado im#reso. (uede eniar c)di*os de control a la im#resora6 e'#ulsar una #"*ina en la im#resora antes o des#u<s de un
tra9ajo de im#resi)n6 iniciali0ar el ngmero de columna de la im#resora $ controlar el ngmero de co#ias im#resas.
Con lo 8ue 9astarGa 8ue antes de iniciar el #roceso de im#resora se esta9leciera el alor de la aria9le del sistema P(CO(1E+ al
alor 8ue nos interesa $ meter el RE(OR, &ORM dentro de un 9ucle (R1N,AO`... END(R1N,AO`.
Una e0 salido del 9ucle de9erGamos reesta9lecer el P(CO(1E+ L 1 .
&o'(ress l Enero de 2MMM
n 1999 FoxPress. ?ll ri*:ts resered
34mero total de p!inas
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
H
H Clase: re#ortPcontar#a*inas
H
H Deuele el ngmero de #a*inas de un re#ort
H
H (arametros:
H
H Nom9re del re#ort
H
H Ejem#los:
H
H lntot#a*inas L re#ortPconta#a*inas4=min2orme=5
H
H Retorno
H
H El numero de #a*inas del in2orme.
H
H Nota
H
H
H Creaci)n : M./M9/1999 (RR
H Ultima Modi2icaci)n: 14/M4/2MMM R?(X Ra2ael ?n*el (once Xllanes
H
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
(?R?ME,ER+ lcPre#ort
-OC?- n(a*inas
n(a*inas L M
DE&1NE J1NDOJ ' &ROM 161 ,O 262
?C,1%?,E J1NDOJ ' NO+>OJ
RE(OR, &ORM 4lcPre#ort5 NOCON+O-E
n(a*inas L P(?!ENO
RE-E?+E J1NDOJ '
RE,URN n#a*inas
NO,?: *racias a Aose -uis +antana `lasco $ a Ra2ael ?n*el (once Xllanes
#or la aclaraci)n del NOCON+O-E6 con esto se mejora muc:o la elocidad.
"re*ie/ de Report con seleccionar impresora
(or la Redacci)n de &o'(ress
:tt#://NNN.2#ress.com/
El DiseCador de in2ormes de %&( est" mu$ 9ien #ues #uedes distri9uirlo sin tener 8ue #a*ar ro$altees #ero tiene un loo3 un #oco
anticuado $ M+ no #arece tener muc:as intenciones en mejorarlo.
Uno de los #ro9lemas m"s 2recuentes 8ue se encuentran los desarrolladores es la 2orma de tener una #reieN del re#ort $ lue*o
dar la #osi9ilidad de esco*er la im#resora: muc:os se encuentran con la im#osi9ilidad de com#a*inar las dos cosas 4#reieN $
seleccionar la im#resora56 #ues 9ien6 el c)di*o #ara #oder com#a*inar las dos cosas es:
RE(OR, &ORM in2orm1 NOCON+O-E ,O (R1N,ER (ROM(, (RE%1EJ
&o'(ress l Enero de 2MMM
n 1999 FoxPress. ?ll ri*:ts resered
T. de 99
#uitar %arra de herramientas
&ede6 de9es aCadir WnoNaitW a tu linea Wre#ortW $ en la si*uiente linea de comando la instrucci)n W:ide/release NindoNsW. (or cierto6
V#ara 8ue inclu$es WN:ile \ eo245W es 8ue no te :ace todos los re*istros en tu in2orme si no la #onesI (rue9a a 8uitar ese WN:ileW
&rancisco -orente. Murcia
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
Tama7o de Report "ersonali1ado
(or la Redacci)n de &o'(ress
:tt#://NNN.2#ress.com/
Uno de los #ro9lemas m"s 2recuentes con los re#ort es la necesidad de ada#ta el tamaCo al 8ue te indica un cliente 8ue 8uiere
rea#roec:ar #a#el.
Muc:as eces lo mejor ser" cam9iar el contenido del cam#o EB(R del #rimer re*istro del re#ort #ara cam9iar las dimensiones
del re#ort. Mira la 2unci)n (R,1N&O45 #ara o9tener las claes de las dimensiones e'actas.
&o'(ress l &e9rero de 2MMM
n 1993F2MMM FoxPress. ?ll ri*:ts resered
T'tulos de los Report
Por la Redaccin de FoxPress
Cuando pre/isuali>as un Report con la 7rden:
*E#6*T F6*0 miForm #*EVIE3
El caption del report aparece en la /entana de pre/isuali>aci7n0 La !orma de conseguir 5ue no salga es de!inir una
/entana para 5ue dentro de ella se /isualice el pre/isionado del Report y aora s8 5ue le podemos poner un t8tulo a esa
/entana:
DEFI7E 3I7D63 l$9re5ort F*60 B.B T6 S*63S(). S)6LS() title "0i *e5ort"
*E#6*T F6*0 mi*e5ort #*EVIE3 3I7D63 l$9re5ort
Con lo anterior ya te basta pero si 5uieres ponerlo en una clase y de9arlo ya preparado para todos tus reports podr8as
escribir:
&e!ine Class Pre/ie1Findo1 As #orm
*ame $ 6!rmPre/ie16
Caption $ AReportA
Findo1State $ J
Proc "nit
Parameters TisTitulo
"! PCount')[Y
Tis0Caption $ TisTitulo
Endi!
Tis0So1
EndProc
End&e!ine
Y para in/ocarlo podr,s escribir:
Local o#re&
o#re& 8 )reate6b>ect("#re&ie$3i!"o$". "0y )stom )a5tio!")
*E#6*T F6*0 myre5form 76)67S6LE #*EVIE3 3I7D63 frm#re&ie$
Truco para el pre*ie/ de los reports
&ebido a 5ue /arios amigos no encontraban el 6truco6 para los pre/ie1s el cual tenia por asunto 6Dn poco mas de
control sobre los Pre/ie1s00006, lo /uel/o a en/iar de nue/o con otro asunto0
Dn saludo a todos:
\esKs San>
Aplicante I Spain
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
Siempre me an in5uietado las /istas preliminares de los in!ormes en 4#P, ya 5ue estas tienen muy poco control con el
teclado y se debe de recurrir al mouse 'cosa 5ue a mucos de mis clientes no les parece muy correcto)0
]ltimamente e /isto en el grupo 5ue se an eco /arias consultas, acerca del tema, y me e dico:
T9 de 99
"Venga Jess, a ver si haes algo !ue valga para todo el grupo de fo" !ue tanto te ha ense#ado a ti"
Y mira por donde, dando algunas 5ue otras /ueltas, me a salido la siguiente rutina0 *o es 5ue sea la panacea
uni/ersal, pero algo de control d,0
A /er si entre todo la me9oramos un poco:
SET *ES6E*)E 6FF
#ESH WE2
DEFI7E 3I7D63 $#re&ie$ F*60 B.B T6 /./;
TITLE NVista 5relimi!arN )L6SE S2STE0 7A0E o#re&ie$
K660 3I7D63 $#re&ie$ 0A1
67 WE2 LA:EL E#A**63;
06ESE )LI)W AT Q.o#re&ie$.3i"t-=L;
#I1ELS 3I7D63 $#re&ie$
67 WE2 LA:EL D7A**63;
06ESE )LI)W AT o#re&ie$.Hei(-t=,,.o#re&ie$.3i"t-=L;
#I1ELS 3I7D63 $#re&ie$
67 WE2 LA:EL LEFTA**63;
06ESE )LI)W AT o#re&ie$.Hei(-t=/B.R;
#I1ELS 3I7D63 $#re&ie$
67 WE2 LA:EL *ICHTA**63;
06ESE )LI)W AT o#re&ie$.Hei(-t=/B.o#re&ie$.3i"t-=,,;
#I1ELS 3I7D63 $#re&ie$
67 WE2 LA:EL H60E;
06ESE D:L)LI)W AT /L.o#re&ie$.3i"t-=L;
#I1ELS 3I7D63 $#re&ie$
67 WE2 LA:EL E7D;
06ESE D:L)LI)W AT o#re&ie$.Hei(-t=+Q.o#re&ie$.3i"t-=L;
#I1ELS 3I7D63 $#re&ie$
*E#6*T F6*0 (7ombreI!forme);
T6 #*I7TE* #*60#T #*EVIE3 3I7D63 $#re&ie$
#6# WE2
SET *ES6E*)E 67
Internet
Cone)i5n a archi*o
#oE'#lorer L CreateO9ject4=1nternetE'#lorer.?##lication=5
HFF el sitio donde esta el arc:io .0i#
#oE'#lorer.Nai*ate4=2t#://NNN.icentetra#ani.com/doNnload/constant.0i#=5
#oE'#lorer.%isi9leL.,.
Release #oE'#lorer
FF
-uis MarGa !ua$"n
,ucum"n F ?r*entina
Descar!ar archi*os
en realidad es mu$ 2acil descar*ar un arc:io desde la Ne9. $a sea desde el e'#lorador o desde 2#6 lo im#ortante es 8ue el cliente
acceda a traes de una #a*ina de :tml. la descar*a de cual8uier arc:io es una sim#le re2erencia a el. #or ej. lin3 FZ
Qa :re2LNNN.miseridro.com/miarc:io.e'eZ
9ueno6 er :tml #ara detalles...
solo de9es #edir al cliente 8ue ejecute el arc:io ene0 de a9rirlo o 8ue lo
[M de 99
ejecute manualmente lue*o del doNnload.
Direcci5n ?R$( $lamar a una
loE'#lorer L CreateO9ject4=1nternetE'#lorer.?##lication=5
loE'#lorer.Nai*ate4=:tt#://NNN.icentetra#ani.com=5
loE'#lorer.%isi9leL.,.
Release.loE'#lorer
-uis MarGa !ua$"n
,ucum"n F ?r*entina
h
$ocal lcCOMA3DO
lcCOMA3DO J NSTART(E-E httpA++///(microsot(comN
R?3 UlcCOMA3DO
En*iar+Reci%ir mensa,es con Outloo> E)press
Xour 1nit on t:e 2orm Nill creat t:e o9ject 2or t:e +ession:
5blic lc)r"ir
lc)r"ir 8 sys(Q) + cr"ir()
T-isform.Sessio!/.si(!o! UU turns on OE i2 it is not alread$ o#en.
+end mail Nit: #reset ,e't and an attac:ment:
l!Sessio!ID 8 t-isform.sessio!/.Sessio!ID
If l!Sessio!ID F B
If &arty5e(t-isform.messa(e/) 8 "6"
$it- T-isform.messa(e/
.Sessio!ID 8 l!Sessio!ID
.)om5ose()
.Attac-me!tI!"ex 8 B
.A""ress*esol&eEI 8 .f.
.0s(Sb>ect 8 "7e$ &ersio! of yor 5ro(ram"
.0s(7oteText 8 " 0essa(e Text -ere "
.*eci5A""ress 8
e!"$it-
If t-isform.messa(e/.0s(I!"ex 8 =/.
If file(yor file !ame -ere)
T-isform.messa(e/.Attac-me!t#at-7ame 8
T-isform.messa(e/.Attac-me!t7ame 8
E!"if
E!"if
T-isform.messa(e/.Se!"()
3ait $i!"o$ !o$ait "0essa(e se!t..."
E!"if [[ &arty5e(t-isform.messa(e/) 8 "6"
T-isform.sessio!/.Si(!6ff()
E!"if UU ln+ession1D Z M
Return
RE?D M?1-:
T-isform.0essa(e/.sessio!i" 8 t-isform.Sessio!/.sessio!i" UU +ession R
,:is2orm.Messa*e1.2etc:unreadonl$ L .t. UU ,$#e o2 Mail
,:is2orm.Messa*e1.2etc: UU !et it
m L M
ms1 L t:is2orm.Messa*e1.ms*count UU >oN man$ #ieces id Ne receiedI
HFF run t:rou*: all t:e #ieces loo3in* 2or an attac:ment. BBBB.neN
&or ms L 1 to ms1
[1 de 99
HJait Nind ,:is2orm.Messa*e1.ms*ori*address
HJait Nind t:is2orm.Messa*e1.attac:mentname
lc2ile L t:is2orm.Messa*e1.attac:mentname
cd O UU lcCurdir 2or instance
i2 loNer4ri*:t4lc2ile6355LWneNW
Nait Nind noNait W 1nstallin* a neN ersion o2 t:e #ro*ram W
Co#$ 2ile 4lc2ile5 to c:O
endi2
Endi2
m L m S 1
12 m QZ ms1
HFF c:an*e t:e messa*e underneat:
,:is2orm.Messa*e1.ms*inde' L m
Endi2
Ne't
Outloo> E)press( A!re!ar re!istros a $i%reta de direcciones
oOutloo3 L CreateO9ject4=Outloo3.?##lication=5
oContacto L oOutloo3.Create1tem425
oContacto.9usinesstele#:onenum9er L =999.[T/43=
oContacto.com#an$name L =Em#resa 3=
oContacto.de#artment L =entas=
oContacto.email1address L =a*#E3ender.es=
oContacto.2irstname L =(e#ito=
oContacto.lastname L =de los #alotes=
etc...
oContacto.sae45
FF
+aludos6
FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Carlos Xo:n @u9iria
?.!.(.
Outloo> E)press( $i%reta de direcciones
o L createo94Woutloo3.a##licationW5
os#ace L o.*etnames#ace4Wma#iW5
ocar#etacontactos L os#ace.*etde2ault2older41M5
contactos L ocar#etacontactos.items
2or eac: #ersona in contactos
Nit: #ersona
Nait NindoN .&ile?s
endNit:
end2or
+alu2
?riel !imene0
[2 de 99
Ms A!ents
Idioma
(ara Es#aCol:
Merlin.-an*ua*e1D L 3M.2
Merlin.-an*ua*e1dL =U>CM?=
(ara 1n*les:
Merlin.-an*ua*e1D L 1M33
+aludes
+er*io Roc:a ,enorio
"antalla
Cantidad de colores
HH !et`its(i'el 45 FZ n`its(or(i'el
HH Deuele la cantidad de 9its #or #i'el.
HH -a cantidad de colores es 2 HH n`its(i'el 4ej.: . 9its L 2/T colores6 1T L T//3T6 ...5
HHFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
&UNC,1ON !et`its(i'el
-OC?- n`its(i'el6 :+rcDC6 :Jnd
DEC-?RE 1nte*er !etDes3to#JindoN in User32
DEC-?RE 1nte*er !etDC in User32 1nte*er
DEC-?RE 1nte*er !etDeiceCa#s in !di32 1nte*er6 1nte*er
DEC-?RE 1nte*er ReleaseDC in User32 1nte*er6 1nte*er
:Jnd L !etDes3to#JindoN 45
:+rcDC L !etDC 4:Jnd5
n`its(i'el L !etDeiceCa#s 4:+rcDC6 125
ReleaseDC 4:Jnd6 :+rcDC5
RE,URN n`its(i'el
Capturar la pantalla
Entra en NNN.uniersalt:read.com $ en la seccion arc:ios :a$ ejem#los de como :acer esto con 2unciones de la ?(1.
+alu2
?riel !imene0
Colores( Calcular
1T.[[[.21/ es 42/Tf35 F 1
%&( usa la 2unci)n R!`42//62//62//5
donde:
nColor L R!`4nRojo6 n%erde6 n?0ul5
$ la 2)rmula es:
n?0ul H 42/Tf25 S n%erde H 2/T S nRojo
Ocultar+Mostrar la %arra de tareas de .indo/s
?8uG a el c)di*o
+aludos ?le'andre a:edreilleE3ra2teuro#e.com
[3 de 99
H\H Constantes #ara ocultar o mostrar la 9arra de tareas de NindoNs
RDE&1NE ,O!!-EP>1DEJ1NDOJ 12.
RDE&1NE ,O!!-EPUN>1DEJ1NDOJ T4
H\H Oculta la 9arra de tareas de NindoNs
H\H +inta'is: >ide,as3`ar45
H\H %alor deuelto:
H\H ?r*umentos:
&UNC,1ON >ide,as3`ar
-OC?- ln>Nnd
H\H %alores
ln>Nnd L M
H\H 1nstrucciones DEC-?RE D-- #ara mani#ular la 9arra de tareas
DEC-?RE 1N,E!ER &indJindoN? 1N Jin32?(1 +,R1N! l#ClassName6 +,R1N!
l#JindoNName
DEC-?RE 1N,E!ER +etJindoN(os 1N Jin32?(1 1N,E!ER :Nnd6 1N,E!ER
:Nnd1nsert?2ter6 1N,E!ER '6 1N,E!ER $6 1N,E!ER c'6 1N,E!ER c$6 1N,E!ER
N&la*s
H\H %alores
ln>Nnd L &indJindoN?4W+:ellPtra$NndW6 WW5
H\H Ocultar la 9arra de tareas
1& ln>Nnd QZ M
+etJindoN(os4ln>Nnd6 M6 M6 M6 M6 M6 ,O!!-EP>1DEJ1NDOJ5
END1&
END&UNC
H\H Muestra la 9arra de tareas de NindoNs
H\H +inta'is: +:oN,as3`ar45
H\H %alor deuelto:
H\H ?r*umentos:
&UNC,1ON +:oN,as3`ar
-OC?- ln>Nnd
H\H %alores
ln>Nnd L M
H\H 1nstrucciones DEC-?RE D-- #ara mani#ular la 9arra de tareas
DEC-?RE 1N,E!ER &indJindoN? 1N Jin32?(1 +,R1N! l#ClassName6 +,R1N!
l#JindoNName
DEC-?RE 1N,E!ER +etJindoN(os 1N Jin32?(1 1N,E!ER :Nnd6 1N,E!ER
:Nnd1nsert?2ter6 1N,E!ER '6 1N,E!ER $6 1N,E!ER c'6 1N,E!ER c$6 1N,E!ER
N&la*s
H\H %alores
ln>Nnd L &indJindoN?4W+:ellPtra$NndW6 WW5
H\H Mostrar la 9arra de tareas
1& ln>Nnd QZ M
+etJindoN(os4ln>Nnd6 M6 M6 M6 M6 M6 ,O!!-EPUN>1DEJ1NDOJ5
END1&
END&UNC
Resoluci5n en pantalla
Esta es la m"s r"#ida 8ue :e encontrado.
DEC-?RE 1nte*er !et+$stemMetrics 1N Jin32?(1 1nte*er n1nde'
I!e,+$stemMetrics415 UU Deuele la resoluci)n ertical6 TMM
I!e,+$stemMetrics41T5 UU Deuele la resoluci)n :ori0ontal6 .MM
Aose#
Redes
Dominio( Conocer
[4 de 99
&ijate si asi te sire:
oJs: L CreateO9ject4=J+cri#t.NetNor3=5
I oJs:.UserDomain
I oJs:.UserName
I oJs:.Com#uterName
Ramon !iu9i
2ora del ser*idor
Estas rutinas las enio -uis M. !ua$"n.
...con esta 2unci)n #uedes tomar ) sincroni0ar la 2ec:aF:ora de un
seridor:
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H &UNC,1ON NetDate,ime4tc+r6 tl+et5
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H Retorna la 2ec:aF:ora de la (C remota =tc+r=
H +i =tl+et= es .,. cam9ia la :ora de la (C
H #or la 2ec:aF:ora de la (C remota =tc+r=
H (?R?ME,RO+:
H tc+r: Nom9re de la (C remota
H tl+et: .,. F +i cam9ia la :ora de la (C
H RE,ORNO:
H Date,ime: -a 2ec:aF:ora de la (C remota
H Num<rico: M F +i se cam9i) la 2ec:aF:ora correctamente
H F1 F No se #udo cam9iar la 2ec:aF:ora
H F2 F No se encontr) la (C remota
H U+O: I NetDate,ime4=OOMi+eridor=6 .&.5
H ?U,OR: -M!
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
&UNC,1ON NetDate,ime4tc+r6 tl+et5
-OC?- lRet6 lc+trDJ6 ln(tr6 lc,oD6 l#,@16 ln6 ln@,6 K
ln?no6 lnMes6 lnDD+6 lnDia6 ln>or6 lnMin6 ln+e*
DEC-?RE 1N,E!ER NetRemote,OD 1N NE,?(132 K
+,R1N! Elc+r6 K
1N,E!ER Eln(tr
DEC-?RE RtlMoeMemor$ 1N J1N32?(1 K
+,R1N! Elc,oD6 K
1N,E!ER ln(tr6 K
1N,E!ER ln
DEC-?RE +et+$stem,ime 1N J1N32?(1 K
+,R1N! lc+trDJ
DEC-?RE !et,ime@one1n2ormation 1N 7ERNE-32 K
+,R1N! El#,@1
tc+r L +,RCON%4+,RCON%4tc+r6156/5 S C>R4M5
ln(tr L M
ln L NetRemote,OD4Etc+r6 Eln(tr5
1& ln L M
lc,oD L RE(-1C?,E4C>R4M56 4.5
ln L RtlMoeMemor$4Elc,oD6 ln(tr6 4.5
ln?no L DJ2N4+U`+,R4lc,oD6 416 455
lnMes L DJ2N4+U`+,R4lc,oD6 3[6 455
lnDD+ L DJ2N4+U`+,R4lc,oD6 4/6 455
lnDia L DJ2N4+U`+,R4lc,oD6 336 455
ln>or L DJ2N4+U`+,R4lc,oD6 M96 455
lnMin L DJ2N4+U`+,R4lc,oD6 136 455
ln+e* L DJ2N4+U`+,R4lc,oD6 1[6 455
[/ de 99
1& tl+et
lc+trDJ L N2DJ4ln?no5 S N2DJ4lnMes5 S K
N2DJ4lnDD+5 S N2DJ4lnDia5 S K
N2DJ4ln>or5 S N2DJ4lnMin5 S K
N2DJ4ln+e*5 S N2DJ4M5
lRet L 11&4+et+$stem,ime4lc+trDJ56 M6 F15
E-+E
l#,@1 L +(?CE42//5
ln L !et,ime@one1n2ormation4El#,@15
ln@, L DJ2N4+U`+,R4l#,@16 16 255
1& ln@, Z [2M
ln@, L 42f1T5 F ln@,
E-+E
ln@, L 4F15 H ln@,
END1&
lRet L D?,E,1ME4ln?no6 lnMes6 lnDia6 K
ln>or6 lnMin6 ln+e*5 S ln@, H TM
END1&
E-+E
lRet L F2
END1&
RE,URN lRet
END&UNC
H F F F F F F F F F F F F F F F F F F F F F F F F
H &UNC,1ON DJ2N4tcDJ5
H Usada #or NetDate,ime45
H F F F F F F F F F F F F F F F F F F F F F F F F
&UNC,1ON DJ2N4tcDJ5
RE,URN ?+C4+U`+,R4tcDJ6 46 155H42/Tf35 S K
?+C4+U`+,R4tcDJ6 36 155H42/Tf25 S K
?+C4+U`+,R4tcDJ6 26 155H42/T5 S K
?+C4+U`+,R4tcDJ6 16 155
END&UNC
H F F F F F F F F F F F F F F F F F F F F F F F F
H &UNC,1ON N2DJ4tnN5
H Usada #or NetDate,ime45
H F F F F F F F F F F F F F F F F F F F F F F F F
&UNC,1ON N2DJ4tnN5
RE,URN C>R4MOD4tnN6 2/T55 S C>R41N,4tnN/2/T55
END&UNC
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
(ero... 4siem#re :a$ un #ero56 le$endo la `ase de Conocimientos de
Microso2t6 en el artGculo Y249[1T
:tt#://su##ort.microso2t.com/su##ort/39/articles/Y249/[/1T.?+( dice 8ue la
2unci)n ?(1 NetRemote,OD solo 2unciona con JindoNs N, $ JindoNs 2MMM. En
dic:o artGculo :a$ un ejem#lo #ara %&(T.
FF
-uis MarGa !ua$"n
,ucum"n F ?r*entina
S#$
Buscar pala%ra en ta%la
lc`usca L =]= S Cadena S =]=
+elect H 2rom ta9la N:ere cam#o -17E lc`usca
FF
?tentamente6
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
(ere (ujol i Es#uCa
[T de 99
mailto:##ujoleEairtel.net
&alores (3?$$(
+i tu 8uieres todos los re*istros de la ta9la Elementos6 #ara 8ue no te sal*a el alor .NU--. en las consultas de9es es#eci2icar los
cam#os como:
...6N%-4detalles.#recio6M56...
Ta%las
Actuali1ar datos 0ue no e)isten en otra ta%la
+elect H &rom ,a9la1 J:ere 1d Not 1n 4+elect 1d &rom ,a9la25
Append rom desde una *ista
?((END &ROM D`&4WNom9re%istaW5
Busca un campo en una ta%la y retorna (T( si tu*o E)ito
*========================================================
* FE7)TI67 Fi!"Fiel"(lc)am5o. lcAlias)
*========================================================
* :sca ! !ombre "e cam5o e! !a tabla y retor!a .T. si t&o exito.
* ES6D T Fi!"Fiel"("0i)am5o". "0iAlias")
* T Fi!"Fiel"("0i)am5o") [[ :sca e! el alias corrie!te
*========================================================
FE7)TI67 Fi!"Fiel"(lc)am5o. lcAlias)
L6)AL l!
IF E0#T2(lcAlias)
lcAlias 8 ALIAS()
E7DIF
IF ESED(lcAlias)
l! 8 AFIELDS(0iArray. lcAlias)
IF l! F B
l! 8 AS)A7(0iArray. E##E*(lc)am5o))
E7DIF
ELSE
l! 8 B
0ESSACE:61("El alias !o existe."./R)
E7DIF
*ETE*7 l! O B
E7DFE7)
Campos memo
Dada su #ro9lem"tica:
1.F Cam9iar #or C42/M5
2.F +u9stituir #or 2ic:ero .t't 4crear cuando necesario5 $ utili0ar control Ric:,e't
Crear ta%las con campos *aria%les
cCmdL=CRE?,E ,?`-E Wtem#o.d92W name tem#o 4o9ra c41M5 NO, NU--6NOM`PO`R C44M5 NO, NU--6,1(O C41M5 NO,
NU--=
2or iL1 to nCount
cCam#oLaCam#osaib
cCmdLcCmd S =6= S cCam#o S = N 412625 NO, NU--=
end2or
UcCmd
[[ de 99
Crear ta%las de reerencias cru1adas
1D ?rtGculo:
&ec:a de Creaci)n:
&ec:a de Reisi)n:
E1M119
22FnoF199T
19F?(RF199[
-a in2ormaci)n en este artGculo se re2iere a:
FMicroso2t &o'(ro6 ersi)n 3.M /.M
RE+UMEN
Este artGculo le in2roma so9re la creaci)n $ isuali0aci)n de ,a9las/Consultas de Re2erencias Cru0adas en %isual &o'(ro 3.M / /.M
#ara la isuali0aci)n de datos de una ta9la en 2orma de >oja de C"lculo.
Mj+ 1N&ORM?C1hN
En %isual &o'(ro 3.M / /.M se #ueden crear ,a9las de Re2erencias Cru0adas 48ue isuali0an los datos en 2ormato :oja de c"lculo5
como las de E'cel mediante #ro*ramaci)n.
Este ti#o de ,a9las de Re2erencias Cru0adas son mu$ usadas en Microso2t ?ccess.
(or ejem#lo6 su#on*amos 8ue tenemos una ta9la de em#leados en la 8ue almacenamos la entas 8ue al mes reali0a cada
em#leado. Re*ularmente6 8uerremos o9tener una ta9la de re2erencias cru0adas6 en la 8ue de un r"#ido ista0o #odamos er
cu"nto :a endido cada em#leado #or mes6 $ cuando :a endido en el total de los meses.
(ara isuali0ar este ti#o de in2ormaci)n es mu$ gtil usar el 2ormato >oja de C"lculo6 donde #odremos er en 2orma de 2ilas #or
columnas esta in2ormaci)n. (or ejem#lo:
EM(-E?DO Mes1 Mes2 ,otal
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
E1 11 12 23
E2 / [ 12
En esta consulta6 r"#idamente se e cu"nto :a endido en el Mes16 en el Mes2 $ en el ,otal de am9os meses6 #or ejem#lo6 el
em#leado E1.
>a$ un ?sistente 4se ejecuta accediendo al meng de %isual &o'(ro : >erramientas / ?sistentes / Consulta /?sistente #ara ta9las
de Re2erencias Cru0adas / en la ersi)n in*lesa serGa el meng: ,ools / Ji0ards / Yuer$ / CrossF,a9 Ji0ard5 #ara crearlas.
Una e0 8ue este asistente nos :a creado la consulta 4.Y(R5 a #artir de una ta9la 4.D`&5 8ue contiene los datos6 #odemos co*er el
c)di*o +Y- *enerado6 llearlo a un #ro*rama $ ejecutarlo 4en res#uesta a un eento de un o9jeto5 cuando necesitemos
crear/isuali0ar la ta9la/consulta de re2erencias cru0adas.
(or ejem#lo:
1. Creamos una ,a9la 4#or ejem#lo6 nom9re: WRE&+CRU@.D`&W5 8ue a a
contener los datos #ara la Consulta de Re2erencias Cru0adas6 con
la si*uiente estructura:
cam#o 1: Em#leadocar"cter425
cam#o 2: Mesnum<rico425
cam#o 3: %entasnum<rico4/5
-a ta9la de ejem#lo contiene los si*uientes datos 4re*istros5:
Em#leado Mes %entas
FFFFFFFFFFFFFFFFFFFFFFFFFFF
E1 1 /
E1 1 2
E1 2 /
E1 2 3
E1 2 4
E2 1 3
E2 1 2
E2 2 4
E2 2 2
E2 2 1
2. El C)di*o 8ue *enera el ?sistente de Re2erencias Cru0adas 9asado
en la ta9la WRE&+CRU@.D`&W al usar como cam#o &ila 4Em#leado56
como cam#o Columna 4Mes5 $ como %alor 4%entas6 o#eraci)n: +uma5
es el si*uiente:
+E-EC, RE&+CRU@.Em#leado6 RE&+CRU@.Mes6 +UM4RE&+CRU@.%entas5K
&ROM WRE&+CRU@.D`&W RE&+CRU@K
!ROU( `X RE&+CRU@.Em#leado6 RE&+CRU@.MesK
[. de 99
ORDER `X RE&+CRU@.Em#leado6 RE&+CRU@.MesK
1N,O CUR+OR +X+42M1/5
DO 4P!ENB,?`5 J1,> W?sisconsW6.t.6.t.6.t.6666.t.6M
`ROJ+E NOMOD1&X
(odemos crear un #ro*rama 4'''.(R!5 con el c)di*o anterior $
ejecutarlo en nuestra a#licaci)n6 con DO '''.(R!6 en res#uesta a
un eento de un o9jeto concreto 4#or ejem#lo en el eento clic3
de un 9ot)n de comando con el tGtulo 4ca#tion5 =%isuali0ar ,a9la
de Re2erencias Cru0adas=56 de tal 2orma 8ue cuando el usuario
:a*a clic3 en dic:o 9ot)n del 2ormulario6 se isualice de 2orma
autom"tica la ta9la de re2erencias cru0adas.
El resultado de ejecutar la consulta o ese c)di*o en un.(R! 4#ro*rama de %&( 3.M / /.M5 con la ta9la WRE&+CRU@.D`&W dada
como ejem#lo en este artGculo:
EM(-E?DO NP1 NP2 ,otal
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
E1 11 12 23
E2 / [ 12
"asar datos de un cursor a una ta%la
?((END &ROM D`&4WCurP(edidosW5
Compro%ar si ya e)iste un *alor
FEn el alid del cam#o reali0a lo si*uiente
-ocal -cRecno
-cRecnoLRecno45
+EE7 ,>1+.%?-UE
i2 \eo245 and -cRecno\LRecno45
Messa*e9o'4=-a clae $a e'iste...=61T6=%alidaci)n de cam#o=5
return M
END1&
*o -crecno
Con este #rocedimiento es#ero 8ue soluciones el #ro9lema
Nota: ,ener en cuenta 8ue esta alidaci)n es o#tima $ sin nin*un error cuando la ta9la tiene como mGnimo 1 re*istro $a di*itado6
te recomiendo modi2icar el #rocedimiento #ara detectar cuando la ta9la esta acia.
Insertar re!istro en una posici5n
!O RECO /
1N+ER, `-?N7 `E&ORE
#ero a menos 8ue esto lo estes :aciendo so9re un cursor tem#oral de -/E6 me uno al consejo *eneral de no intentar este ti#o de
manejos so9re ta9las medianas o *randes6 $a 8ue es mu$ lento $ adem"s necesitas a9rir la ta9la en 2orma e'clusia.
Renom%rar campo de una ta%la
?-,ER ,?`-E Mi,a9la CRE?,E CO-UMN nueocam#o c 41M5
+E-EC, Mi,a9la
RE(-?CE ?-- nueocam#o J1,> iejocam#o
?-,ER ,?`-E Mi,a9la DRO( CO-UMN iejocam#o
Reparaci5n de enca%e1ado 8Ta%la:
En Uniersal,:read 4NNN.uniersalt:read.com5 en la seccion de arc:ios6 tienes una utilidad 4CMRe#air5 8ue te lo :ace.
Ta%las 0ue pertenecen a una DBC
(uedes car*ar los nom9res de las ta9las en un ector:
O(EN D?,?`?+E (:OMiData`ase
[9 de 99
ln L ?D`O`AEC,4Mi%ector6 =,?`-E=5
&OR E?C> lc 1N M1%ector
I lc
END&OR
FF
-uis MarGa !ua$"n
,ucum"n F ?r*entina
T'tulo del campo
c,ituloLD`!E,(RO(4=,a9la.Columna=6=&1E-D=6=Ca#tion=5
FF
%ictor Es#ina
:tt#://NNN.mitrom#o.com/es#ina
Transacci5n
************************************************************
*
* F!ciA!D I69T*A7SA))I67
*
* *eali'a !a tra!sacciA! co! las tablas 5asa"as e!tre comas
*
* #arametrosD
*
* tctablas = tablas %e 5artici5a! e! la tra!saccio! (e!tre comas)
* tlfor'ar = for'ar la (rabacio! a!%e -biera cambios "e otro sario
* tla!larsifalla = "escartar los cambios e! el bffer si falla la tra!saccio!
*
* E>em5losD
*
* llret 8 Co)sA55.io9tra!saccio!("l&9&e!tas. clie!tes. articlos")
* llret 8 Co)sA55.io9tra!saccio!("l&9&e!tas. clie!tes. articlos"..T...T.) es
i(al %e la a!terior
* llret 8 Co)sA55.io9tra!saccio!("l&9&e!tas. clie!tes. articlos"..F...F.) esto
lo -aria Him :oot-
*
* *etor!o
*
* .T. V .F. I!"ica!"o si se 5"o o !o reali'ar la tra!sacciA!
*
* 7ota
*
* La tablas "ebe! estar abiertas
*
* Esa la f!cio! st95artes
*
* Im5orta!te rese?ar %e se efectara! e! el or"e! e! %e se -aya!
* 5asa"o e! la lista
*
* E! caso "e !o 5o"er reali'ar la tra!saccio! a!la to"os los TA:LEE#DATES
* y retor!a las tablasV&istas a s sitacio! ori(i!al. si tla!larsifalla es .T.
* o !o se 5o!e este 5arametro
*
* )reaciA! D /PVB<V,BBB #**
* Eltima 0o"ificacio!D +BVB<V,BBB #**
*
************************************************************
FE7)TI67 I69T*A7SA))I67
#A*A0ETE*S tctablas. tlfor'ar. tla!larsifalla
L6)AL l!!mtablas. ll*oll:acX. llret. l!i
#*IVATE 5atabla
DI0E7SI67 5atabla]/^
5atabla]/^ 8 ""
.M de 99
*&alores 5or "efecto
L6)AL llfor'ar
llfor'ar 8 .T.
L6)AL lla!larsifalla
lla!larsifalla 8 .T.
llret 8 .T.
ll*oll:acX 8 .F.
IF #)6E7T()_FB A7D AT(".".tctablas)_FB
ST9#A*TES(tctablas."5atabla")
E7DIF
l!!mtablas 8 ALE7(5atabla)
IF #)6E7T()8B 6* l!!mtablas 8 B
0ESSACE:61("Error "e 5arametros. "ebe -aber al me!os !a tabla".<L."ATE7)I67")
llret 8 .F.
ELSE
IF #)6E7T()F,
llfor'ar 8 tlfor'ar
E7DIF
IF #)6E7T()8+
lla!larsifalla 8 tla!larsifalla
E7DIF
:ECI7 T*A7SA)TI67
F6* l!i 8 / T6 l!!mtablas
IF 76T ll*oll:acX A7D 76T TA:LEE#DATE(/.llfor'ar.5atabla]l!i^)
ll*oll:acX 8 .T.
E1IT
E7DIF
E7DF6*
IF ll*oll:acX
*6LL:A)W
IF lla!larsifalla
F6* l!i 8 / T6 l!!mtablas
8TA:LE*EVE*T(.T..5atabla]l!i^)
E7DF6*
E7DIF
l!ret 8 .F. [[ error e! la (rabacio!Vactali'acio!
ELSE
E7D T*A7SA)TI67
E7DIF
E7DIF
*ELEASE 5atabla
*ETE*7 llret
.1 de 99
&arios
Acceso directo en el escritorio
(uedes usar JindoNs +cri#t >ost:
oJs: L CreateO9ject4=J+cri#t.+:ell=5
cDes3to#Dir L oJs:.+#ecial&olders4=Des3to#=5
o-n3 L oJs:.Create+:ortcut4cDes3to#Dir S =OO+:ortcut to Note#ad.ln3=5
o-n3.,ar*et(at: L cDes3to#Dir S =OOnote#ad.ln3=
o-n3.+ae45
FF
?le' &eldstein F MC(
Miami6 &-6 U+?
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
h
?8ui tienes una solucion eniada #or &ernando +uare0 al *ru#o:
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
2unction Crea?ccesoDirecto4c+:ortCutName6c,ar*et(at:5
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
H
-OC?- cOldDir6 oJs:+:ell6 o+:ortCut6 lNormal+:ortCut6 cE't
H
cOldDir L +E,4=Director$=5
H
H DCC F !et e'tension. Determine i2 t:is is a UR- s:ortcut or a normal
4ln35 s:ortcut.
cE't L U((ER4 #ci?ll,rim4 AU+,EB,4 c+:ortCutName 5 5 5
lNormal+:ortCut L 4 cE't LL =-N7= 5
H
H DCC F Create $our NindoNs scri#tin* :ost 4J+>5 s:ell to ena9le a moe to
t:e des3 to# director$
oJs:+:ell L CreateO9ject4 =J+cri#t.+:ell= 5
+E, D1REC,ORX ,O 4oJs:+:ell.+#ecial&olders4=Des3to#=55
H
H DCC F Use $our J+> o9ject to create $our s:ortcut.
o+:ortCut L oJs:+:ell.Create+:ortcut4 c+:ortCutName 5
H DCC F +et $our #ro#erties and sae t:e s:ortcut
o+:ortCut.,ar*et(at: L c,ar*et(at:
H
H\H H DCC F ,:e 2olloNin* #ro#erties are onl$ aaila9le 2or normal s:ort
cuts.
H\H 1& llNormal+:ortCut
H
H\H H DCC F `eloN are ot:er #ro#erties and e'am#les o2 settin* t:em.
H\H lo+:ortCut.1con-ocation L =note#ad.e'e6 M=
H\H lo+:ortCut.Descri#tion L =Currentl$ runnin* scri#t.=
H\H lo+:ortCut.>ot3e$ L =?-,SC,R-S&=
H\H lo+:ortCut.JindoN+t$le L [ UU minimi0ed
H\H lo+:ortCut.Jor3in*Director$ L =c:O=
H\H
H\H H DCC F Dis#la$ 2ull #at: o2 t:e e'ecuta9le
H\H Ilo+:ortCut.&ullname
H\H
H\H END1&
H
H\H H DCC F Must sae t:e s:ort cut. ,:e s:ort cut saes in t:e current
director$6 N:ic: is N:$ Ne moed to t:e director$
H\H H DCC F #rior to creatin* t:e s:ortcut.
H
.2 de 99
o+:ortCut.+ae
H
H DCC F NoN moe 9ac3 to $our startin* director$
+E, D1REC,ORX ,O 4cOldDir5
H
FF
+aludos6
(a9lo Roca 4B#rocaEclao.net5 48uitar la B5
-a CoruCa F Es#aCa
1CY /M3/..[
+$so# del (ortal !ratuito de %isual&o'(ro en Es#aCol
:tt#://cli3.to/isual2o'
Actuali1ar el cursor de un !rid
,ue un #ro9lema similar $ lo solucione de la 2orma mas salaje6 sin ma$or inesti*acion #ero me 2unciono $ a:ora tra9ajo solo
asi con los *rid.
Conierte el *rid en un o9jeto6 cu$o recorsource sea el cursos 8ue actuali0as $ cada e0 8ue modi2icas el cursors saca $ uele a
#oner el o9jeto del *rid. (or ejem#lo6 $o un cursor 8ue a cada rato lo modi2ico
select distinct 8ueja6 idP8ueja 2rom #rinci#al into cursor -ista order
9$ #rinci#al.orden 6 #rinci#al.num8ueja
#or lo 8ue de9o re2rescar sacando $ oliendo a colocar el o9jeto 8ue me re#resenta el *rid en la 2orma
H ?ctuali0o el o9jeto en la #antalla
t:is2orm.RemoeO9ject4WcPlistaactual1W5
t:is2orm.?ddO9ject4WCP-1+,??C,U?-1W6WCP-1+,??C,U?-W5 UU ?dd a -ine control to t:e 2orm
t:is2orm.CP-1+,??C,U?-1.%isi9le L .,. UU Ma3e -ine control isi9le
t:is2orm.CP-1+,??C,U?-1.,o# L 2[ UU +#eci2$ -ine control roN
t:is2orm.CP-1+,??C,U?-1.-e2t L T9. UU +#eci2$ -ine control column
Esto me soluciono el #ro9lema 8ue el *rid se 8uede en 9lanco cada e0 8ue modi2ico el cursor6
r0ar0aEun.*uate.net
Apa!ar el "C
Declare 1nte*er E'itJindoNsE' in =user32.dll= 1nte*er u&la*s6 1nte*er
dNResered
?l*unoa de los alores #ara u&la*s #ueden ser:
M L Reinicia NindoNs.
1 L ?#a*a el sistema.
2 L Reinicia el sistema.
X el alor #ara dNResered siem#re de9e ser M.
Ej: E'itJindoNsE'416M5
Api( Datos TF"E
-a declaraci)n 8uedarGa asi:
DEC-?RE -ON! CreateDirector$ 1N 3ernel32.D-- +,R1N! l#(at:Name6 +,R1N! El#+ecurit$?ttri9utes
-a estructura de +ECUR1,XP?,,R1`U,E+6 la tienes 8ue #asar a strin*6 $ *uardar la in2ormacion 8ue contiene como se
*uardarGa en memoria. En el caso 8ue :as mandado6 si mandamos la acGa #ara 8ue co*a los alores #or de2ecto
de se*uridad serGa lo si*uiente :
l#+ecurit$?ttri9utres L C>R4125 S RE(-1C?,E4C>R4M56 35 S K
.3 de 99
RE(-1C?,E4C>R4M56 45 S K
RE(-1C?,E4C>R4M56 45
FF
rcanoE9orsan.es
Ra2ael Cano (alomino
D#to. Desarrollo
1n2orm"tica `orsan6 +.-.
c/?ntonio -)#e06 249 F 3o A
Madrid 4Es#aCa5
Arrancar el Internet E)plorer e ir a una p!ina .e%
#oE'#lorer L CreateO9ject4=1nternetE'#lorer.?##lication=5
#oE'#lorer.Nai*ate4=:tt#://NNN.altaista.com=5
#oE'#lorer.%isi9leL.,.
Release.#oE'#lorer
C(C(C( D'!ito de control
:ace unos d8as, y perd7n por el retraso, un compaNero me pidi7 5ue le en/iara como acer el c,lculo de los d8gitos de
control de la Cuenta Corriente Oanc,ria 'para los bancos espaNoles I[ OOOOIEEEEICCI2222222222 ^OOOO:C7digo
del OancoZ EEEE: C7digo de la EntidadZ CC: &8gitos de controlZ 2222222222: Cuenta particular_):
Pues a8 /a:
`````````````````````````````````````````````````````
En/iamos la Cuenta a /alidar como par,metro
`````````````````````````````````````````````````````
lparameters Cuenta
&ECLARE pesos'@Y)
L3CAL i,9,G,suma,suma@
pesos'@)$U
pesos'J)$R
pesos'R)$V
pesos'S)$(
pesos'%)$@Y
pesos'U)$%
pesos'V)$X
pesos'X)$S
pesos'()$J
pesos'@Y)$@
"# aempty'Cuenta)
"# len'alltrim'Cuenta))bJR
G$Y
#3R i$@ to S
G$Gc/al'substr'Cuenta,i,@))
E*&#3R
"# Gb[Y
$MESSABEO32'6Cuenta erronea0 #altan d8gitos6,US,6d Atenci7n a6)
return 0!0
E*&"#
ELSE
9$(
G$@
suma$Y
suma@$Y
#3R i$@ to (
"# isdigit'substr'Cuenta,i,@))
suma$sumac'/al'substr'Cuenta,9,@))`pesos'G))
ELSE
G$GI@
E*&"#
9$9I@
G$Gc@
E*&#3R
9$JR
G$@
.4 de 99
#3R i$@ to @Y
suma@$suma@c'/al'substr'Cuenta,9,@))`pesos'G))
9$9I@
G$Gc@
E*&#3R
9$M3&'suma,@@)
G$M3&'suma@,@@)
9$ii!'9$Y,@@,9)
9$ii!'9$@,@Y,9)
G$ii!'G$Y,@@,G)
G$ii!'G$@,@Y,G)
"# /al'substr'Cuenta,@@,@))$'@@I9)
"# /al'substr'Cuenta,@J,@))b['@@IG)
$MESSABEO32'6Cuenta erronea0 *o corresponde el segundo d8gito de control6,US,6d Atenci7n a6)
return 0!0
E*&"#
ELSE
$MESSABEO32'6Cuenta erronea0 *o corresponde el primer d8gito de control6,US,6d Atenci7n a6a6))
return 0!0
E*&"#
E*&"#
RETDR* 0t0
ELSE
RETDR* 0!0
E*&"#
Copiar al portapapeles
c%alorMemoLtuta9la.cam#o
Pcli#te't L c%alormemo
Copiar@ cortar y pe!ar
No se si te sira6 #ero #od<s usar Pcli#te't #ara co#$/cut/#aste6 #or ejem#lo si tenes dos te't9o'es 4strin*56 t1 $ t2 #or ejem#lo
#odes :acer:
Pcli#te'tLt1.alue UU Co#$ de todo
t1.alueLWW UU Cut lue*o del co#$
Pcli#te'tLt1.selte't UU Co#$ del te'to seleccionado
t1.alueLstu224t1.alue6 t1.selstart6 t1.sellen*t:6 WW5 UU Cut lue*o del co#$
t2.alueLPcli#te't UU (aste
De9erias eri2icar al*unas condiciones6 como #or ejem#lo sellen*t:ZM6 etc.
>u*o
Conectar a Internet
loE'#lorer L CreateO9ject4=1nternetE'#lorer.?##lication=5
loE'#lorer.Nai*ate4=:tt#://NNN.midireccion.com=5
loE'#lorer.%isi9leL.,.
Dri*ers( $istar
(ara listar dries:
o&+O L CRE?,EO`AEC,4=+cri#tin*.&ile+$stemO9ject=5
&OR E?C> oDrie 1N o&+O.Dries
I oDrie.Drie-etter
END&OR
FF
./ de 99
?le' &eldstein F MC(
E,ecutar un sonido
Xo #on*o los 2ic:eros de sonido en una car#eta6 con 2ormato J?% $ en el c)di*o de un o9jeto #on*o lo si*uiente:
+E, `E-- ,O =NO.J?%=
II C>R4[5
+E, `E-- ,O
)
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H&UNC,1ON (la$Ja4lcJae&ile6ln(la$,$#e5
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H Ejecuta un arc:io .J?%
H U+O: P(la$Jae4Q?rc:PJ?%Z a6Q,i#oPEjecucionZb5
H ?rc:PJ?% L Ruta com#leta del arc:io .J?%
H ,i#oPEjecucion L 1 F Ejecuci)n en 9ac3*round 4de2ault5
H M F -a a#licaci)n es#era la ejecuci)n
H 2 F +i el arc:io no e'iste6 no ejecuta el de2ault
H 4 F ?#a*a el sonido 8ue se est" ejecutando
H . F Continuado
H RE,ORN?: .,. +i el sonido 2ue ejecutado
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
ln(la$,$#e L 11&4,X(E4=ln(la$,$#e=5L=N=6ln(la$,$#e615
DEC-?RE 1N,E!ER (la$+ound K
1N J1NMM.dll K
+,R1N! cJae6 K
1N,E!ER nModule6 K
1N,E!ER n,$#e
RE,URN 11&4(la$+ound4lcJae&ile6M6ln(la$,$#e5 L 16 .,.6 .&.5
END&UNC
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Encriptaci5n de cadenas
&UNC,1ON &nEncri#ta4,e'to5
H FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H Encri#ta un te'to
H U+O: &nEncri#ta4=,e'to a encri#tar=5
H RE,ORN?: ,e'to encri#tado
H FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-OC?- Clae6 ,e'toEnc6 j6 letra
clae L W5U>];%1REfSLI/ZQK:MNHFW
,e'toEnc L +(?CE4M5
CL1
&OR j L 1 ,O -EN4te'to5
letra L MOD4?+C4+U`+,R4te'to6j6155 S ?+C4+U`+,R4clae6C615562/T5
,e'toEnc L ,e'toEnc S C>R4letra5
CLCS1
1& CZL-EN4clae5
CL1
END1&
NEB,
RE,URN ,e'toEnc
&UNC,1ON &nDesencri#ta4,e'toEnc5
H FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H Desencri#ta un te'to
H U+O: &nDesencri#ta4=,e'to encri#tado=5
H RE,ORN?: ,e'to desencri#tado
H FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
local ,e'to6 c6 j6 clae
.T de 99
clae L W5U>];%1REfSLI/ZQK:MNHFW
,e'to L +(?CE4M5
CL1
&OR j L 1 ,O -EN4,e'toEnc5
letra L MOD442/TS?+C4+U`+,R4,e'toEnc6j61555 F ?+C4+U`+,R4clae6C61556 2/T5
CLCS1
1& CZL-EN4clae5
CL1
END1&
,e'to L ,e'to S C>R4letra5
NEB,
RE,URN ,e'to
En*iar un email por Outloo>
str(ro2ile L =nom9redeusuario#er2il=
str(assNord L =#assNord#er2il=
strReci#ient L =a8uienEdominio.com=
str+u9ject L =?sunto=
str`od$ L =Este es el mensaje...=
t:e?## L CreateO9ject4=Outloo3.?##lication=5
t:eName+#ace L t:e?##.!etName+#ace4=M?(1=5
t:eName+#ace.-o*on4str(ro2ile 6 str(assNord5
t:eMail1tem L t:e?##.Create1tem4M5
t:eMail1tem.Reci#ients.?dd4 strReci#ient 5
t:eMail1tem.+u9ject L str+u9ject
t:eMail1tem.`od$ L str`od$
t:eMail1tem.+end
t:eName+#ace.-o*o22
Fa)( En*io desde &F"
Jin2a' 2unciona mu$ 9ien. 4:tt#://NNN.delrina.com/5
-o #uedes manejar 2acilmente a tra<s de COM:
oJin&a' L CreateO9ject4=Jin&a'.+D7+end=5
oJin&a'.+et+u9ject4=,est &a'=5
oJin&a'.+etNum9er4=1234/T[=5
oJin&a'.+et?reaCode4=///=5
oJin&a'.+etCom#an$4=?l*una Com#aCGa=5
oJin&a'.?ddReci#ient45 UU re8uerido
oJin&a'.+et(rint&rom?##415
oJin&a'.?dd?ttac:ment&ile4==5 UU a8ui a arc:io si 8uieres
oJin&a'.+end415
+E, (R1N,ER ,O N?ME Nin2a'
RE(OR, &ORM M$Re#ort ,O (R1N, NOCON+O-E
+E, (R1N,ER ,O
RE-E?+E oJin&a'
>,>
FF
?le' &eldstein F MC( %isual &o'(ro
Formatear un dis>ette
SHFD9)A#A)IT29DEFAELT 8 B [[N ca5aci"a" "el "ri&e 5or "efalt
SHFD9)A#A)IT29+RB 8 + [[N +RBW:. 5ara Q.,Q" D=)
SHFD9)A#A)IT29P,B 8 Q [[N P,BW:. 5ara +.Q" D =(
SHFD9F6*0AT9`EI)W 8 B [[N formato rG5i"o
SHFD9F6*0AT9FELL 8 / [[N formato com5leto
.[ de 99
SHFD9F6*0AT9S2S67L2 8 , [[N co5ia solame!te los arc-i&os "el sistema (Solo 3i!UQ)
DE)LA*E I7TECE* SHFormatDri&e I7 "SHELL+,.DLL" I7TECE*. I7TECE*. I7TECE*. I7TECE*
-3!" 8 CetH$!"Form(THISF6*0)
iDri&e 8 B
IF -3!" _F B THE7
*eslta"o 8 SHFormatDri&e(-3!". iDri&e.SHFD9)A#A)IT29DEFAELT. SHFD9F6*0AT9`EI)W)
E7DIF
*8888888888888888888888888888888888888888888888888888888888
* Esta f!ciA! recibe !a refere!cia -acia el formlario y "e&el&e el H37D
* ($i!"o$ -a!"le) "e esta &e!ta!a o formlario.
*8888888888888888888888888888888888888888888888888888888888
F!ctio! CetH$!"Form
L#arameter toForm
Local lc)a5tio!
lc)a5tio! 8 toForm.)a5tio!
toForm.)a5tio! 8 Sys(+)
If !ot "F61T66LS" a E55er( Set("Library") )
Set Library to (Home()+"bFoxTools.Fll") A""iti&e
E!"if
Local l!H37D
l!H37D 8 93-ToH$!"( 93Fi!"Titl(toForm.)a5tio!) )
toForm.)a5tio! 8 m.lc)a5tio!
*etr! m.l!H37D
Formatear un dis>ette 89:
Mira este truco 8ue a#areci) en &o'(ress de Noiem9re de 2MMM
:tt#://NNN.2#ress.com/reista/NumMM11/dtruco.:tm
run/n rundll32.e'e s:ell32.dll6+>&ormatDrie
FF
-uis MarGa !ua$"n
,ucum"n F ?r*entina
Funci5n de consecuti*os
&UNC,1ON NUE%4tc?lias5
#u9lic ln1D
-OC?- lc?lias6 K
lcOldRe#rocess6 K
lnOld?rea
lnOld?rea L +E-EC,45
1& (?R?ME,ER+45 Q 1
lc?lias L U((ER4?-1?+455
E-+E
lc?lias L U((ER4tc?lias5
END1&
lcOldRe#rocess L +E,4WRE(ROCE++W5
HFF -oc3 until user #resses Esc
+E, RE(ROCE++ ,O ?U,OM?,1C
.. de 99
1& \U+ED4=cont=5
U+E nominas\cont 1N M
END1&
+E-EC, cont
1& +EE74lc?lias6 =cont=6 =ta9le=5
1& R-OC745
ln1D L cont.ne'tid
RE(-?CE cont.ne'tid J1,> cont.ne'tid S 1
UN-OC7
END1&
END1&
+E-EC, 4lnOld?rea5
+E, RE(ROCE++ ,O lcOldRe#rocess
idin2Lln1D
RE,URN ln1D
END&UNC
Funci5n para 0uitar acentos
lc L =-uis MarGa !ua$"n6 ,ucum"n=
I C>R,R?N4lc6 ="<G)gjrsht=6 =aeiou?E1OU=5
Funciones matemticas
?un8ue $a %&( trae la 2unci)n +,D45 #ara re*istros de una ta9la6 se #ueden a#roec:ar las 2unciones de E'cel 48ue son muc:as5
desde %&(. 4O9io 8ue de9es tener instalado E'cel en la (C5.
(ara el caso de la Desiaci)n Est"ndar:
loE'cel L CRE?,EO`AEC,4=E'cel.?##lication=5
ln L loE'cel.Jor3s:eet&unction.+,De42362T63363262263M5
ME++?!E`OB4,R?N+&ORM4ln56M6 =Desiaci)n Est"ndar=5
RE-E?+E loE'cel
Es una o#ci)n mas6 8ue en este caso no sea lo )#timo6 #ero en otras 2unciones de E'cel sG.
FF
-uis MarGa !ua$"n
,ucum"n F ?r*entina
Marcador tele5nico
(uedes :acerlo con mscomm 4El oc'5 lo insertas en un 2ormulario6 donde ten*as tam9ien una caja de te'to #ara in*resar el
numero6 des#ues en el #rocedimiento donde 8uieras 8ue se realice el marcado inclu$es:
M+COMM.+E,,1N!+L=9.MM6N6.61=
M+COMM.COMM(OR,L1 4+u#on*o el modem conectado al com15
M+COMM.(OR,O(ENL.,.
M+COMM.OU,(U, L =?,D, =SNumeroSc:r4135
X listo6 el modem marcar el numero indicado
+aludos6 es#ero 8ue te sira
Emilio &ernande0
34mero de serie del disco
lo&+O L CRE?,EO`AEC,4=+cri#tin*.&ile+$stemO9ject=5
lc+erialNum9er L lo2so.dries4=c:=5.serialnum9er
o tam9i<n:
.9 de 99
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
&UNC,1ON !et%ol4l#Root5
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
H Nuestra in2ormaci)n del olumen
H U+O: !et%ol4=C:O=5
H (?R?ME,RO: l#Root L -etraDrie S =:O=
HFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-OC?- lnRet6 lc+trin*6 l#%olName6 K
n%ol+i0e6 l#%olNum9er6 K
l#Ma'Com#6 l#&la*s6 K
l#&+Name6 n&++i0e
1& EM(,X4l#Root5
l#Root L =c:O=
END1&
l#%olName L +(?CE42/T5
n%ol+i0e L 2/T
l#%olNum9er L M
l#Ma'Com# L 2/T
l#&la*s L M
l#&+Name L +(?CE42/T5
n&++i0e L 2/T
DEC-?RE 1N,E!ER !et%olume1n2ormation K
1N Jin32?(1 ?+ !et%ol1n2o K
+,R1N! El#Root6 K
+,R1N! El#%olName6 K
1N,E!ER n%ol+i0e6 K
1N,E!ER El#%olNum9er6 K
1N,E!ER El#Ma'Com#6 K
1N,E!ER El#&la*s6 K
+,R1N! El#&+Name6 K
1N,E!ER n&++i0e
lnRetL!et%ol1n2o4El#Root6 El#%olName6 K
n%ol+i0e6 El#%olNum9er6 K
El#Ma'Com#6 El#&la*s6 K
El#&+Name6 n&++i0e5
1& lnRet Z M
lc+trin* L =Drie name: = S K
?--,4l#Root5SC>R4135S K
=%ol name: = S K
-E&,4?--,4l#%olName56-EN4?--,4l#%olName55F15SC>R4135S K
=Ma' R/c:ars in ol name: = S K
?--,4+,R4n%ol+i0e55SC>R4135S K
=%ol +erial R: = S K
?--,4+,R4l#%olNum9er55SC>R4135S K
=Ma' R/c:ars in dir/2ile names: = S K
?--,4+,R4l#Ma'Com#55SC>R4135S K
=&ile +$s &la*s: = S K
?--,4+,R4l#&la*s55SC>R4135S K
=&ile +$s t$#e: = S K
-E&,4?--,4l#&+Name56-EN4?--,4l#&+Name55F15SC>R4135S K
=&ile +$s Name +i0e: = S K
?--,4+,R4n&++i0e55
E-+E
lc+trin* L =No se #udo er in2ormaci)n=
END1&
LME++?!E`OB4lc+trin*6 =1n2ormaci)n del olumen=5
RE,URN ==
END&UNC
-eonardo %ela08ue0
9M de 99
34meros a letras
>ola %isual2o'#roeros.
?:G les mando una rutina sencilla #ara #asar ngmeros a letras :
NO,? : ?`R?N -? %EN,?N? ?- MjB1MO6 >?X -sNE?+ YUE ,ERM1N?N EN (UN,O X COM?
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
H
(ROCEDURE N,O-
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
H
(?R?ME,ER+ M1PNUMERO
(U`-1C CPEN,ERO6 CPDEC1M?-
CPEN,EROLR1!>,44=MM=S?--,R1M4+,R41N,4M1PNUMERO555561N,444-EN4?--,R1M4+,R41N,
4M1PNUMERO5555S25/355H35
CPDEC1M?-LR1!>,4=MM=S?--,R1M4+,R44M1PNUMEROF1N,4M1PNUMERO55H1MM55635
(U`-1C D1MEN+1ON CEN,EN?4161M56 DECEN?4161M56 UN1D?D4161/5
UN1D?D415L= UN=
UN1D?D425L= DO+=
UN1D?D435L= ,RE+=
UN1D?D445L= CU?,RO=
UN1D?D4/5L= C1NCO=
UN1D?D4T5L= +E1+=
UN1D?D4[5L= +1E,E=
UN1D?D4.5L= OC>O=
UN1D?D495L= NUE%E=
UN1D?D4115L= ONCE=
UN1D?D4125L= DOCE=
UN1D?D4135L= ,RECE=
UN1D?D4145L= C?,ORCE=
UN1D?D41/5L= YU1NCE=
DECEN?415L= D1E@=
DECEN?425L= %E1N,E=
DECEN?435L= ,RE1N,?=
DECEN?445L= CU?REN,?=
DECEN?4/5L= C1NCUEN,?=
DECEN?4T5L= +E+EN,?=
DECEN?4[5L= +E,EN,?=
DECEN?4.5L= OC>EN,?=
DECEN?495L= NO%EN,?=
CEN,EN?415L= C1EN,O=
CEN,EN?425L= DO+C1EN,O+=
CEN,EN?435L= ,RE+C1EN,O+=
CEN,EN?445L= CU?,ROC1EN,O+=
CEN,EN?4/5L= YU1N1EN,O+=
CEN,EN?4T5L= +E1+C1EN,O+=
CEN,EN?4[5L= +E,EC1EN,O+=
CEN,EN?4.5L= OC>OC>1EN,O+=
CEN,EN?495L= NO%EC1EN,O+=
+,ORE == ,O UN1D?D41M56DECEN?41M56CEN,EN?41M5
RCL11&4%?-4CPEN,ERO5LM6=CERO=6==5
&OR i2L1 ,O 11&4%?-4CPDEC1M?-5ZM62615
%?-ORPNL11&4i2L16CPEN,ERO6CPDEC1M?-5
&OR i1L1 ,O -EN4%?-ORPN5 +,E( 3
&NL+U`+,R4%?-ORPN6i1635
RCLRCS11&4%?-4&N5L1MM6= C1EN=6K
CEN,EN?411&4%?-4-E&,4&N6155LM61M6%?-4-E&,4&N6155555SK
11&4%?-4R1!>,4&N6255Z1M .?ND. %?-4R1!>,4&N6255Q1T6K
UN1D?D4%?-4R1!>,4&N625556DECEN?411&4%?-4+U`+,R4&N626155LM61M6%?-4+U`+,R4&N62
91 de 99
615555SK
11&4%?-4+U`+,R4&N626155QZM .?ND. %?-4+U`+,R4&N636155QZM6= X=6==5SK
UN1D?D411&4%?-4+U`+,R4&N636155LM61M6%?-4+U`+,R4&N636155555SK
11&44-EN4%?-ORPN5LT .?ND. i1L15 .OR. 4-EN4%?-ORPN5L9 .?ND. i1L4 .?ND.
%?-4&N5QZM5 .OR.K
4-EN4%?-ORPN5L12 .?ND. i1L15.OR.K
4-EN4%?-ORPN5L12 .?ND. i1L[ .?ND. %?-4+U`+,R4%?-ORPN6[6355QZM56=
M1-=6==5SK
11&44-EN4%?-ORPN5L9 .?ND. i1L15.OR. 4-EN4%?-ORPN5L12 .?ND. i1L456K
11&4%?-4-E&,4%?-ORPN6355L1611&4-EN4%?-ORPN5L126= M1--ONE+=6= M1--hN=56=
M1--ONE+=56==5
END&OR
RCLRCS11&4i2L16= (E+O+=S11&4%?-4CPDEC1M?-5ZM6= CON=6= M/-=56= CEN,?%O+
M/-=5
END&OR
RE,URN RC
34meros a letras 89:
DE%O-%ER UN NUMERO EN -E,R?+
Dada la cantidad de consultas 8ue :e reci9ido #or el tema de re2erencia6
mando la
rutina 8ue lo resule6 a#lica9le a C-1((ER6 &o'(ro $ %isual&o'(ro #ara 8ue
la
#u9li8ues en la JE`.
(R1MERO C?R!?+ E- NUMERO EN UN? %?R1?`-E 4Ej. NUMERO%5 X ?(-1C?+
EN E- .(R! -? +1!U1EN,E RU,1N?.
EN,ERO%L1N,4NUMERO%5
N L ==
N1 L =UNO=
N2 L =DO+=
N3 L =,RE+=
N4 L =CU?,RO=
N/ L =C1NCO=
NT L =+E1+=
N[ L =+1E,E=
N. L =OC>O=
N9 L =NUE%E=
N1M L =D1E@=
N11 L =ONCE=
N12 L =DOCE=
N13 L =,RECE=
N14 L =C?,ORCE=
N1/ L =YU1NCE=
N1T L =D1EC1+E1+=
N1[ L =D1EC1+1E,E=
N1. L =D1EC1OC>O=
N19 L =D1EC1NUE%E=
N2M L =%E1N,E=
N3M L =,RE1N,?=
N4M L =CU?REN,?=
N/M L =C1NCUEN,?=
NTM L =+E+EN,?=
N[M L =+E,EN,?=
N.M L =OC>EN,?=
N9M L =NO%EN,?=
1& EN,ERO% QZ 1MM
92 de 99
N1MM L =C1EN,O=
END1&
1& EN,ERO% L 1MM
N1MML=C1EN=
END1&
N2MM L =DO+C1EN,O+=
N3MM L =,RE+C1EN,O+=
N4MM L =CU?,ROC1EN,O+=
N/MM L =YU1N1EN,O+=
NTMM L =+E1+C1EN,O+=
N[MM L =+E,EC1EN,O+=
N.MM L =OC>OC1EN,O+=
N9MM L =NO%EC1EN,O+=
CON,?DOR L 1
1N1C1O L 1
C?DEN? L +,R4EN,ERO%695
NUM( L = =
DO J>1-E CON,?DOR Q 4
+U`C?DEN? L +U`+,R4C?DEN?61N1C1O635
CEN,EN? L +U`+,R4+U`C?DEN?61615S=MM=
DECEN? L +U`+,R4+U`C?DEN?62625
UN1D?D L +U`+,R4+U`C?DEN?63615
1& %?-4+U`C?DEN?5 Z 99
NUM( L NUM( S NUCEN,EN? S = =
END1& 4+U`C?DEN? Z 995
, L %?-4DECEN?5
1& , Z M
DO C?+E
C?+E 41N,4,/1M.M5 L ,/1M.M5 .OR. 4, Z 9 .?ND. , Q2M5
NUM( L NUM( S NUDECEN?
C?+E , Z 9 .?ND. 41N,4,/1M.M5 R ,/1M.M5
DECEN? L +U`+,R4DECEN?61615 S =M=
1& DECEN? R =2M=
NUM( L NUM( S NUDECEN? S = X = S NUUN1D?D
E-+E
NUM( L NUM( S =%EN,1= SNUUN1D?D
END1&
C?+E , Q 1M
NUM( L NUM( S NUUN1D?D
ENDC?+E
END1& 4, Z M5
1& EN,ERO% Z 999999 .?ND. CON,?DOR L 1
NUM( L NUM( S = M1--ONE+ =
END1&
1& NUM( L = UNO M1--ONE+ =
NUM( L = UN M1--ON =
END1&
1& EN,ERO% Z 999 .?ND. CON,?DOR L 2 .?ND. %?-4+U`C?DEN?5 Z M
NUM( L NUM( S = M1- =
END1&
1& NUM( L = UNO M1- =
NUM( L = UN M1- =
END1&
1N1C1O L CON,?DOR H 3 S 1
CON,?DOR L CON,?DOR S 1
ENDDO
CEN,?% L 4,>1+&ORM.%?`O.%?-UE F 1N,4,>1+&ORM.%?`O.%?-UE55
CEN,?% L ROUND44CEN,?%H1MM56M5
CEN,?% L 1N,4CEN,?%5
CEN,?% L +,R4CEN,?%625
CEN,?% L +,R,R?N4CEN,?%6= =6=M=5
NUM( L =(esos= S NUM( S = con = S CEN,?% S =/1MM=
EN -? %?R1?`-E NUM( ,E YUED? EN -E,R?+ CON -O+ CEN,?%O+6 DE
?CUERDO ?- ,1(O DE MONED? YUE U,1-1CE+ REEM(-?@?R =(esos= (OR HHHH
93 de 99
=D)lares=6 =&rancos=6 etc. X N?D? M?+.... ?+1 DE +ENC1--O
Auan Carlos Doorman !on0"le0
doormanEa9aconet.com.ar
Noato Qj2mar9auEteleline.esZ escri9i) en el mensaje de noticias
.j98/:;m3d;1Etalia.mad.ttd.net...
"asar un n4mero de color a ormato RGB
I==========================================================
I F?3CTIO3 Col;RGB8tnColor:
I==========================================================
I "asa un n4mero de color a ormato RGB
I ?SOA Col;RGB8X3ro6ColorT:
I RETOR3AA Caracter RGB8nR@ nG@ nB:
I A?TORA $MG
I==========================================================
F?3CTIO3 Col;RGB8tnColor:
$OCA$ lcRGB@ ln
lcRGBJNRGB8N
FOR lnJ9 TO <
lcRGBJlcRGBMTRA38tnColorY;KG@NCCCN:MIIF8lnJ<@ NN@ N@N:
tnColorJI3T8tnColor+;KG:
E3DFOR
lcRGBJlcRGBMN:N
RET?R3 lcRGB
E3DF?3C
I==========================================================
FF
-uis MarGa !ua$"n
,ucum"n F ?r*entina
(ROCEDURE Color2R!`4nColor5
H
local nRed6n!reen6n`lue
n`lueLint4nColor / T//3T5
nColorLnColor F 4n`lue H T//3T5
n!reenLint4nColor / 2/T5
nColorLnColor F 4n!reen H 2/T5
nRedLnColor
return allt4str4nRed55S=6=Sallt4str4n!reen55S=6=Sallt4str4n`lue55
H
END(ROC
>,>
%ictor
"rototipos al *uelo
Ej:
Rde2ine CR-& c:r4135Sc:r41M5
cCodeL=1& mont:4date455L2= S CR-& S K
= messa*e9o'4W&e9reroW5 S CR-& S K
=END1&= S CR-&
strto2ile4cCode6=,E+,.(R!=5
com#ile test
do test
Esto se #uede :acer en tiem#o de ejecuci)n si tienes %&(T S +(3 o su#erior. En la a#licaci)n 8ue esto$ desarrollando no solo se
*eneran (R!Ws din"micamente6 sino incluso 2ormas $ clases\.
(or eso es 8ue di*o 8ue %` no es ni remotamente lo m"s indicado #ara :acer ese ti#o de a#licaci)n #ara #rototi#os.
FF
94 de 99
%ictor Es#ina
:tt#://NNN.mitrom#o.com/es#ina
Tama7o del disco
-a 2unci)n +X+42M2M5 te deuele el tamaCo total6 en 9$tes6 del disco #redeterminado.
&alidaci5n CIF
Con res#ecto al si*ni2icado de la #rimera letra6 nosotros no lo tenemos mu$ claro #ero sa9emos 8ue:
?F +ociedades ?nonimas
`F +ociedades limitadas
EF Comunidades de `ienes
&F +ociedades Coo#eratias
!F ?sociaciones6 Clu9es de#ortios.
>F Comunidades de %ecinos
(F Entidades -ocales 4Ej. ?$untamientos6 Auntas %ecinales5
YF?sociaciones Reli*iosas
+F Or*anismos o2iciales 4Ej. Ministerios5
X nosotros no sa9emos mas.
+i no entendeis al*o de la 2uncion no dudeis en #re*untar
cDi*itoContrtolL +U`+,R4=A?`CDE&!>1=6 O9tenerDCCi24(?D-4cNumero6 [6 =M=55 S
16 15
&UNC,1ON O9tenerDCCi245
(?R?ME,ER+ cC1&
-OC?l nConta6 nConta26 n,otal6 c%alor
H1niciamos las aria9les.
n,otal L M
HRecorremos el ngmero del C1&.
&OR nConta L 1 ,O [
HCom#ro9amos si estamos en una #osici)n #ar ...
1& MOD4nConta6 25 L M
H... #ara sumarle el ngmero.
n,otal L n,otal S %?-4+U`+,R4cC1&6 nConta6 155
H... o im#ar #ara sumarle la suma de los dG*itos del ngmero 8ue :a sido
multi#licado #or 2.
E-+E
c%alor L ?--,R1M4+,R4%?-4+U`+,R4cC1&6 nConta6 155 H 255
&OR nConta2 L 1 ,O -EN4c%alor5
n,otal L n,otal S %?-4+U`+,R4c%alor6 nConta26 155
END&OR
END1&
END&OR
HDeolemos el ngmero de control.
RE,URN ROUND4%?-4R1!>,4+,R41M F %?-4R1!>,4+,R4n,otal56 15556 1556 M5
END&UNC
+aludos
Oscar &ern"nde0
!E+(RO +.?.
MadridFEs#aCa
?so de la coma como separador decimal
9/ de 99
+in nin*un #ro9lema interce#tas la tecla #unto en el 3e$#ress $ la cam9ias #or la coma6 mira:
7e$#ress del te'9o':
-(?R?ME,ER+ n7e$Code6 n+:i2t?ltCtrl
DODE&?U-,4n7e$Code6 n+:i2t?ltCtrl5
1& n7e$Code L 4T
NODE&?U-,
7EX`O?RD =6=
END1&
+aludos6
(a9lo Roca 4#rocaEclao.net5
-a CoruCa F Es#aCa
1CY /M3/..[
+$so# del (ortal !ratuito de %isual&o'(ro en Es#aCol
:tt#://cli3.to/isual2o'
&istas y Consultas
Consultas( E,ecuci5n
lcCadena L =+E-EC, H &ROM Mi,a9la =
UlcCadena
3i*el de optimi1aci5n de consultas
Usando s$s43M/46 aMb a1b a11b5 #odr"s er el niel de o#timi0aci)n de tus consultas.
FF
+aludos6
FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Carlos Xo:n @u9iria
?.!.(.
"oder hacer un SEEB o I3DE-SEEB a cual0uier *ista
En las istas con modo de almacenamiento en 9u2er a ta9la 4es decir 4 o /56 no se
les #uede crear un indice6 $ #or tanto no se #uede :acer +EE7 o 1NDEB+EE7 en ellas.
(ara resoler esto se :a reeali0ado la sisuiente rutina:
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
H
H &uncion: 1NDEB%1+,?
H
H 1nde'a cual8uier ti#o de ista
H
H (arametros:
H
H tcista F Nom9re de la ista
H tce'#r F e'#resion com#leta #ara inde'ar
H tcta* F nom9re del indice 4ta*5
H
H Ejem#los:
H
H retLinde'ieN4=lPalelin=6=allartS+,R4mo635=6=allart=5
H
H Retorno
H
H deuele erdadero/2also si se #udo crear el indice
H
H Nota
H
9T de 99
H -a ista de9e estar a9ierta
H
H Ultima Modi2icacion: M//M4/2MMM (a9lo Roca
H Creacion : M//M4/2MMM (a9lo Roca
H
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
&UNC,1ON inde'ista 4tcista6 tce'#r6 tcta*5
-OC?- lcOld`u2erin*6 llret6 lcalias
1& (COUN,45L3
lcalias L ?-1?+45
+E-EC, 4tcista5
lcOld`u2erin*LCUR+OR!E,(RO(4=`u22erin*=5
llretLCUR+OR+E,(RO(4=`u22erin*=635
1& llret
1NDEB ON Utce'#r ,?! 4tcta*5
+E, ORDER ,O
llretLCUR+OR+E,(RO(4=`u22erin*=6lcOld`u2erin*5
END1&
1& \EM(,X4lcalias5
+E-EC, 4lcalias5
E-+E
+E-EC, M
END1&
E-+E
llret L .&.
END1&
RE,URN llret
END&UNC
Ejem#lo de uso:
retLinde'ista4=lPalelin=6=allartS+,R4mo635=6=allart=5
Con esto #odremos reali0ar cual8uier +EE7 4mejor +EE745 5 o 1NDEB+EE7 so9re la ista
&elocidad del select
(ues si6 en la lista los inclu$o todos6 #ero lo encuentro l)*ico6 $a 8ue asi no tiene 8ue traducir el asterisco #or la estructura de la
ta9la6 si no 8ue le dices e'actamente lo 8ue 8uieres.
En la #rue9a inclui todos los cam#os.
-a di2erencia de los tiem#os ronda so9re el minuto.
Es mas ra#ido :
+E-EC, cam#o16 cam#o26 cam#o36... &ROM ta9la1
Yue :
+E-EC, H &ROM ta9la1
Es cierto6 la #rue9a se :a :ec:o con una ta9la con un millon de re*istros con 1ndice Unico.
?lejo ?lmela !on0ale0
aalmelaEcirculolectores.com
Circulo de -ectores +.?
&istas( Como cam%iar el criterio
El otro dGa se me #lante) la necesidad car*ar una ista con una condici)n 8ue #uede ser aria9le.
(rimero #ens< en *enerar una ista en tiem#o de ejecuci)n. (ero des#u<s me di cuenta 8ue en realidad lo gnico 8ue cam9ia en la
sentencia es la #arte del N:ere6 #or lo 8ue se #uede tener de2inida una ista con la si*uiente sentencia +Y-:
select H 2rom ,a9la N:ere UcCondicion
Entonces antes de :acer el Re8uer$ de la ista se car*a cCondicion con la condici)n $ listo6 2unciona. No es necesario estar
rede2iniendo istas $ tocar el D`C. -a ista es siem#re la misma.
9[ de 99
El gnico #ro9lema con este m<todo es 8ue la ista se de9e de2inir #or c)di*o es decir con:
create s8l ieN %ista as select H 2rom ,a9le N:ere UcCondicion
#or8ue con el *enerador no se #uede #oner esa condici)n6 $ si la intentas a9rir da un error de sinta'is.
Es#ero 8ue te sira.
+aludos
Marcos Aerouc:almi
Monteideo6 Uru*ua$
&istas( Como cam%iar el ormato de campos
Usted #uede utili0ar D`+E,(RO( #ara ase*urarse de 8ue los datos #ulsan o el 2ormato es c)mo usted lo desea:
D`+et(ro#4Wista.cam#oW6W&ieldW6WData,$#<6 = N49625 =5
$/o
D`+et(ro#4Wista.cam#oW6W&ieldW6W&ormatW6 = 999.999699 =5
FF
Ao:n 7o0iol
MC+D6 Microso2t M%( &o'(ro
&istas actuali1a%les
marcar un cam#o clae:
d9set#ro#4=miista.micam#o=6 =2ield=6 =3e$2ield=6 .t.5
marco los cam#os a actuali0ar
d9set#ro#4=miista.micam#o=6 =2ield=6 =u#data9le=6 .t.5
FF
+aludos6
FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Carlos Xo:n @u9iria
?.!.(.
&istas parametri1adas en una cuadr'cula
1D ?rtGculo:
&ec:a de Creaci)n:
&ec:a de Reisi)n:
E1M11/
22FnoF199T
19F?(RF199[
-a in2ormaci)n en este artGculo se re2iere a:
FMicroso2t &o'(ro6 ersi)n 3.M
RE+UMEN
Este artGculo in2orma de c)mo actuali0ar una CuadrGcula usando una ista #arametri0ada.
Mj+ 1N&ORM?C1hN
Una situaci)n 8ue #uede darse es 8ue los datos mostrados #or una CuadrGcula necesiten cam9iar en 9ase a una acci)n del usuario6
como #or ejem#lo la selecci)n de un cliente nueo en un Cuadro com9inado6 de manera 8ue6 de#endiendo del cliente
seleccionado en el Cuadro com9inado6 la CuadrGcula muestre solo los re*istros corres#ondientes a ese cliente.
En este caso se #uede utili0ar una %ista #arametri0ada #ara #ro#orcionar los re*istros 8ue de9e mostrar la CuadrGcula. Cuando se
seleccione un nueo cliente en el Cuadro com9inado6 se esta9lece el #ar"metro al nueo alor del Cuadro6 $ usando la 2unci)n
REYUERX45 se actuali0a la %ista $ re2resca la CuadrGcula.
1. Cree un #ro$ecto nueo $ a*re*ue la 9ase de datos ,estData del
directorio %&(O+?M(-E+OD?,?.
2. Cree una nuea ista usando la ta9la Orders e inclu$endo todos
los cam#os.
9. de 99
3. En la 2ic:a +elecci)n6 introdu0ca ORDER+.CU+,P1D en Nom9re de
cam#o $ It:ecust en Ejem#lo.
4. Cierre la ista con el nom9re (?RM!R1D.
/. Cree un nueo &ormulario en el #ro$ecto.
T. ?*re*ue Customer6 Orders $ la ista (arm*rid al Entorno de datos
del &ormulario.
[. ?9ra la entana (ro#iedades del Entorno de datos e inclu$a en el
eento `e2oreO#en,a9les del Dataenironment el si*uiente c)di*o:
(U`-1C t:ecust
t:ecust L =?-&71=
.. Cierre el Entorno de datos.
9. ?*re*ue un Cuadro com9inado al &ormulario $ esta9le0ca las
si*uientes #ro#iedades :
RoN+ource L Customer.CustPid
RoN+ource,$#e L T F Cam#os
%alue L 1
1M. ?Cada el si*uiente c)di*o al eento 1nteractieC:an*e del
Cuadro com9inado:
t:ecust L ,>1+.Dis#la$%alue
LREYUERX4=#arm*rid=5
,>1+&ORM.Re2res:
11. ?Cada una CuadrGcula al 2ormulario $ esta9le0ca las si*uientes
#ro#iedades:
Record+ource L #arm*rid
Record+ource,$#e L 1F?lias
12. !uarde el 2ormulario $ ejecgtelo.
&istas parametri1adas 0ue conten!an el contenido de un campo
-a idea es 8ue me muestre los re*istos cu$o cam#o nom9re contiene la cadena 8ue est" en lcNom.
IlcNom L =M?R1?=
REYUERX4=Mi%ista=5
en donde Mi%ista se crea con:
CRE?,E +Y- %1EJ Mi%ista K
REMO,E CONNEC, MiConeccion K
+E-EC, H &ROM d9o.(ersonal (ersonal K
J>ERE (ersonal.Nom9re -17E W]WSIlcNomSW]W
99 de 99

Вам также может понравиться