Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-06-2004
Juan Carlos Juan Carlos is offline
Miembro
 
Registrado: may 2004
Posts: 24
Poder: 0
Juan Carlos Va por buen camino
Thumbs up Copiar base de datos de Mysql

hola un saludo a todos.

alguien, me prodria decir como copiar una base de datos de mysql, al directorio en donde se encuentran éstas, sin tener que hacerlo de forma manual.

Agredezco de antemano su respuesta
Responder Con Cita
  #2  
Antiguo 29-06-2004
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
Si te refieres a copiar el archivo de la base pues puedes hacerlo con CopyFile.

// Saludos
Responder Con Cita
  #3  
Antiguo 29-06-2004
Juan Carlos Juan Carlos is offline
Miembro
 
Registrado: may 2004
Posts: 24
Poder: 0
Juan Carlos Va por buen camino
Thumbs up como?

disculpa, pero como con copyfile?
ademas como se en que directorio se encuentra instalado mysql, para realizar la copia de archivos.
Responder Con Cita
  #4  
Antiguo 29-06-2004
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
Pues CopyFile es una rutina de la api de Windows para copiar archivos, Simplemente tienes que copiar todo el directorio que guarda la base a la nueva ubicación.

El archivo my.ini en el directorio de Windows guarda la información de dónde se localiza el diectorio de datos.

// Saludos
Responder Con Cita
  #5  
Antiguo 30-06-2004
Juan Carlos Juan Carlos is offline
Miembro
 
Registrado: may 2004
Posts: 24
Poder: 0
Juan Carlos Va por buen camino
Unhappy Cambiar atributos de la base de Datos

gracias por tu respuesta.
He realizado una aplicación en delphi para que me copie la base de datos, dependiendo del directorio que indique el archivo de my.ini.

Pero tengo otro problema: Al momento de copiar los archivos no hay problema, solo que como la base de datos la quemo en un disco(porque así lo requieren en la escuela) al momento de querer acceder a la base de datos desde mi aplicación me dice que ésta es de solo lectura.

¿Hay alguna forma que desde mi misma aplicacion que copia la base de datos, se puedan modificar los atributos de esta, para que ya no marque el error de solo lectura?

gracias de antemamo
saludos
Responder Con Cita
  #6  
Antiguo 30-06-2004
Sirkius Sirkius is offline
Miembro
 
Registrado: jun 2004
Posts: 83
Poder: 20
Sirkius Va por buen camino
¿Quieres decir que la metes en un CD y luego cuando la copias sobre la base de datos original es de sólo lectura?
Responder Con Cita
  #7  
Antiguo 01-07-2004
Juan Carlos Juan Carlos is offline
Miembro
 
Registrado: may 2004
Posts: 24
Poder: 0
Juan Carlos Va por buen camino
Si

Si asi es, como puedo cambiar los atributos de esta despues de que hayan sido copiados?

gracias!!!
Responder Con Cita
  #8  
Antiguo 01-07-2004
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 Juan Carlos
como puedo cambiar los atributos de esta despues de que hayan sido copiados?
Pues ya te había dado una sugerencia ¿no?

Pero ahí te va:

Código Delphi [-]
(*
  Cambia el atributo de sólo lectura

  Folder - carpeta a cambiar (ruta completa)
  ReadOnly -
    true para poner a todos los archivos de sólo lectura
    false para quitar el atributo a todos los archivos

  La rutina procesa recursivamente todas las subcarpetas
*)
procedure ChangeReadOnlyAttr(Folder: String; ReadOnly: Boolean);
var
  SearchRec: TSearchRec;

begin
  if FindFirst(Folder + '\*.*', faAnyFile, SearchRec) = 0 then
    repeat
      if (SearchRec.Attr and faDirectory) = faDirectory then
      begin
        if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
          ChangeReadOnlyAttr(Folder + '\' + SearchRec.Name, ReadOnly);
      end
      else if ReadOnly then
        FileSetAttr(Folder + '\' + SearchRec.Name, SearchRec.Attr or faReadOnly)
      else
        FileSetAttr(Folder + '\' + SearchRec.Name, SearchRec.Attr and not faReadOnly);
    until FindNext(SearchRec) <> 0;
end;

Y por si te surge la inquietud aquí te va una generalización de la rutina anterior:

Código Delphi [-]
(*
  Pone y/o quita atributos a los archivos de una carpeta
  y todas sus  subcarpetas

  Folder - carpeta a cuyos archivos deseamos cambiar atributos
  SetAttr - combinación de atributos que deseamos poner
  RemoveAttr - combinación de atributos que deseamos quitar
*)
procedure ChangeAttr(Folder: String; SetAttr, RemoveAttr: Integer);
var
  SearchRec: TSearchRec;
  Attributes: Integer;

begin
  if FindFirst(Folder + '\*.*', faAnyFile, SearchRec) = 0 then
    repeat
      if (SearchRec.Attr and faDirectory) = faDirectory then
      begin
        if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
          ChangeAttr(Folder + '\' + SearchRec.Name, SetAttr, RemoveAttr);
      end
      else
      begin
        Attributes := (SearchRec.Attr or SetAttr) and not RemoveAttr;
        FileSetAttr(Folder + '\' + SearchRec.Name, Attributes);
      end;
    until FindNext(SearchRec) <> 0;
end;

La anterior rutina la usarías así:

Código Delphi [-]
// Pone atribúto de sólo lectura y quita los de oculto y de sistema
ChangeAttr(Folder, faReadOnly, faHidden or faSysFile);

// Pone los atributos de sólo lectura y de sistema, no quita ninguno
ChangeAttr(Folder, faHidden or faSysFile, 0);

Creo que eso resuelve tus dudas.

// Saludos
Responder Con Cita
  #9  
Antiguo 01-07-2004
Avatar de ruina
ruina ruina is offline
Miembro
 
Registrado: jun 2004
Posts: 196
Poder: 20
ruina Va por buen camino
Añado algo: tengo muy malas experiencias con "machacar" una Db de mysql, si ha sido abierta y tenemos el servicio corriendo, suele hacer cosas "raras", como copiar solo un cacho y cosas asi.

si sabes que el directorio de tu db existe yo tiraria el servicio:
C:\mysql\bin\mysqladmin -u root shutdown (fuente: manual mysql)

despues copiar la db...

y despues volver a levantar el servicio:
C:\mysql\bin\mysqld --install

Por cierto, si es una db Gorda igual te mola sacar una barra de progreso, en lugar de hacerte tu una puedes usar el Shell para copiarla

Código Delphi [-]
uses ShellAPI
...
   function CopiaTodo(Origen,Destino : String) :{fuente Trucomania}
   LongInt;
   var
     F : TShFileOpStruct;
     sOrigen, sDestino : String;
   begin
     Result := 0;
     sOrigen := Origen + #0;
     sDestino := Destino + #0;
     with F do
     begin
       Wnd   := 0;
       wFunc := FO_COPY;
       pFrom := @sOrigen[1];
       pTo   := @sDestino[1];
       fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION  or FOF_NOCONFIRMMKDIR;
     end;
     Result := ShFileOperation(F);
 end;
Responder Con Cita
  #10  
Antiguo 01-07-2004
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 ruina
Añado algo: tengo muy malas experiencias con "machacar" una Db de mysql, si ha sido abierta y tenemos el servicio corriendo, suele hacer cosas "raras", como copiar solo un cacho y cosas asi.

si sabes que el directorio de tu db existe yo tiraria el servicio:
C:\mysql\bin\mysqladmin -u root shutdown (fuente: manual mysql)

despues copiar la db...

y despues volver a levantar el servicio:
C:\mysql\bin\mysqld --install
De hecho yo no creo que ésta sea la forma adecuada de copiar una base de datos. Para empezar, como bien dices, lo más seguro sería bajar el servidor pero un servidor no se tira así nada más como así ya que pudiera haber muchos servicos que dependan de él. Segundo, las versiones de MySql deberán ser exactamente las mismas. Las pruebas que he hecho a raiz de este hilo para copiar físicamente las tablas han devenido en un derrumbe del servidor al intentar aceder a las copias en el servidor destino.

MySql ya provee una herramienta para el resplado de bases de datos, MySqlDump, y si se requiere hacer por código se puede hacer de muchas fomas como puede ser simplemente el uso de dos datasets que accedan a ambos servidores y utilizar un ciclo para copiar uno a uno los registros o bien sentencias del tipo INSERT INTO OUTFILE y LOAD DATA IN FILE.

// Saludos
Responder Con Cita
  #11  
Antiguo 03-07-2004
Juan Carlos Juan Carlos is offline
Miembro
 
Registrado: may 2004
Posts: 24
Poder: 0
Juan Carlos Va por buen camino
Muchas Gracias!!!

Les agredezco por su respuestas, han sido de gran ayuda
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


La franja horaria es GMT +2. Ahora son las 08:37:12.


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