Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Como desconecto de Interbase (https://www.clubdelphi.com/foros/showthread.php?t=12431)

k2k2k2 16-07-2004 00:13:24

Como desconecto de Interbase
 
Hola a todos, estoy intentado restaurar con IBRestoreService, mi problema está cuando intento desconectar la base de datos.

Este es el código que uso para desconectar:

DataBase1.Connected := false;
DataBase1.CloseDataSets;
DataBase1.Close;
DataBase1.Free;

Cuando salgo de la aplicación uso este mismo código para desconectar la base de datos y sin problemas, pero cuando estoy intentado restaurar la base de datos con IBRestoreService, justo cuando hago DataBase1.Connected := false se produce el siguiente error.

Access violation at address 004C64B1 in module 'CentroMedico.exe'. Read of address 000000D2

Hay algun maestro por aquí, que me pueda esclarecer un poco de que va esto, por que estoy ya de los nervios. Un saludo.

k2k2k2 16-07-2004 18:13:00

Bueno acabo de encontrar la respuesta a mi quebradero de cabeza, asi que me respondo yo mismo.

El problema estaba en que no puedo cerrar la base de datos si tienes una ventana abierta conectada a la base de datos; intente cerrando la tabla que tenía asociado a esta ventana, es decir IBTable.Active := false, pero no vale con esto. Para que la base de datos desconecte sin error, debemos incluso cerrar todas las ventanas conectadas a la base de datos, y además liberar la memoria de ellas.

Un trozo de código:
...
// Cerramos la conexión con la base de datos.
frmPrincipal.Close;
frmPrincipal.Free;
DMPrincipal.db.Connected:=false;
// Comenzar
ServiceStart;
// Si se quiere ver el progreso...
if Verbose then
begin
While not Eof do
MRestore.Lines.Add(GetNextLine);
end;
finally
Active := False;
// Vovemos a conectar con la base de datos
DMPrincipal.Db.Connected:=true;
DMPrincipal.txn.Active:=true;
DMPrincipal.IBTPacientes.Active:=true;
Application.CreateForm(TfrmPrincipal, frmPrincipal);
frmPrincipal.Show;
Screen.Cursor := crDefault;

...:D
Bueno espero que esta explicación le sirve a alguién. Un saludo.


La franja horaria es GMT +2. Ahora son las 20:09:35.

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