Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Error con Restore (https://www.clubdelphi.com/foros/showthread.php?t=75501)

Ledian_Fdez 29-08-2011 15:26:41

Error con Restore
 
Hola familia delphinos:

Estoy desarrollando una aplicación en Delphi7 y SQL Server 2000.
Con este codigo intento restaurar la base de datos.

Código Delphi [-]
procedure TPrincipalForm.RestaurarBD1Click(Sender: TObject);
var
 Camino : String;
begin
 Camino := 'c:\SalvaSAF';
 try
  QrySalvRest.SQL.Clear;
  QrySalvRest.SQL.Add('Restore database SAF');
  QrySalvRest.SQL.Add('from disk = '+ QuotedStr(Camino));
  QrySalvRest.SQL.Add('With Replace');
  QrySalvRest.ExecSQL;
  Application.MessageBox('La restaura terminó satisfactoriamente.','Salvar BD', MB_ICONINFORMATION);
 except
  Application.MessageBox('No se pudo restaurar la base de datos.','Salvar BD', MB_ICONERROR);
 end;
end;

Este es el error que me lanza:

Cita:

Exclusive access could not be obtained because the database is in use

Casimiro Noteví 29-08-2011 15:34:17

Está claro, ¿verdad?, estás restaurando una BD en uso, tendrá que desconectar todo el mundo ;)

Ledian_Fdez 29-08-2011 16:10:47

Desconectar ???
 
Me podrian explicar ¿cómo desconectar a todo el mundo?

Salu2,
Y grasias de antemano.

Casimiro Noteví 29-08-2011 16:15:15

No tengo ni idea de cómo se hace en MS SQL :confused:
Aunque debes tener cuidado de no sobreescribir la BD actual, haz una copia de la misma antes de restaurar.

Ledian_Fdez 29-08-2011 16:48:18

¿cómo desconectar a todo el mundo?
 
Intente con
Código Delphi [-]
DM.Connect.Connected := False;
pero sigue saliendo el mismo error.

luisgutierrezb 29-08-2011 17:04:43

yo te recomiendo que pongas la base de datos en modo "single",
EXEC sp_dboption 'Works', 'single user', 'true'
EXEC sp_dboption 'Works', 'single user', 'false'

Works seria la base de datos, y el verdadero o falso es para ponerlo o quitarlo...

restauras el respaldo y la vuelves a poner multiusuario....

mas informacion...

http://www.kodyaz.com/articles/alter...user-mode.aspx

Ledian_Fdez 29-08-2011 17:38:38

Cita:

Empezado por luisgutierrezb (Mensaje 410359)
yo te recomiendo que pongas la base de datos en modo "single",
EXEC sp_dboption 'Works', 'single user', 'true'
EXEC sp_dboption 'Works', 'single user', 'false'

Works seria la base de datos, y el verdadero o falso es para ponerlo o quitarlo...

restauras el respaldo y la vuelves a poner multiusuario....

mas informacion...

http://www.kodyaz.com/articles/alter...user-mode.aspx

Intente hacer lo que me dijo pero ... no me deja, ahí le muestro el error:

Database state cannot be changed while other users are using the database SAF

En espera de su ayuda
Mil grasias de entemano

luisgutierrezb 29-08-2011 17:53:35

es que hay otros usuarios usando la base de datos, no puedes restaurar algo en donde otros están trabajando...

Ledian_Fdez 29-08-2011 18:56:54

Es cierto, pero ...¿Como restaurar?

Salu2.

luisgutierrezb 29-08-2011 20:50:54

a lo mejor se podria encontrar una instruccion para tumbar procesos del mssql, y tumbar todo, y poder restaurar, eso si, si tumbas procesos podria haber cambios inesperados, creo yo...

luisgutierrezb 29-08-2011 21:13:40

esta página habla de los procesos en MSSQL con codigo T-SQL

http://www.kodyaz.com/articles/kill-...-database.aspx

Ledian_Fdez 30-08-2011 14:38:59

Aun no logro restaurar !!!
 
Hola amigos, les cuento que he intentado con todo lo que han expuesto acá en este foro y aun no logro Restaurar la base de datos desde la aplicación.

Tratare de exponer con más claridad lo que me sucede.

Estoy haciendo un sistema en delphi7 y uso como gestor de base de datos SQL-Server 2000

En el DM (TDataModule) tengo un Connection (TADOConnection) donde en el connection string establezco la cadena de conexión.

En el QrySalvRest (TADOQuery) como pueden observar le paso por código la cadena SQL y luego lo ejecuto.

Código Delphi [-]
procedure TPrincipalForm.RestaurarBD1Click(Sender: TObject);
var
 Camino : String;
begin
 Camino := 'c:\SalvaSAF';
 try
  QrySalvRest.SQL.Clear;
  QrySalvRest.SQL.Add('Restore database SAF');
  QrySalvRest.SQL.Add('from disk = '+ QuotedStr(Camino));
  QrySalvRest.SQL.Add('With Replace');
  QrySalvRest.ExecSQL;
  Application.MessageBox('La restaura terminó satisfactoriamente.','Salvar BD', MB_ICONINFORMATION);
 except
  Application.MessageBox('No se pudo restaurar la base de datos.','Salvar BD', MB_ICONERROR);
 end;
end;

Me lanza el siguiente error:

Exclusive access could not be obtained because the database is in use

nota: Yo soy el único usuario que esta trabajando con la base de datos ya que el Query con el que intento restaurar tiene establecido en el conection string el Connection (TADOConnection).

La verdad que no se que hacer, y mi cliente no quiere depender del informático para realizar la restaura, el quiere que la aplicación le de esa facilidad.

De antemano no se como agradecerles la ayuda que ya me han brindado.

Ledian_Fdez 31-08-2011 15:59:16

Problema resuelto!!!
 
Al fin !!! problema resuelto, es que en el connection string tenia asociada la base de datos.

muchas grasias a todos


La franja horaria es GMT +2. Ahora son las 02:18:24.

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