Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-03-2008
flor flor is offline
Registrado
 
Registrado: feb 2008
Posts: 7
Poder: 0
flor Va por buen camino
Respaldo y recuperacion

hola necesito hacer el respaldo y la recuperacion desde una aplicacion en delphi la base de datos esta en sql server 2005 , si alguien pudiera ayudarme se los agradeceria mucho.
Responder Con Cita
  #2  
Antiguo 27-03-2008
Avatar de jcarteagaf
[jcarteagaf] jcarteagaf is offline
Miembro Premium
 
Registrado: abr 2006
Ubicación: La Paz, Bolivia
Posts: 651
Poder: 19
jcarteagaf Va por buen camino
Backup y Restore en SQL Server

Para hacer Backup usa un componente TQuery (BDE) o TADOQuery (ADO) con el siguiente comando SQL:

Código SQL [-]
BACKUP DATABASE Nombre_Base_de_Datos
TO
  DISK =
 Archivo_de_Backup
WITH
  NOFORMAT,
  NOINIT,
  NAME = Nombre_Backup,
  NOREWIND,
  NOUNLOAD,
  NOSKIP


Y para hacer el Restore usa lo siguiente:

Código SQL [-]
RESTORE DATABASE Nombre_Base_de_Datos
FROM
  DISK =
Archivo_de_Backup
WITH
  FILE = 1,
  NOREWIND,
  NOUNLOAD,
  REPLACE

Donde
Nombre_Base_de_Datos= Nombre de tu base de datos
Archivo_de_Backup= Nombre del archivo en el que generaras el backup

Funcionara para SQL 7 o superior

Espero que te sirva.
Saludos
Responder Con Cita
  #3  
Antiguo 31-03-2008
flor flor is offline
Registrado
 
Registrado: feb 2008
Posts: 7
Poder: 0
flor Va por buen camino
error aplicando backup

hola gracias por la informacion investigue sobre esas sentencias y trate de aplicarlas pero me marca este error (ADOQuery2:CommandText does not return a result set) me podrias ayudar a identificar que estoy haciendo mal, muchas gracias.
Responder Con Cita
  #4  
Antiguo 31-03-2008
Avatar de jcarteagaf
[jcarteagaf] jcarteagaf is offline
Miembro Premium
 
Registrado: abr 2006
Ubicación: La Paz, Bolivia
Posts: 651
Poder: 19
jcarteagaf Va por buen camino
Command Text does not.....

El error que te marca es porque tu estas ejecutando el Metodo Open ,para que te funcione debes usar el ExecSql:

Código Delphi [-]
Adoquery2.ExecSql;

Saludos
Responder Con Cita
  #5  
Antiguo 02-04-2008
KELVIN RC KELVIN RC is offline
Miembro
 
Registrado: nov 2007
Posts: 10
Poder: 0
KELVIN RC Va por buen camino
a jcarteagaf yo trabajo con delphi 6 enterprise, wxp sp2 y ms sql server 2000 prodias ayudarme aclarandome un poco mas detallado la forma de como hacer el backup y restore a la bd, me conecto a la bd atraves de un TADOConnection
Responder Con Cita
  #6  
Antiguo 02-04-2008
Avatar de jcarteagaf
[jcarteagaf] jcarteagaf is offline
Miembro Premium
 
Registrado: abr 2006
Ubicación: La Paz, Bolivia
Posts: 651
Poder: 19
jcarteagaf Va por buen camino
Aclarando la Figura

Hola, KELVIN RC si quieres usar el anterior ejemplo tienes que colocar un TADOQuery en tu aplicacion y colocarle el query que detallo a continuacion:

Código SQL [-]
BACKUP DATABASE
Nombre_Base_de_Datos
TO
  DISK =
Archivo_de_Backup
WITH
  NOFORMAT,
  NOINIT,
  NAME =
Nombre_Backup
,
  NOREWIND,
  NOUNLOAD,
  NOSKIP

Luego cambiar las lineas 1, 4 y 9 por los valores que tu desees. Puedes hacerlo en tiempo de diseño (los valores serian fijos) o en tiempo de ejecucion con instrucciones parecidos a los siguientes:

Código Delphi [-]
Adoquery1.sql[1] := Edit1.text; // en Edit1 tienes el nombre de la Base
Adoquery1.sql[4] := Edit2.text; // en Edit2 el nombre del archivo que quieres generar (incluido el path).
Adoquery1.sql[9] := Edit3.text; // Como se llamara el backup. puede tener el mismo nombre de la base
Adoquery1.Execsql;

La unica condicion es que la ruta del archivo donde generas el backup este en el mismo servidor que el SQL Server.
Lo mismo haces con el restore, pero para este ultimo la condición es la base de datos no este siendo utilizada. Espero que haber clarificado tus dudas.

Saludos
Responder Con Cita
  #7  
Antiguo 02-04-2008
KELVIN RC KELVIN RC is offline
Miembro
 
Registrado: nov 2007
Posts: 10
Poder: 0
KELVIN RC Va por buen camino
mas PREGUNTAS

ESTE CODIGO LO COLOCO EN LA PROPIEDAD SQL DEL ADOQUERY
BACKUP DATABASE
PRESTAMOS
TO
DISK = E:\KELVIN
WITH
NOFORMAT,
NOINIT,
NAME = PRESTAMO,
NOREWIND,
NOUNLOAD,
NOSKIP

CUANDO INTENTO ACTIVARLO ME DA EL SIGUIENTE ERROR
OBJETO PÀRAMETER MAL DEFINIDO SE PROPORCIONO INFORMACION INCORRECTA O INCUERENTE

LO EJECUTO DE LA SIGUIENTE MANERA EN EL SQL QUERY ANALYZER

BACKUP DATABASE
PRESTAMOS/*ES EL NOMBRE DE LA BASE DE DATOS*/
TO
DISK = 'E:\KELVIN'/*ES LA RUTA DONDE QUIERO GUARDAR EL ARCHIVO*/
WITH
NOFORMAT,
NOINIT,
NAME = 'PRESTAMO_Backup',/*AQUI NO SE K PONER Y LO DEJE = */
NOREWIND,
NOUNLOAD,
NOSKIP
Y AKI ME FUNCIONA

GRACIAS POR TU ATENCION

Última edición por KELVIN RC fecha: 02-04-2008 a las 21:57:47. Razón: ACLARATORI DE LA PREGUNTA
Responder Con Cita
  #8  
Antiguo 02-04-2008
Avatar de jcarteagaf
[jcarteagaf] jcarteagaf is offline
Miembro Premium
 
Registrado: abr 2006
Ubicación: La Paz, Bolivia
Posts: 651
Poder: 19
jcarteagaf Va por buen camino
Backup y restore

El error que te muestra es debido a que estas usando el archivo destino sin comillas en tu ejemplo dice:

E:\KELVIN

y deberia decir

'E:\KELVIN'

En el ejemplo que te di no tome en cuenta eso, para enviarlo con comillas usa lo siguiente:

Código Delphi [-]
Adoquery1.sql[4] := QuotedStr(Edit2.text);

Saludos.
Responder Con Cita
  #9  
Antiguo 03-04-2008
KELVIN RC KELVIN RC is offline
Miembro
 
Registrado: nov 2007
Posts: 10
Poder: 0
KELVIN RC Va por buen camino
mas PREGUNTAS

Con Eso Se Resolvio El Problema Solo Hacian Falta Las Comillas Pero Ahora,
El Archivo Generado En E:\kelvin Se Aumenta Sin Cambiar Nada En El Sistema, Ose Sin Hacer Ninguna Entrada O Transaccion Si Se Realiza 2 Veces El Backup Se Aumenta,
Sabes A Que Se Deve Esto Y Como Resoberlo

Gracias Por Tu Tiempo
Responder Con Cita
  #10  
Antiguo 03-04-2008
Avatar de jcarteagaf
[jcarteagaf] jcarteagaf is offline
Miembro Premium
 
Registrado: abr 2006
Ubicación: La Paz, Bolivia
Posts: 651
Poder: 19
jcarteagaf Va por buen camino
Backup y Restore

Si, SQL crea "versiones" del backup sobre el mismo archivo.

Lo puedes hacer es controlar en tu aplicación si el archivo existe y eliminarlo antes de hacer el backup:

Código Delphi [-]
if FileExists(NombredelArchivo) then
  DeleteFile(NombreDelArchivo)
.....
Ejecutar Backup
Saludos.
Responder Con Cita
  #11  
Antiguo 03-04-2008
KELVIN RC KELVIN RC is offline
Miembro
 
Registrado: nov 2007
Posts: 10
Poder: 0
KELVIN RC Va por buen camino
Preguntas

GRACIAS CON ESO SE RESOLBIO
PERO HAY QUE ARRECLAR ALGO QUE ES
if FileExists(NombredelArchivo)/* AQUI EL NOMBRE DEL ARCHIVO VA DENTRO DE COMILLAS*/ then DeleteFile(NombreDelArchivo)/* IGUAL AQUI CON SU RUTA CLARO*/.....Ejecutar Backup GRACIAS DE NUEVO
Responder Con Cita
  #12  
Antiguo 03-04-2008
KELVIN RC KELVIN RC is offline
Miembro
 
Registrado: nov 2007
Posts: 10
Poder: 0
KELVIN RC Va por buen camino
mas preguntas

ya se realiza a las mil maneras, pero prodrias ayudarme a ponerle una barra de progreso para que se vea un poco mas profecional

gracias de nuevo
Responder Con Cita
  #13  
Antiguo 04-04-2008
Avatar de jcarteagaf
[jcarteagaf] jcarteagaf is offline
Miembro Premium
 
Registrado: abr 2006
Ubicación: La Paz, Bolivia
Posts: 651
Poder: 19
jcarteagaf Va por buen camino
Barra de progreso

Lastimosamente no hay forma de colocar una barra de progreso para indicar al
usuario como va la cosa.

Pero puedes usar el componente JVWaitingGradient de los componentes Jedi que indica que se esta haciendo un proceso.

Tambien vi un componente parecido al control que usa el Management Studio del SQL 2005 (una rueda que va cambiando de color) en los componentes TMS.

Saludos
Responder Con Cita
  #14  
Antiguo 04-04-2008
santi33a santi33a is offline
Miembro
 
Registrado: jun 2005
Posts: 208
Poder: 19
santi33a Va por buen camino
Yo para la salva cree un Procedimineto almacenado y lo llamo desde Delphi y me funciona bien, yo uso MSSQL Server 2000:

Código SQL [-]
CREATE PROCEDURE BACKUP_BD AS
SET LANGUAGE spanish
DECLARE  @BACKUP VARCHAR(60)
DECLARE  @DIRECTORIO CHAR(20)
DECLARE  @NOMBRE CHAR(60)
SET @DIRECTORIO = 'd:\'
SELECT @nombre = 'DB '+
 CASE Convert(char(1),datepart(dw,getdate()))
  when 1 then 'Lunes'
  when 2 then 'Martes'
  when 3 then 'Miercoles'
  when 4 then 'Jueves'
  when 5 then 'Viernes'
  when 6 then 'Sabado'
  when 7 then 'Domingo'
 end + ' '+
 Convert(char(2),DATEPART(dd,getdate()))+
 ' '+ 'de '+
 case Convert(char(2),datepart(MM,getdate()))
   when  01 then 'Ene'
   when  02 then 'Feb'
   when  03 then 'Mar'
   when  04 then 'Abr'
   when  05 then 'May'
   when  06 then 'Jun'
   when  07 then 'Jul'
   when  08 then 'Ago'
   when  09 then 'Sep'
   when  10 then 'Oct'
   when  11 then 'Nov'
   when  12 then 'Dic'
 End +' '+'del '+
 convert(char(4),datepart(yyyy,getdate()))+'.BAK' 
set @backup = rtrim(@directorio)+rtrim(@nombre)
checkpoint

BACKUP DATABASE RRHH to disk = @backup  with init
BACKUP LOG RRHH TO disk = @backup 

DBCC SHRINKFILE (RRHH_Log, 100)

para restaurar nunca lo pude hacer de Delphi, siempre me dice que la BD esta en uso y no le encontré solución por lo que cuando lo necesito lo hago desde el Interprise Maneger del MSSQL
Responder Con Cita
  #15  
Antiguo 04-04-2008
KELVIN RC KELVIN RC is offline
Miembro
 
Registrado: nov 2007
Posts: 10
Poder: 0
KELVIN RC Va por buen camino
gracias

gracias santi33a pero soy nuevoen esto y no entiendo mucho lo que me esplicas, y los componentes jedy los buscare y tratare de hacerlo funcional, si saben donde encontrarlos se los agradeceria
Responder Con Cita
  #16  
Antiguo 17-04-2008
flor flor is offline
Registrado
 
Registrado: feb 2008
Posts: 7
Poder: 0
flor Va por buen camino
sigo con el error

hola ya puse el Adoquery2.ExecSQL; y aun me sale el mismo error cuando intento ejecutar la sentencia de sql del adoquery. el codigo que puse es el siguente:

procedure TForm2.Button2Click(Sender: TObject);
begin


ADOQuery2.Active:=true;
Adoquery2.ExecSQL;

end;

En la propiedad SQL del adoquery2 puse:

BACKUP DATABASE [JOY] TO DISK = C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\BACKUP\JOY.BAK' WITH NOFORMAT, NOINIT, NAME = JOY-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10

y el error es:

ADOQuery2: CommandText does not return a result set

necesito ayuda...

Responder Con Cita
  #17  
Antiguo 17-04-2008
Avatar de jcarteagaf
[jcarteagaf] jcarteagaf is offline
Miembro Premium
 
Registrado: abr 2006
Ubicación: La Paz, Bolivia
Posts: 651
Poder: 19
jcarteagaf Va por buen camino
SQL Server

El problema esta en llamar a Active

Código Delphi [-]
procedure TForm2.Button2Click(Sender: TObject);
begin

ADOQuery2.Active:=true;
Adoquery2.ExecSQL;
end;

Solo deberias llamara Execsql

Código Delphi [-]
procedure TForm2.Button2Click(Sender: TObject);
begin
Adoquery2.ExecSQL;
end;

Utilizas Active := true u Open para abrir datasets que devuelvan un conjunto de datos, en cambio execsql ejecuta las instrucciones sql, que no necesariamente devolveran datos a la aplicación.

Saludos.
Responder Con Cita
  #18  
Antiguo 17-04-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Dicho de otra forma:

Cuando el SQL es de seleccion (un SELECT *) se usa Active:= true (o bien adoquery1.Open que es lo mismo)

Cuando el SQL es de acción ( UPDATE, DELETE, ALTER TABLE, BACKUP) se usa ExecSql.

bye
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #19  
Antiguo 17-04-2008
Avatar de jcarteagaf
[jcarteagaf] jcarteagaf is offline
Miembro Premium
 
Registrado: abr 2006
Ubicación: La Paz, Bolivia
Posts: 651
Poder: 19
jcarteagaf Va por buen camino
Open vs Execsql

Cita:
Empezado por Lepe Ver Mensaje
Dicho de otra forma:

Cuando el SQL es de seleccion (un SELECT *) se usa Active:= true (o bien adoquery1.Open que es lo mismo)

Cuando el SQL es de acción ( UPDATE, DELETE, ALTER TABLE, BACKUP) se usa ExecSql.

bye
Como diria el Chavo del Ocho

Eso, eso, eso, eso......
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
Inserción y recuperación de campos BLOB Ismael Campos PHP 4 16-08-2007 07:12:43
Recuperación de campo long raw daviniagh API de Windows 0 21-08-2006 22:17:09
Problema BLOB Oracle en recuperación rodmayes Conexión con bases de datos 1 27-06-2006 00:00:30
Recuperación de Memoria dinámica adpa Varios 1 15-12-2005 15:29:10
Recuperacion de una Bases de Datos Jose Mari Firebird e Interbase 0 15-03-2005 17:37:00


La franja horaria es GMT +2. Ahora son las 01:30:39.


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