Page 1 of 1

Archivo .BAT no funciona

Posted: Wed Sep 27, 2023 9:57 am
by JoseAlvarez
Estimados amigos, espero que estén muy bien.

En esta oportunidad, acudo al foro ante el extraño caso que se me presenta al momento de ejecutar un archivo .BAT

Trataré de explicarme lo mejor y más corto posible para no confundirlos.

Mi aplicación realiza tanto el respaldo como la restauración de las bases de datos MariaDB desde una opción del menu.
En el .PRG donde esto se hace, se crean y ejecutan en segundo plano, los respectivos archivos .BAT (desde código fuente) los cuales a través de comandos de consola, hacen respaldo y restauración.

Los respaldos de las bases de datos se siguen ejecutando sin ningún problema. Pero en la restauración se me presenta ahora lo siguiente:

Al querer ejecutar el .BAT, ocurre que el sistema operativo hace dos cosas, inserta en mitad de la instrucción un numero CERO y corta la ultima parte de la instrucción.
Me explcio mejor.

La orden es esta:

mysql -u vdbnr8ds_backup -prestaurardb <c:\Cuentas32\Backup\2023-09-26-H17-M18-Cuentas32BD.sql vdbnr8ds_cuentas32_demo

Si la copio del .BAT y la pego en el prompt en la carpeta de C:\Program Files\MariaDB 11.2\bin y la ejecuto, restaura perfectamente los datos.

Pero si lo hago usando el .BAT, o sea C:\Program Files\MariaDB 11.2\bin\archivo.bat -> enter sucede lo siguiente:

1.- Le aparece un cero a mitad de la instrucción
2.- Corta la ultima parte de la orden.

Pongo ejemplos:

Comando completo y que funciona escribiéndolo directo en la consola:

C:\Program Files\MariaDB 11.2\bin\mysql -u vdbnr8ds_backup -prestaurardb <c:\Cuentas32\Backup\2023-09-26-H17-M18-Cuentas32BD.sql vdbnr8ds_cuentas32_demo

Si lo hago desde el .BAT, muestra esto arrojando el respectivo mensaje de error:

C:\Program Files\MariaDB 11.2\bin>mysql -u vdbnr8ds_backup -prestaurardb 0<C:\Cuentas32\Backup\2023-09-26-H17-M18-Cuentas32BD.sql
ERROR 1046 (3D000) at line 22: No database selected

Como pueden observar, inserta un CERO a mitad de la instrucción (lo resalté en rojo) , y corta el nombre de la base de datos a restaurar al final de la misma.

Ya invertí dos días tratando de conseguir el error y no pude. Sucede lo mismo haciéndolo desde código fuente y también manualmente directo en la consola.


A alguien le ha pasado algo semejante?

Re: Archivo .BAT no funciona

Posted: Wed Sep 27, 2023 10:53 am
by Willi Quintana
Mi estimado, buenos dias,
¿Como construyes el .bat ?, aqui te envio un ejemplo

Code: Select all | Expand

Function DBackUp()
local cFile, lEsc, nHand, cComando, hCambios, cText, oBrush, oDls, oSay, cFileBackup

cFile := "backup.bat"
lEsc := .f.

IF !FFERASE( cFile )
  Return(.f.)
EndIf

cComando := ""

IF !FILE( cFile )

 nHand := FCreate( cFile )
 FWrite(nHand, cComando )
 FClose(nHand)

 // Respaldo Antes de la Auditoria, Nombre del DUMP
 cFileBackup := 'respaldo_' + DTOS(Date()) + '_' + Time() + '.sql'

 cComando := ""
 cComando += 'mysqldump -h' + oApp:cConexion + ' -u' + oApp:cUser + ' -p' + oApp:cPassword + ' ' + oApp:cDatabase + ' > .\backup\'
 cComando += cFileBackup + CRLF

 hCambios := FOpen( cFile, FO_READWRITE + FO_SHARED )
 FSeek( hCambios, 0, FS_END)
 FWrite( hCambios, cComando )
 FClose(nHand)

endif

//*------------- Proceso de Generacion del DUMP de la base de datos
lEsc := .F.

cText := ""

DEFINE DIALOG oDls RESOURCE "DLG_AVISO2" TITLE "Mi Respaldo ..." TRANSPARENT

 REDEFINE SAY oSay PROMPT cText ID 100 OF oDls ;
 COLORS CLR_WHITE

 oDls:bStart := { || WaitRun( cFile, 0 ), lEsc := .T., oDls:End() }

ACTIVATE DIALOG oDls CENTERED VALID lEsc

rETURN (niL)

Re: Archivo .BAT no funciona

Posted: Wed Sep 27, 2023 11:13 am
by JoseAlvarez
Hola willi, como estas?

Desde codigo, lo hago asi:

Code: Select all | Expand

  local h

    local cComando
  
    cComando := 'mysql -u cUsuario -p'+cPassword+' < '+cArchivo+' '+_cDatabase

    h := fcreate( ("_4.bat") );  fwrite( h,  cComando ) ; fclose( h )
 
Ahora bien, después de tanto probar, quise descartar haciendo el .BAT directo con el Block de Notas de Windows, y el resultado es igual. Me presenta el mismo error. Es solo con el .BAT de restauración. Con el de respaldar funciona perfecto tanto desde código como directo hecho con block de notas.

Re: Archivo .BAT no funciona

Posted: Wed Sep 27, 2023 12:57 pm
by jnavas
José,
Saludos.
Puedes validar copiando el programa binario de maria BD en tu carpeta y ejecutar el .BAT en la misma ruta de tu programa binario.
En mi caso genero un *.bat en la misma carpeta de mi aplicación.
c:\dpsgev60\respaldo.bat
quien ejecutará a mysql.exe y mysqldump.exe ubicados en una subcarpeta c:\dpsgev60\mysql

Re: Archivo .BAT no funciona

Posted: Wed Sep 27, 2023 3:03 pm
by Willi Quintana
Mi Estimado, esto funciona correctamente: (sustituye lo que corresponda)

Code: Select all | Expand

//------------------------------------------------------------------------------------
Function DRestore()
local cFile, lEsc, nHand, cComando, hCambios, cText, oBrush, oDls, oSay, cFileBackup, cNDBase, cUser, cPass

cNDBase     := "D:\SYSTEMDB\1206\MariaDb1011\bin\mysql alprogeneirl"
cFileBackUp := "D:\PRGS\SIAE\BIN\alprogen.sql"
cUser       := "root"
cPass       := "qazwsxedc"

cFile := "restore.bat"
lEsc := .f.

IF !FFERASE( cFile )
  Return(.f.)
EndIf

cComando := ""

IF !FILE( cFile )

 nHand := FCreate( cFile )
 FWrite(nHand, cComando )
 FClose(nHand)

// ojo, ruta completa.....
 cComando :=  cNDBase + " < " + cFileBackUp + " -u " + cUser + " -p" + cPass

 hCambios := FOpen( cFile, FO_READWRITE + FO_SHARED )
 FSeek( hCambios, 0, FS_END)
 FWrite( hCambios, cComando )
 FClose(nHand)

endif

//*------------- Proceso de Generacion del DUMP de la base de datos
lEsc := .F.

cText := ""

DEFINE DIALOG oDls RESOURCE "DLG_AVISO2" TITLE "Mi Respaldo ..." TRANSPARENT

 REDEFINE SAY oSay PROMPT cText ID 100 OF oDls ;
 COLORS CLR_WHITE

 oDls:bStart := { || WaitRun( cFile, 0 ), lEsc := .T., oDls:End() }

ACTIVATE DIALOG oDls CENTERED VALID lEsc

RETURN (niL)

 

Re: Archivo .BAT no funciona

Posted: Wed Sep 27, 2023 3:09 pm
by Willi Quintana
Mi estimado, el bat que queda asi:

D:\SYSTEMDB\1206\MariaDb1011\bin\mysql alprogeneirl < D:\PRGS\SIAE\BIN\alprogen.sql -u root -pqazwsxedc

Re: Archivo .BAT no funciona

Posted: Thu Sep 28, 2023 3:12 am
by JoseAlvarez
Hola a todos colegas.

Una vez más agradecido por la ayuda en este maravilloso foro.

Amigo Juan Navas, intente hacerlo como me indicaste, ya que era la vía más rápida. Pero no funcionó. Seguía el error. No se si fue que no supe implementarlo, pero lo hice de todas las maneras posibles. El error estaba duro de matar.

Estimado Willi, tu código funcionó a la perfección. Solo hice los retoques de adecuación necesarios y funciona ¡ perfecto !

Con ello solucioné mi problema-

Muy agradecido a ambos por sus ideas y soluciones.

Solo me queda la duda del por que dejó de funcionar algo que trabajó bien por años. Pero tampoco me voy a preocupar por eso.

Un abrazo a todos !!

Re: Archivo .BAT no funciona

Posted: Fri Sep 29, 2023 4:36 pm
by jnavas
Jose,
Gracias, voy a tomar las recomendaciones de Willy,
Wylli, agradecido.
En este sitio, un colega reporta la misma incidencia.
https://www.lawebdelprogramador.com/for ... .html#last

Re: Archivo .BAT no funciona

Posted: Fri Sep 29, 2023 4:54 pm
by jnavas
José
Saludos,
El resultado el .BAT quedó de esta manera:
c:\adp\mysql\mysql.exe SGEV60_TEST < c:\adp\dpsgev60\dpsgev60.sql -uroot -proot --host=127.0.0.1 --port=3306 > TEMP\MYSQL.LOG