Una actividad casi fundamental de las aplicaciones de Base de Datos es hacer respaldos de la información, una de las opciones más viables es dejarlos en formato .ZIP, hay varias maneras de poder hacerlo, aquí te presentamos como...
Para poder crear archivos .ZIP, lo que te recomendaría es utilizar una DLL o ActiveX, aquí te comento sobre varias gratuitas, cada una de ellas tiene su propia documentación.
--- EEVA ZIPMASTER---
http://www.eetasoft.ee/zipmaster.htm
--- SAWZipNG ---
http://users.skynet.be/saw/
Si no te hace falta comprimir con contraseñas, este te puede valer
http://www.xstandard.com/download/x-zip.zip
La documentación:
http://www.xstandard.com/page.asp?p=C9891D8A-5390-44ED-BC60-2267ED6763A7
--- Zip it ---
http://www.ketoan-fas.com/download/zipit.zip
--- Artículo "Comprime/Descomprime ZIPs" de FoxPress ---
http://www.fpress.com/revista/Num1103/Truco.htm
--- ZBit zip-unzip component lite --- [Agregado 29/Marzo/2004]
http://www.zbitinc.com/product.asp?prodid=2
Pero si quieres algo mas profesional puedes optar por las opciones de pago, con esto, se incluyen más métodos, mejores interfaces y claro, el soporte del fabricante:
--- Xceed ZipLibray ---
http://www.xceedsoft.com/products/ZipCompL/
o
--- DynaZip ---
http://www.dynazip.com
Tambien existe uno mas, el compañero E. Paredes lo recomienda:
--- Abale ZIP component ---
http://www.abale.com
Todas las anteriores opciones han sido probadas por la comunidad de Visual FoxPro, es decir, si funcionan con la herramienta, y han sido recopiladas de los mensajes que se mandan al newsgroup de microsoft: microsoft.public.es.vfoxpro.* , así como también un servidor las ha comprobado.
Espero te sirva.
------------------------------------
Espartaco Palma Martínez
27 de febrero de 2004
23 de febrero de 2004
Días hábiles entre 2 fechas
Función para determinar días hábiles en un periodo de fechas, no cuenta los sábados ni domingos ni días festivos entre semana.
Tiene una tabla para capturar los días festivos, si no captura información en esta tabla la función tendrá un error de calculo por tal razón hay que tener esta tabla con datos correctos y actuales y tener un campo índice principal de fecha.
Emmanuel Nuñez Sanchez
Tiene una tabla para capturar los días festivos, si no captura información en esta tabla la función tendrá un error de calculo por tal razón hay que tener esta tabla con datos correctos y actuales y tener un campo índice principal de fecha.
FUNCTION diashab(fecha1,fecha2) LOCAL num AS INTEGER * validando entrada de fechas IF (!EMPTY(EVALUATE('fecha1'))) AND (!EMPTY(EVALUATE('fecha2'))) * validando fechas IF fecha1 < fecha2 * numero de dias habilies num=0 * dias entre 2 fechas dias=(fecha2-fecha1)+1 * para sumar un dia a la fecha inicial feccom=fecha1 * habre la tabla con las fechas de dias festivos (libres) IF !USED('diainabil') rut_nom=LOCFILE('diainabil','dbf') USE &rut_nom ALIAS diainabil IN 0 ORDER fechaini ENDIF SELECT diainabil * contando los dias habiles FOR i=1 TO dias * contando sin incluir a sabados y domingos IF !INLIST(DOW(feccom),1,7) num=num+1 ENDIF * restando las fechas de dias libres entre semana. IF SEEK(feccom) AND INLIST(DOW(feccom),2,3,4,5,6) num=num-1 ENDIF *incrementa la fecha feccom=feccom+1 ENDFOR * retorna el numero de dias habiles entre esas fechas USE IN diainabil RETURN num ELSE * eror en fecha RETURN .F. ENDIF ELSE * error en tipo de datos RETURN .F. ENDIF ENDFUNC
Emmanuel Nuñez Sanchez
18 de febrero de 2004
Archivos runtime de VFP
Enlace a la página de FoxProWiki con el listado de los archivos runtimes necesarios para correr un ejecutable de VFP.
Para VFP9:
http://fox.wikis.com/wc.dll?Wiki~VFP9RuntimeFiles
Para VFP8:
http://fox.wikis.com/wc.dll?Wiki~VFP8RuntimeFiles
Para VFP7:
http://fox.wikis.com/wc.dll?Wiki~VFP7RuntimeFiles
Para VFP9:
http://fox.wikis.com/wc.dll?Wiki~VFP9RuntimeFiles
Para VFP8:
http://fox.wikis.com/wc.dll?Wiki~VFP8RuntimeFiles
Para VFP7:
http://fox.wikis.com/wc.dll?Wiki~VFP7RuntimeFiles
6 de febrero de 2004
Ejecuto un EXE de VFP y finaliza instantáneamente
¿Quién no ha leído preguntas de este tipo alguna vez en el grupo de noticias?: "...cuando lo ejecuto se abre y cierra el programa y no da ningún tipo de error..." o "...funciona bien en el entorno de programación, pero al hacerlo ejecutable abre y cierra..." o "...al hacer doble clic sobre el ejecutable se cierra el programa automaticamente..." son frecuentes en distintos foros de Visual FoxPro.
Esto ocurre porque en nuestro programa principal debemos añadir un bucle de eventos para esperar los eventos del usuario, tales como un click de ratón o la pulsación de una tecla.
Un bucle de eventos comienza con un comando READ EVENTS y finaliza con un comando CLEAR EVENTS que retorna el control al programa que inició el bucle de eventos.
Si no incluimos en nuestro programa principal un comando READ EVENTS, el programa se ejecutará correctamente desde la ventana comandos de Visual FoxPro, pero cuando ejecutamos la aplicación desde el archivo EXE generado, esta aparecerá durante unos instantes y finalizará.
Una estructura de un programa principal deberia disponer los siguientes puntos:
El código de un programa principal siguiendo los pasos anteriores seria:
Recordar que el menú (en su opción Salir) o el formulario principal (en el botón Salir o en el método Destroy) deben incluir el comando CLEAR EVENTS para finalizar el bucle de eventos. Al ejecutar CLEAR EVENTS la ejecución del programa continúa en la línea siguiente al comando READ EVENTS.
Un breve ejemplo
El siguiente ejemplo es un programa que:
Ejecutamos el archivo EJEMPLO.EXE que generamos con el código arriba descrito y comprobamos que el bucle de eventos queda esperando los eventos del usuario (en este caso el evento "Click" en el formulario).
Hasta la próxima,
Luis María
Esto ocurre porque en nuestro programa principal debemos añadir un bucle de eventos para esperar los eventos del usuario, tales como un click de ratón o la pulsación de una tecla.
Un bucle de eventos comienza con un comando READ EVENTS y finaliza con un comando CLEAR EVENTS que retorna el control al programa que inició el bucle de eventos.
Si no incluimos en nuestro programa principal un comando READ EVENTS, el programa se ejecutará correctamente desde la ventana comandos de Visual FoxPro, pero cuando ejecutamos la aplicación desde el archivo EXE generado, esta aparecerá durante unos instantes y finalizará.
Una estructura de un programa principal deberia disponer los siguientes puntos:
- Establecer las configuraciones iniciales, inicializar variables, abrir bases de datos, etc.
- Establecer la interface inicial ejecutando un menú o un formulario.
- Establecer un bucle de eventos ejecutando el comando READ EVENTS.
- Establecer la finalización del bucle de eventos desde la opción Salir del menú o el botón Salir del formulario con el comando CLEAR EVENTS.
- Terminar el programa cerrando las bases de datos, liberando variables, etc.
El código de un programa principal siguiendo los pasos anteriores seria:
*----------------- *-- Principal.prg *----------------- *-- Configuraciones iniciales DO Inicio.prg *-- Mostrar la interface inicial DO MenuPrincipal.MPR && Menú principal *- ó DO FORM FormPrincipal && Formulario principal *-- Iniciar el bucle de eventos READ EVENTS *-- Terminar el programa DO Termina.prg
Recordar que el menú (en su opción Salir) o el formulario principal (en el botón Salir o en el método Destroy) deben incluir el comando CLEAR EVENTS para finalizar el bucle de eventos. Al ejecutar CLEAR EVENTS la ejecución del programa continúa en la línea siguiente al comando READ EVENTS.
Un breve ejemplo
El siguiente ejemplo es un programa que:
- Genera el archivo EJEMPLO.PRG que muestra un formulario principal como formulario de nivel superior e inicia un bucle de eventos. La finalización del bucle de eventos está alojada en el método Destroy del formulario.
- Crea y construye el proyecto EJEMPLO.PJX estableciendo como principal a EJEMPLO.PRG.
- Crea y genera el archivo ejecutable EJEMPLO.EXE a partir del proyecto EJEMPLO.PJX.
LOCAL lc SET SAFETY OFF TEXT TO lc NOSHOW *-- Inicio del programa Ejemplo.prg LOCAL loForm AS FORM _SCREEN.VISIBLE = .F. loForm = CREATEOBJECT('FormPrincipal') loForm.SHOW MESSAGEBOX("Se iniciará el bucle de eventos",64, "READ EVENTS") READ EVENTS MESSAGEBOX("Terminó el bucle de eventos",64, "CLEAR EVENTS") _SCREEN.VISIBLE = .T. RETURN DEFINE CLASS FormPrincipal AS FORM CAPTION = "Ejemplo de un bucle de eventos" SHOWWINDOW = 2 AUTOCENTER = .T. HEIGHT = 480 WIDTH = 640 ADD OBJECT cmdSalir AS COMMANDBUTTON WITH ; CAPTION = "Salir", ; HEIGHT = 40, WIDTH = 100, ; TOP = 400, LEFT = 500 PROCEDURE cmdSalir.CLICK RELEASE THISFORM ENDPROC PROCEDURE DESTROY CLEAR EVENTS ENDPROC PROCEDURE CLICK WAIT WINDOWS "Evento click en el formulario" NOWAIT ENDPROC ENDDEFINE *-- Fin de Ejemplo.prg ENDTEXT *-- Genero el PRG, PJX y EXE STRTOFILE(lc,"Ejemplo.prg") BUILD PROJECT Ejemplo.pjx FROM Ejemplo.prg BUILD EXE Ejemplo.EXE FROM Ejemplo.pjx MESSAGEBOX("Ahora ejecute el archivo EJEMPLO.EXE generado.",64,"Aviso")
Ejecutamos el archivo EJEMPLO.EXE que generamos con el código arriba descrito y comprobamos que el bucle de eventos queda esperando los eventos del usuario (en este caso el evento "Click" en el formulario).
Hasta la próxima,
Luis María
4 de febrero de 2004
Generar archivos .RAR desde linea de comandos con RAR32 para DOS
A veces no queremos que nuestros usuarios tengan instalado el WinRar o el WinZip y entonces decide escribir la presente rutina.
Agregando /N7 permite poner inactiva y minimizada la ventana dos para saber cuando termina el proceso uso findwindow explicada en hilos anteriores y pregunto si existe el caption del form c:\midirectorioxls\rar32.exe que es el que vfp en este caso.
El rar32.exe, emx.exe y rsx.exe deben estar en la carpeta donde estan los datos, por eso ademas cambio en set dafault a dicha carpeta y luego recupero el que corresponde ya que sino no encuentra dichos archivos, otra opcion es ponerlos en el root o en windowssystem.
El rar32.exe lo pueden bajar desde www.rarlab.com
Espero le sirva.
Hernan Perez Tonini
local qrar qrar="rar32.exe a c:\midirectorioxls\miarchivo.rar *.xls" set defa to c:\midirectorioxls run/N7 &qrar messagebox("Compactar el archivo en formato rar",48) wait windows "compactando datos en archivo rar" nowait noclear do while (FindWindow (0, "c:midirectorioxlsrar32.exe") > 0) enddo clear WINDOWS set defa to c:\mydefaultDetalles:
Agregando /N7 permite poner inactiva y minimizada la ventana dos para saber cuando termina el proceso uso findwindow explicada en hilos anteriores y pregunto si existe el caption del form c:\midirectorioxls\rar32.exe que es el que vfp en este caso.
El rar32.exe, emx.exe y rsx.exe deben estar en la carpeta donde estan los datos, por eso ademas cambio en set dafault a dicha carpeta y luego recupero el que corresponde ya que sino no encuentra dichos archivos, otra opcion es ponerlos en el root o en windowssystem.
El rar32.exe lo pueden bajar desde www.rarlab.com
Espero le sirva.
Hernan Perez Tonini
2 de febrero de 2004
Comentarios en nuestros programas
Agregue comentarios en sus programas para aumentar la legibilidad del código.
Una buena práctica de programación es comentar el código de nuestros programas. Esto nos ayudará a una mejor comprensión de código escrito en el pasado y mas aun si el código es compartido por un equipo de desarrollo de varias personas.
En Visual FoxPro existen varias formas de comentar nuestro código.
Quizás la forma mas conocida es iniciar una línea con el caracter " * " (asterisco) que nos indica el comienzo de una línea de comentarios no ejecutable en nuestro archivo de programa.
Ejemplo:
Ejemplo:
Ejemplo:
Todas estas formas admiten el " ; " (punto y coma) al final de la línea de comentarios, que indica que el comentario continua en la linea siguiente
Ejemplo:
A partir de VFP8 tenemos la Caja de Herramientas (Toolbox) que nos permite tener plantillas de fragmentos de textos (text scrap) para añadir a nuestros programas con solo arrastrar y soltar (drag & drop). Por ejemplo podemos tener el siguiente fragmento de texto en el Toolbox para comenzar nuestros procemientos o funciones:
Luis María Guayán
Una buena práctica de programación es comentar el código de nuestros programas. Esto nos ayudará a una mejor comprensión de código escrito en el pasado y mas aun si el código es compartido por un equipo de desarrollo de varias personas.
En Visual FoxPro existen varias formas de comentar nuestro código.
Quizás la forma mas conocida es iniciar una línea con el caracter " * " (asterisco) que nos indica el comienzo de una línea de comentarios no ejecutable en nuestro archivo de programa.
Ejemplo:
* Esto es un comentario de nuestro códigoOtra forma similar es utilizar el comando " NOTE ", que también nos indica el comienzo de una línea de comentarios no ejecutable en nuestro código.
Ejemplo:
NOTE Esto es una línea de comentarioOtro comando que podemos utilizar para nuestros comentarios es " && "que indica que a continuación aparece un comentario en línea.
Ejemplo:
lnMes = 1 DO WHILE lnMes <= 12 && Ciclo de 12 meses lnMes = lnMes + 1 ENDDO && WHILE lnMes <= 12La inserción de comentarios en línea para indicar el final de los comandos de programación estructurados IF ... ENDIF, DO WHILE ... ENDDO, CASE ... ENDCASE y FOR ... ENDFOR mejora significativamente la legibilidad del código.
Todas estas formas admiten el " ; " (punto y coma) al final de la línea de comentarios, que indica que el comentario continua en la linea siguiente
Ejemplo:
* Esto es un comentario que abarca ; dos líneas NOTE Esto es una línea de comentarios que ; continua en la siguiente línea IF DAY(DATE()) = 1 && Si es el primer día del ; mes se ejecuta el siguiente código ? "Primer día del mes" ENDIF && DAY(DATE()) = 1Otra buena práctica de programación es colocar texto al inicio de nuestros programas o funciones con datos como: nombre, autor, fecha, descripción, etc.
A partir de VFP8 tenemos la Caja de Herramientas (Toolbox) que nos permite tener plantillas de fragmentos de textos (text scrap) para añadir a nuestros programas con solo arrastrar y soltar (drag & drop). Por ejemplo podemos tener el siguiente fragmento de texto en el Toolbox para comenzar nuestros procemientos o funciones:
*--------------------- * PROCEDURE / FUNCTION *--------------------- * Autor......: * Fecha......: <<DATE()>> * Descripción: * Uso........: * Parámetros.: * Retorno....: *---------------------Con solo arrastrar y soltar el fragmento de texto desde el Toolbox a nuestro archivo de programa, este aparecerá escrito. En el fragmento de texto podemos tener texto de funciones o expresiones rodeados por delimitadores de combinación de texto (Ej: <<DATE()>>) que se evaluarán si en las propiedades del fragmento de texto (text scrap) marcamos la casilla de verificación "Evaluar usando text merge".
Luis María Guayán
Suscribirse a:
Entradas
(
Atom
)