Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-11-2005
SSAtab SSAtab is offline
Registrado
 
Registrado: nov 2005
Posts: 1
Poder: 0
SSAtab Va por buen camino
Hacer backup de BD de SQLServer desde Delphi

Saludos Gente, como buen forero aqui les traigo un tema/reto para los expertos .

Pues el tema es el siguiente, tengo una base de datos en MS SQLServer y necesito crear un programa en delphi con el cual pueda hacer un respaldo de esa BD, he investigado un poco y me he encontrado links en ingles sobre este tema pero no termino por entenderles bien. Usan librerias como SQLDMO, SQLNS, pero no termino de entender bien los pasos.

Aqui les pongo este codigo:

Cita:
If you have Enterprise manager (SQL Server tools) installed on the machine, you may activate any Enterprise Manager function or menu from within your appliction using SQLNS and SQLDMO.
The good thing is it is easy to make backup as well as restore since it works exactly the same way as using the Enterprise manager. The downside is it will only work if the tools are installed on the client machine.
1) Choose project, Import typelibrary.
2) Look for "Microsoft SQLNamespace Object Library" in the list.
3) Choose install or create unit depending on if you want it as a component or just access using TLB unit as I have.
4) Include SQLNS.pas in uses of your unit.
5) Now do the same 4 steps with "Microsoft SQLDMO Object library" (SQLDMO.pas)
First operation is then to connect to the SQL server...
uses
SQLNS, SQLDMO;
var
FNameSpace:SQLNamespace; // This one needs to be global or part of class as it needs to be accessed by other functions.
var
ConString:OLEVariant;
Hnd:Integer;
FServerName, FPass, FUser: String;
// strings are to be assigned with the password, username and servername to then make part of connection string...
ConString:='Server='+FServerName+';UID='+FUser+';PWD='+FPass+';Trusted_Connection=No';
// The connect operation also requires a window handle. As I had this call within a component I used the one below. If you have a form then Hnd:=Form.Handle instead.
Hnd:=(Owner as TWinControl).Handle;
// Now make the connection...
FNameSpace:= CoSQLNamespace.Create;
FNameSpace.Initialize(FAppName,SQLNSRootType_Server,ConString,Hnd);
// Include the function below to navigate easy in the namespace...
function GetDBNameSpaceObject(
const aDBName: String): SQLNamespaceObject;
var
hServer,hDatabases,hDatabase:Integer;
begin
Result:=nil;
hServer:=FNameSpace.GetRootItem;
hDatabases:=FNameSpace.GetFirstChildItem(hServer,SQLNSOBJECTTYPE_DATABASES,'');
hDatabase:=FNameSpace.GetFirstChildItem(hDatabases,SQLNSOBJECTTYPE_DATABASE,aDBName);
Result:=FNameSpace.GetSQLNameSpaceObject(hDatabase);
end;
// Now you may use this function to activate the "database backup menu" for a particular database on the server...
procedure ShowBackupDB(const aDBName: String);
var
DB:SQLNamespaceObject;
Hnd:Integer;
begin
Hnd:=(Owner as TWinControl).Handle;
DB:=GetDBNameSpaceObject(aDBName);
DB.ExecuteCommandByID(SQLNS_CmdID_DATABASE_BACKUP,Hnd,0);
DB:=nil;
end;
// To show "restore menu", use this procedure...
procedure ShowRestoreDB(const aDBName: String);
var
DB:SQLNamespaceObject;
Hnd:Integer;
begin
Hnd:=(Owner as TWinControl).Handle;
DB:=GetDBNameSpaceObject(aDBName);
DB.ExecuteCommandByID(SQLNS_CmdID_DATABASE_RESTORE,Hnd,0);
DB:=nil;
end;
// To make a backup without showing any interface, use this procedure...
{
RestoreType=SQLDMORestore_Database,
SQLDMORestore_Files,
SQLDMORestore_Log
DeviceName=Valid name of a backup-device
}
procedure RecordBackup(const aDBName: string;
BackupType: SQLDMO_BACKUP_TYPE; const DeviceName: string;
Initialize: Boolean);
var
ThisBackup:_Backup;
begin
try
ThisBackup:=coBackup.Create;
except
Messagedlg('coBackup.Create failed, the object might not be installed on this machine',mtError,[mbOK],0);
end;
ThisBackup.Initialize:=Initialize;
ThisBackup.Database:=aDBName;
ThisBackup.Devices:='['+DeviceName+']';
ThisBackup.SQLBackup(FServer);
ThisBackup:=nil;
end;
// To restore without interface, use this procedure...
procedure TNSConnection.RestoreBackup(const aDBName: string;
RestoreType: SQLDMO_RESTORE_TYPE; const DeviceName: string);
var
ThisRestore:_Restore;
begin
try
ThisRestore:=coRestore.Create;
except
Messagedlg('coRestore.Create failed, the object might not be installed on this machine',mtError,[mbOK],0);
end;
ThisRestore.Database:=aDBName;
ThisRestore.Devices:='['+DeviceName+']';
ThisRestore.Action:=RestoreType;
ThisRestore.SQLRestore(FServer);
end;
No se si haya otra forma de hacerlas a esta no le entendi muy bien.

Saludos gente!
Responder Con Cita
  #2  
Antiguo 17-11-2005
m@kio m@kio is offline
Miembro
 
Registrado: may 2005
Posts: 42
Poder: 0
m@kio Va por buen camino
Pues no se si esto te sirva, yo asi hecho respaldos

Para que esto funciones debe estar creada la base de datos ya sea para respaldar o para restaurar (no importa si no tiene las tablas la restura completa) y que la base de datos no este en uso, por que si no pues no se va a poder.

Código SQL [-]
   //Para crear el respaldo de la base de datos
   backup database BD to disk='C:\BD.bak'
   //Para restaurar la base de datos
   restore database BD from disk='C:\BD.bak'

Este codigo lo pongo en un ADOQuery y nada mas se ejecuta.

Asi me ha funcionada no uso librerias extras pruebalo.
Responder Con Cita
  #3  
Antiguo 17-07-2006
Avatar de edelphi
edelphi edelphi is offline
Miembro
 
Registrado: jun 2006
Posts: 55
Poder: 19
edelphi Va por buen camino
bueno disculpa mi ignorancia pero en que parte del ADOQUERY colocan ese codigo y antes de hacer eso tengo que tener previamente una copiad de seguridad hecha? expliquenme por favor con mas detalle
Responder Con Cita
  #4  
Antiguo 14-04-2007
Jech Jech is offline
Registrado
 
Registrado: sep 2004
Posts: 9
Poder: 0
Jech Va por buen camino
gracias a m@kio

bueno gracias el codigo que me diste me funcionó perfectamente
te agradezo me salvaste la vida
Ahh ese código se pone como una consulta SQL dentro del Query
Responder Con Cita
  #5  
Antiguo 09-03-2008
edr_tuc edr_tuc is offline
Miembro
 
Registrado: dic 2007
Posts: 18
Poder: 0
edr_tuc Va por buen camino
necesito hacer un back up con bd mysq 5.0 y componentes zeos

hola muchachos me uno a la peticion porque necesito crear una opcion que me realice un back up de la BD .ya hice lo que dijo m@kio pero yo en vez de componentes ADO utilizo los Zeos y yo utilizando la misma logica agregue en el evento oncreate del form principal un msgdlg que me pregunte si quiero hacer un back up y al hacer click en ok me ejecute una query en cuya propiedad SQL escribi:
"backup database BD to disk='C:\BD.bak' " (esto es lo qe entendi del msj e m@kio que debia hacer ,si entendi mal por favor corrijanme )
pero me aparece un error :" Acces vioation at adress 0057EDC2 in module 'Mutual.exe' " alguien sabe a que se debe o puede sugerirme alguna foma de hacerlo o algun link para que lea? le estaria muy agradecido desde ya muchas grcais a todos son realmente de gran ayuda espero sus respuesta
Responder Con Cita
  #6  
Antiguo 25-03-2008
josejm josejm is offline
Miembro
 
Registrado: abr 2006
Posts: 21
Poder: 0
josejm Va por buen camino
Smile Seguro que el componente no existe.

Hola, creo que lo que te pasa es que al componente le falta la creación o el enlace a la conexión, porque el error me da esa impresión.


Última edición por josejm fecha: 25-03-2008 a las 16:02:09.
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 21:16:52.


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