Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-09-2012
jcrios_9 jcrios_9 is offline
Miembro
NULL
 
Registrado: sep 2012
Posts: 13
Poder: 0
jcrios_9 Va por buen camino
Importar Base datos mysql

Buenas, tengo una duda sobre el proyecto que estoy realizando. Tengo que realizar una copia de seguridad y restaurar la base de datos mysql con Builder c++ 6. El caso es que haer la copia de seguridad me funciona perfecto gracias a un codigo de un compañero del foro, pero no consigo restaurarla. El codigo para la copia de seguridad es el siguiente:

Código Delphi [-]
char *user="root";
        char *password="root";
        AnsiString nombrefichero=Edit1->Text; //el nombre que introduzca el usuario
        char *database="basedatos";
        AnsiString outputdir="C:\\";
    time_t t = time(NULL);
    struct tm *tmp = localtime(&t);
    char fecha[9];
    strftime(fecha, sizeof(fecha), "%d%m%Y", tmp);

    char outputfile[MAX_PATH];
    char args[MAX_PATH];

    /* Calculamos el nombre del archivo de salida */
    sprintf(outputfile, "%s\\%s_%s.sql",outputdir, nombrefichero, fecha);
        ShowMessage(outputfile);
    /* Calculamos los parámetros */
    sprintf(args, "-u%s -p%s %s -r %s", user, password, database, outputfile);

    /* Hacemos el respaldo */
    ShellExecute(
        0,
        "open",
        "C:\\Program Files (x86)\\MySQL\\MySQL Server 5.5\\bin\\mysqldump.exe",
        args,
        "",
        SW_HIDE);
           }
¿Alguien me podria indicar como restaurar la copia de seguridad, sabiendo que el codigo puesto anteriormente para hacer la copia de seguridad funciona perfectamente?

Gracias y un saludo!

Última edición por jcrios_9 fecha: 19-09-2012 a las 22:04:58.
Responder Con Cita
  #2  
Antiguo 19-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración

Recuerda poner los tags al código fuente, ejemplo:



Gracias
Responder Con Cita
  #3  
Antiguo 19-09-2012
jcrios_9 jcrios_9 is offline
Miembro
NULL
 
Registrado: sep 2012
Posts: 13
Poder: 0
jcrios_9 Va por buen camino
De acuerdo, gracias por avisar. Un saludo
Responder Con Cita
  #4  
Antiguo 19-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pero si dices que el backup lo haces bien y lo que no consigues que funcione es la restauración, entonces ¿por qué pones el código que hace el backup?, ¿no crees que sería más conveniente que pongas el que hace la restauración?
Pon el código, explica algo de lo que haces, cuéntanos qué problemas tienes, ¿algún mensaje de error?, etc.
Responder Con Cita
  #5  
Antiguo 20-09-2012
jcrios_9 jcrios_9 is offline
Miembro
NULL
 
Registrado: sep 2012
Posts: 13
Poder: 0
jcrios_9 Va por buen camino
Hola, explicaré un poco mis dudas aver si alguien puede darme alguna pista.

El programa comienza dandole valores a los parametros para hacer la llamada a mysqldump. En principio para restaurar sería exatamente lo mismo.

Código Delphi [-]
   
char *user="root";
char *password="root";
AnsiString nombrefichero=Edit1->Text; //el nombre que introduzca el usuario     
char *database="basedatos";     
AnsiString outputdir="C:\\";     
time_t t = time(NULL);     
struct tm *tmp = localtime(&t);     
char fecha[9];     
strftime(fecha, sizeof(fecha), "%d%m%Y", tmp);      
char outputfile[MAX_PATH];     

char args[MAX_PATH];      /* Calculamos el nombre del archivo de salida */     

sprintf(outputfile, "%s\\%s_%s.sql",outputdir, nombrefichero, fecha);

Lo que si cambiaría serian el calculo de parametros y la llamada a ShellExecute. En este caso utilizo mysqldump.exe porque es para respaldar la base de datos.
Pues bien, para restaurar la base datos, en vez de mysqldump se usa mysql simplemente.
Lo que no entiendo de los parametros para respaldar la base de datos es el -r que resalto. Así si hace bien el respaldo.
Sin embargo, no sé que poner para poder hacer la restauracion de la base de datos. He probado muchas formas y el resultado es que es como si no hiciera nada.

Código Delphi [-]
       
 /* Calculamos los parámetros */    
 sprintf(args, "-u%s -p%s %s -r %s", user, password, database, outputfile);    

 /* Hacemos el respaldo */     
     ShellExecute(         0,        
     "open", 
     "C:\\Program Files (x86)\\MySQL\\MySQL Server 5.5\\bin\\mysqldump.exe",       
      args,         
       "",        
      SW_HIDE);           
        }

La sintaxis en mysql para hacer el respaldo es esta:
Código SQL [-]
mysqldump -u root -p nombre_base_de_datos > fichero.sql

Y para restaurar la base de datos es esta:
Código SQL [-]
mysql -u root -p  nombre_base_de_datos < fichero.sql

Si le ejecuto por ventana de comandos, si sale bien, el caso es incluirlas en Builder c++ con ShellExecute. Pero la que me falta por incluir es la de restaurar.

Espero que me entendais un poco mejor. Gracias y un saludo a todos.

Última edición por jcrios_9 fecha: 20-09-2012 a las 12:17:47.
Responder Con Cita
  #6  
Antiguo 20-09-2012
jcrios_9 jcrios_9 is offline
Miembro
NULL
 
Registrado: sep 2012
Posts: 13
Poder: 0
jcrios_9 Va por buen camino
He metido un pause y me dice que no encunetra la ruta de mysqldump porque la esta leyendo desde la ruta del proyecto y no desde la ruta del .bat.

Es raro porque al .bat solo no hay que darl ruta porque esta en la misma...

Última edición por jcrios_9 fecha: 20-09-2012 a las 17:33:23.
Responder Con Cita
  #7  
Antiguo 20-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Has seguido el código paso a paso para ver los valores antes de ejecutar el comando?
Responder Con Cita
  #8  
Antiguo 20-09-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por jcrios_9 Ver Mensaje
Lo que no entiendo de los parametros para respaldar la base de datos es el -r que resalto.
Y, ¿qué es lo que no entiendes? Basta poner

Código:
> mysqldump --help
en la línea de comandos para obtener una lista de todos los parámetros y su uso. -r es el parámetro que te permite indicar el archivo con las instrucciones SQL. Esto es necesario al ejecutarlo desde delphi, porque la otra manera, desviando la salida a un archivo:

Código:
mysqldump bd > respaldo.sql
no la puedes usar con ShellExecute. Se puede hacer con delphi, pero es más complicado pues necesitar usar tuberías.

El caso inverso, el restaurar una base, resulta similar. No puedes usar la opción

Código:
mysql bd < respaldo.sql
directamente con ShellExecute.

mysql no tiene (creo) una opción tan directa como mysqldump para indicar el archivo de entrada, pero tiene la opción -e para ejecutar comandos, incluidos los comandos internos de mysql, como lo es source.

En resumen, puedes hacerlo así:

Código:
> mysql -e "source \ruta\al\respaldo.sql" bd
lo cual sí puedes ejecutar con ShellExecute.

// Saludos
Responder Con Cita
  #9  
Antiguo 20-09-2012
jcrios_9 jcrios_9 is offline
Miembro
NULL
 
Registrado: sep 2012
Posts: 13
Poder: 0
jcrios_9 Va por buen camino
Muchas gracias roman. Lo habia conseguido a través de ejecutar un .bat, pero la verdad es que de esta manera es más sencillo. Me funciona tal y como lo has puesto.

De nuevo gracias y saludos!
Responder Con Cita
  #10  
Antiguo 21-09-2012
DanielMC DanielMC is offline
Miembro
NULL
 
Registrado: sep 2012
Posts: 14
Poder: 0
DanielMC Va por buen camino
Saludos a todos
Estuve probando el codigo para hacer el backup y funciona perfectamente en c++ Builder 6 pero en c++ Builder xe me da los siguientes errores:
Código:
 Cannot convert 'char const[5]' to 'const wchar_t *'

E2342 Type mismatch in parameter 'lpOperation' (wanted 'const wchar_t *', got 'const char *')
El error me lo da especificamente en la linea del ShellExecute
Probe de direntes formas, una de ellas:
Código:
ShellExecute(Handle, (LPCTSTR)"open", (LPCTSTR)"C:\\Program Files (x86)\\MySQL\\MySQL Server 5.5\\bin\\mysqldump.exe/", 0, 0, SW_SHOWNORMAL);
y no da error, apenas le cambio y pongo:
Código:
ShellExecute(Handle, (LPCTSTR)"open", (LPCTSTR)"C:\\Program Files (x86)\\MySQL\\MySQL Server 5.5\\bin\\mysqldump.exe/", args, 0, SW_SHOWNORMAL);
Me da el error de arriba utilizando el args.
Alguien podria indicarme la manera correcta de hacerlo en c++ builder xe
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
importar datos mysql-firebird Galahad MySQL 2 17-12-2011 23:41:44
CVS importar y exportar datos de Mysql 4.x y 5.x JXJ MySQL 8 19-11-2010 00:45:20
Como importar un txt a base de datos Velia Conexión con bases de datos 14 12-08-2008 08:21:38
importar de excel a base de datos axel Varios 3 26-07-2006 09:47:49
importar base de datos con form jaerazo PHP 2 02-07-2006 01:27:09


La franja horaria es GMT +2. Ahora son las 08:56:03.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi