LOCAL lnVoces, lcVoz, ln, lc LOCAL loVoz AS "SAPI.SpVoice" m.loVoz = CREATEOBJECT("SAPI.SpVoice") m.lnVoces = m.loVoz.GetVoices().COUNT FOR m.ln = 1 TO m.lnVoces m.lcVoz = m.loVoz.GetVoices().ITEM(ln-1).GetDescription m.loVoz.Voice = m.loVoz.GetVoices().ITEM(ln-1) m.lc = "Voz número " + TRANSFORM(m.ln) + " de " + TRANSFORM(m.lnVoces) + ": " + m.lcVoz ? m.lc m.loVoz.Speak(m.lc) ENDFOR
24 de noviembre de 2013
Enumerar las voces instaladas en la PC
Con el siguiente código se pueden enumerar y escuchar las distintas voces instaladas en la PC a traves de la API de Microsoft Speech (SAPI).
4 de noviembre de 2013
Copias de seguridad de bases de datos MySQL / MariaDB con VFP
Autor: Antonio L. Montagut
www.ontarioxb.es
El tema de las copias de seguridad se ha comentado bastante, e incluso he visto varias soluciones muy funcionales creando archivos (.BAT). Y ejecutarlos a una hora determinada con el programador de tareas de Windows.
La solución que aquí voy a proponer, es el poder realizar las copias de seguridad bajo entorno de desarrollo de VFPx. Que nuestros ejecutables tengan esa posible opción de menú.
Para este propósito necesitamos dos archivos ejecutables que van a hacer posible este hecho:
Haremos que nuestro programa cree un archivo (.BAT), que se ejecute, e incluso vaya marcando el tiempo que dura la copia de seguridad. Para eso utilizaremos la técnica del switch con dos ficheros de texto que también crearemos nosotros a nuestra conveniencia. Serán los archivos NO.sw y Si.sw.
Daremos por sentado algunos parámetros:
- Primer paso: Eliminar los archivos de switch SI.sw y No.sw y crear el archivo NO.sw.
Creamos un archivo (.BAT), pasamos unos parámetros que podemos capturar de un formulario.
Lo lanzamos con el ShellExecute pero sin espera, eso quiere decir que nuestra aplicación VFPx se sigue ejecutando, pero la "encerramos" dentro de un DO ... ENDDO, donde cada segundo va marcando el tiempo transcurrido hasta que existe el archivo SI.sw , y provocamos la salida del bucle. Esto solo se va a producir cuando se llegue a la última orden del fichero (.BAT).
Quería utilizar el 7za.exe como compresor de copia, pero no admite recibir órdenes en "tubería |". Como si ocurre con el gzip.exe
Recomiendo encarecidamente leer tanto la ayuda del mysqldump.exe así como la ayuda del gzip.exe.
Así es como quedaría sustituyendo el WAIT WINDOW por un label en el _SCREEN:
Antonio L. Montagut
www.ontarioxb.es
El tema de las copias de seguridad se ha comentado bastante, e incluso he visto varias soluciones muy funcionales creando archivos (.BAT). Y ejecutarlos a una hora determinada con el programador de tareas de Windows.
La solución que aquí voy a proponer, es el poder realizar las copias de seguridad bajo entorno de desarrollo de VFPx. Que nuestros ejecutables tengan esa posible opción de menú.
Para este propósito necesitamos dos archivos ejecutables que van a hacer posible este hecho:
- mysqldump.exe Este ejecutable va incluido en la subcarpeta (bin) de la instalación de nuestro servidor de base de datos MySQL / MariaDB
- gzip.exe Un compresor tipo 7zip, winrar, que proviene del mundo Linux, pero que existe una versión para Windows y se puede descargar del siguiente link:http://gnuwin32.sourceforge.net/downlinks/gzip-bin-zip.php
Haremos que nuestro programa cree un archivo (.BAT), que se ejecute, e incluso vaya marcando el tiempo que dura la copia de seguridad. Para eso utilizaremos la técnica del switch con dos ficheros de texto que también crearemos nosotros a nuestra conveniencia. Serán los archivos NO.sw y Si.sw.
Daremos por sentado algunos parámetros:
- C:\ - Es la unidad donde tenemos instalada nuestra aplicación.
- C:\MIAPP - El directorio donde está instalada nuestra aplicación
- C:\MIAPP\MYSQL - El Directorio donde tenemos copiados los archivos: mysqldump.exe y gzip.exe
- Primer paso: Eliminar los archivos de switch SI.sw y No.sw y crear el archivo NO.sw.
DELETE FILE C:\MIAPP\SI.sw DELETE FILE C:\MIAPP\NO.sw STRTOFILE("000","C:\MIAPP\NO.sw")- Segundo Paso: Crear nuestro archivo (.BAT) con macro sustitución:
RELEASE chost, cuser,cpass, cport, cbasedat, cdirdest, cfiledest, ccadena LOCAL chost, cuser, cpass, cport, cbasedat, cdirdest, cfiledest LOCAL ccadena as MEMO chost="127.0.0.1" && local cuser="usuario" && Usuario de MySQL con los privilegios adecuados cpass="password" && Password del Usuario de MySQL. cport="3306" && Puerto por defecto del servidor MySQL cbasedat="mibd" && Nombre de la base de datos MySQL que vamos a realizar backup cdirdest="C:\DIRBKP\" && Directorio de destino del Backup cfiledest="BKP_"+DTOS(DATE()) && Nombre del archivo de destino TEXT TO ccadena TEXTMERGE NOSHOW C: CD\MIAPP\MYSQL mysqldump -h <<chost>> -u <<cuser>> –p<<cpass>> -P <<cport>> -F -f -B --order-by-primary --opt <<cbasedat>> | gzip -v -9 > <<cdirdest>><<cfiledest>>.sql.gz C:: CD\MIAPP COPY NO.sw SI.sw ENDTEXT STRTOFILE(ALLTRIM(ccadena),"C:\MIAPP\BKP.BAT") DECLARE INTEGER ShellExecute IN Shell32.dll ; INTEGER hndWin, STRING cAaction, STRING cFileName, STRING cParams, STRING cDir, INTEGER nShowWin ShellExecute(0,"","C:\MIAPP\BKP.BAT","","",0) nSEG=SECONDS() DO WHILE .T. WAIT WINDOW "Transcurridos : "+ALLTRIM(STR(SECONDS()-nSEG,06,00))+" Segundos" TIMEOUT 01 IF FILE("C:\MIAPP\SI.sw")=.T. EXIT ENDIF ENDDO WAIT WINDOW "Transcurridos : "+ALLTRIM(STR(SECONDS()-NSECONDS,06,00))+" Segundos" NOWAITEl truco es el siguiente:
Creamos un archivo (.BAT), pasamos unos parámetros que podemos capturar de un formulario.
Lo lanzamos con el ShellExecute pero sin espera, eso quiere decir que nuestra aplicación VFPx se sigue ejecutando, pero la "encerramos" dentro de un DO ... ENDDO, donde cada segundo va marcando el tiempo transcurrido hasta que existe el archivo SI.sw , y provocamos la salida del bucle. Esto solo se va a producir cuando se llegue a la última orden del fichero (.BAT).
Quería utilizar el 7za.exe como compresor de copia, pero no admite recibir órdenes en "tubería |". Como si ocurre con el gzip.exe
Recomiendo encarecidamente leer tanto la ayuda del mysqldump.exe así como la ayuda del gzip.exe.
Así es como quedaría sustituyendo el WAIT WINDOW por un label en el _SCREEN:
Antonio L. Montagut
Suscribirse a:
Entradas
(
Atom
)