Ejecutar un script de Firebird desde VFP (no sé que estoy haciendo mal)

335 views
Skip to first unread message

Ultraton500

unread,
Mar 10, 2015, 4:04:55 PM3/10/15
to publice...@googlegroups.com
Hola compañeros, creé un sencillo script de Firebird para restablecer los generadores a cero y funciona sin problemas si lo ejecuto en SQLManager pero no funciona desde VFP.
El script es el siguiente:

SET GENERATOR ID_ART_GEN TO 0;
COMMIT;

y lo ejecuto desde VFP así:

oShell = CREATEOBJECT("WScript.Shell")
oShell.RUN("ISQL -i 'generadores_a_cero.sql'", 0, .T.)

También probé:

RUN ISQL -i "generadores_a_cero.sql"

pero aparece el pestaneo de la ventana de DOS vacía y tampoco funciona.

Alguien nota algún error o algo que estoy pasando por alto?
Desde ya agradezco sus comentarios.

Saludos,
Javier.

Antonio Meza

unread,
Mar 10, 2015, 6:40:41 PM3/10/15
to publice...@googlegroups.com
Nunca he usado, pero se me ocurre que pueda ser la ruta del archivo, que debas especificar la ruta completa.

saludos

Ultraton500

unread,
Mar 10, 2015, 7:32:37 PM3/10/15
to publice...@googlegroups.com
Hola Antonio, gracias por responder. Si bien no había probado especificando la ruta del archivo, lo hice pero sigue sin funcionar. Para verificar probé con una ruta incorrecta y obtuve el mensaje de error "Invalid path o file name".

Saludos cordiales,
Javier.

mapner

unread,
Mar 10, 2015, 8:03:24 PM3/10/15
to publice...@googlegroups.com
Te falta especificar base de datos, usuario y password.

Sería algo así

isql 192.168.1.1:c:\datos\midb.fdb -user 'User' -password 12345 -i script..sql

Ultraton500

unread,
Mar 10, 2015, 11:46:34 PM3/10/15
to publice...@googlegroups.com
Hola mapner, gracias por la ayuda.
Especifiqué la db (con y sin comillas), el usuario y la clave pero lamentablemente sigue sin funcionar.

Saludos cordiales,
Javier.

Idalberto Gonzalez

unread,
Mar 11, 2015, 12:14:51 AM3/11/15
to publice...@googlegroups.com
Aunque parezca tonta mi respuesta aqui va:

He notado que cuando se usan comillas simples y sencillas en una misma line de codigo, puede haber problemas, a mi me ha pasado.

Creo que el problema está en esta linea:

  oShell.RUN("ISQL -i 'generadores_a_cero.sql'", 0, .T.)

Te sugiero que la cambies por:

oShell.RUN('ISQL -i "generadores_a_cero.sql"', 0, .T.)      comilla secilla , doble , doble , sencilla

o tambien:

oShell.RUN('ISQL -i [generadores_a_cero.sql]', 0, .T.)

Me disculpan la estupidez, pero no se pierde nada con probar

Arturo Zamudio

unread,
Mar 11, 2015, 12:16:20 AM3/11/15
to publice...@googlegroups.com
yo lo haria de esta manera
1.- hago la conexion
lbase='alias'
lserver='ip_servidor'
luser='usuario'
lpass='pwd'
PUBLIC FireConex as Integer 
LOCAL CadenaFireconex as String 
CadenaFireconex="Driver=Firebird/InterBase(r) driver;Uid=&luser;Pwd=&lpass; DbName=&lserver:&lbase;"
STORE SQLSTRINGCONNECT(CadenaFireconex) TO FireConex 

2.- ejecuto mi sentencia sql
sqlexec(fireconex,'SET GENERATOR ID_ART_GEN TO 0')
sqlcommit(fireconex)

Ultraton500

unread,
Mar 11, 2015, 1:02:00 AM3/11/15
to publice...@googlegroups.com
Hola Idalberto, no tienes por qué disculparte, cualquier sugerencia es bienvenida. Si bien esta vez no funcionó lo sugerido lo que mencionas sobre las comillas es muy interesante para tener en cuenta.
Saludos cordiales y gracias por el aporte.

Javier.

Ultraton500

unread,
Mar 11, 2015, 1:23:02 AM3/11/15
to publice...@googlegroups.com
Qué tal Arturo, hice la prueba de lo que indicas pero usando FoxyDB y funciona pero ahora el tema es el siguiente:
El script que puse es de una sola línea para hacer la prueba pero los scripts suelen tener mas de una línea, en mi caso una por cada generador que debo setear a cero y lamentablemente eso ya no se podría ejecutar con un sqlexec().
En este caso podría hacer un sqlexec() por cada línea del script pero quisiera saber por qué no funciona lo que en teoría debería funcionar por si el día de mañana debo ejecutar un script de decenas de líneas.
Gracias nuevamente Arturo por la ayuda.

Saludos cordiales,
Javier.

Arturo Zamudio

unread,
Mar 11, 2015, 1:26:03 AM3/11/15
to publice...@googlegroups.com

Creo que deberias hacer en este caso un SP y con el sqlexec mandar llamarlo

Ultraton500

unread,
Mar 11, 2015, 1:37:00 PM3/11/15
to publice...@googlegroups.com
Estoy intentando hacer un stored procedure pero al parecer no acepta el comando SET (o al menos eso es lo que me indica el mensaje de error en SQLManager).
Veré qué hago.
Saludos y gracias.
Javier.

Arturo Zamudio

unread,
Mar 11, 2015, 1:45:06 PM3/11/15
to publice...@googlegroups.com

https://firebird21.wordpress.com

Es el blog de Walter Ojeda echale un visita

Antonio Meza

unread,
Mar 11, 2015, 2:27:40 PM3/11/15
to publice...@googlegroups.com
Javier, y ya probaste correr el scrip directamente desde ms-dos? es decir hacerlo primero de forma normal y ya luego llevar ese código a VFP ?

saludos


El martes, 10 de marzo de 2015, 21:46:34 (UTC-6), Ultraton500 escribió:

Ultraton500

unread,
Mar 12, 2015, 4:18:49 PM3/12/15
to publice...@googlegroups.com
Arturo, en el blog de Walter existe un artículo llamado "Ejecutando un script desde Visual FoxPro" y es de ahí que obtubve el código que utizo para llamar al script.
En el foro del blog pude obtener ayuda de Walter pero lo que en teoría debería andar a mi no me funciona valla a saber por qué.
Lo que voy a hacer es ejecutar las líneas de script con SqlExec() (FoxyDB en mi caso) como me sugeriste anteriormente.
Gracias de todos modos por la recomendación.

Saludos cordiales,
Javier.

Ultraton500

unread,
Mar 12, 2015, 4:28:14 PM3/12/15
to publice...@googlegroups.com
Hola Antonio, no había probado ejecutar el script desde ISQL en DOS. Cuando lo hice me encontré con que no puedo hacer que funcione, así que algo anda mal pero no puedo descubrir qué es.
Desinstalé e instalé Firebird nuevamente y volví a copiar los archivos isql.exe y fbclient.dll en el directorio del sistema, hice pruebas en mi notebook pero me encuentro con lo mismo.
Gracias por la recomendación.

Saludos cordiales,
Javier.

Ernesto Arias

unread,
Mar 12, 2015, 8:58:08 PM3/12/15
to publice...@googlegroups.com
hola te adjunto un manual de visual foxpro y firebird de su auhor; Walter Ojeda Valiente, espero te sirva.

Saludos.
SQL_DEMO.pdf

Ultraton500

unread,
Mar 13, 2015, 3:10:30 AM3/13/15
to publice...@googlegroups.com
Hola Servoy2x, conozco SQL_DEMO pero lamentablemente no hace referencia a scripts y lo explicado sobre isql.exe es solo orientativo.
De todas formas aprecio tu aporte.

Saludos cordiales,
Javier.

Ernesto Arias

unread,
Mar 13, 2015, 11:47:02 AM3/13/15
to publice...@googlegroups.com
Hola mandame por favor tu archivo generadores_a_cero.sql para ver si en mi humilde experiencia te puedo ayudar

Saludos.

Patricio Muñoz

unread,
Mar 13, 2015, 11:52:41 AM3/13/15
to publice...@googlegroups.com
Manda la prueba que realizastes en el SQLManager para ver cual es la diferencia.

Bendiciones
--
Patricio Muñoz
Pro&Tech
Analista en Sistemas

Rafael Carballo

unread,
Mar 13, 2015, 1:48:58 PM3/13/15
to publice...@googlegroups.com
Creo que el problema es que ultimamente con las versiones actualizadas de windows el run ó ! para ejecutar un archivo no tiene efecto,  a mi se me dio ejecutando un archivo bat para imprimir una etiqueta que mandaba al impresión el codigo zpl de zebra a imprimir y llegue a la conclusión por todas las pruebas que hice y no funcionaba que era el run asi que cree un función con estas instrucciones y con ello puede ejecutar cualquier archivo, documento de word, excel, pdf , etc

FUNCTION _EJECUTAR

LPARAMETERS tcFileName

DECLARE INTEGER ShellExecute ;
         IN SHELL32.DLL ;
         INTEGER nWinHandle,;
         STRING cOperation,;   
         STRING cFileName,;
         STRING cParameters,;
         STRING cDirectory,;
         INTEGER nShowWindow

RETURN ShellExecute(0,"open",m.tcFileName,"","",1)

PRUEBALO MANDANDO EL NOMBRE DE ARCHIVO Y RUTA A ESTA FUNCION Y VERAS SI FUNCIONA,

Ultraton500

unread,
Mar 13, 2015, 8:37:20 PM3/13/15
to publice...@googlegroups.com
Rafael, es interesante lo que dices y es bueno tener otra alternativa, así que ya tomé nota de tu función y te agradezco por compartirla.

Servoy2x, Extremo y Rafael gracias por su predisposición y disculpen que no respondí pero estaba haciendo unas pruebas que al final hicieron que pueda resolver el problema.

Resulta que como al script con el que venía probando lo había creado en SQLManager se me dio por crear uno nuevo partiendo de un archivo .txt y luego cambiándole la extensión a .sql.
Lo probé en ISQL y funcionó pero me obligó a conectarme antes para especificar la db.
Luego probé desde VFP pero no funcionó, entonces hice lo que me indicó mapner y agregué en el comando RUN la ruta y nombre de la db + usuario y password quedando de esta manera:

oShell = CREATEOBJECT("WScript.Shell")
oShell.RUN("ISQL c:/sistema/cotizador_(firebird)/db_cotizador.fdb -user sysdba -password masterkey -i 'generadores_a_cero.sql'", 0, .T.)

 y así pude ejecutar el generador con éxito.

Les estoy muy agradecido a todos por sus interesantes colaboraciones.

Saludos cordiales,
Javier.
Reply all
Reply to author
Forward
0 new messages