| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Lun 13 Ago, 2007 10:46 am Asunto: Firebird y copia de seguridad |
|
|
Necesito que me echéis una mano. He descargado, no sé de donde, un fichero llamado fibs202source.zip y no soy capaz de hacerlo funcionar. Ya he visto que son fuentes de pascal, pero al abrir los ficheros faltan algunos componentes. ¿Os suena a alguno este fichero? Gracias por delante. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
rivo Lt JG

Registrado: 13 Mar 2004Mensajes: 72Ubicación: Asturias (España)
|
Publicado: Lun 13 Ago, 2007 2:20 pm Asunto: |
|
|
hola cesar, para las copias de seguridad yo utilice los componentes ibbackupservice y el ibrestore service. si quieres te pongo el codigo aqui si quieres probarlo.
un saludo!! |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Lun 13 Ago, 2007 4:16 pm Asunto: |
|
|
Esperamos que esta >parte< pueda servirte, aun que he visto que ya tienes información sobre los componentes antes mencionados en este >post<
Saludos!!
Haaa! por cierto los archivos a los cuales te refieres se encuentran en la siguiente pagina (>aqui<) _________________
 |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
rivo Lt JG

Registrado: 13 Mar 2004Mensajes: 72Ubicación: Asturias (España)
|
Publicado: Lun 13 Ago, 2007 11:44 pm Asunto: |
|
|
jajja, ostras perdona angel es que hoy tengo un gripazo de la leche y no se por donde ando, aqui os dejo lo que tengo
esto es el back up :
| Código: |
AnsiString ans_fecha;
TDate fecha=Now();
String sfecha= DateToStr(Now());
ans_fecha = AnsiString(sfecha.c_str());
//ShowMessage(AnsiString(sfecha));
fecha=fecha.FormatString("dd/mm/yyyy");
String d,m,a;
d=sfecha.SubString(1,2);
m=sfecha.SubString(4,2);
a=sfecha.SubString(9,2);
String _fecha=d+"_"+m+"_"+a;
IBBackupService1->ServerName="Local Server";
IBBackupService1->LoginPrompt=False;
//IBBackupService1->Active = True;
IBBackupService1->Params->Add("user_name=sysdba");
IBBackupService1->Params->Add("password=masterkey");
IBBackupService1->Active = True;
try
{
IBBackupService1->Verbose = True;
TBackupOption IgnoreLimbo, NonTransportable;
IBBackupService1->Options<<IgnoreLimbo<<NonTransportable>DatabaseName =ExtractFilePath(Application->ExeName)+"\HOBBYSOFTBD.GDB";
IBBackupService1->BackupFile->Add(ExtractFilePath(Application->ExeName)+"\copias_de_seguridad\\"+_fecha+".gbk");
ModuloSQL->IBTransaction1->Active=true;
ModuloSQL->IBTransaction1->Commit();
IBBackupService1->ServiceStart();
while (!(IBBackupService1->Eof))
{
BackupMemo->Lines->Add(IBBackupService1->GetNextLine());
}
}
__finally
{
IBBackupService1->Active = false;
}
ShowMessage("Copia de seguridad creada corectamente en la ruta "+ ExtractFilePath(Application->ExeName)+"\copias_de_seguridad\\"+_fecha+".gbk");
this->Close();
|
y esto el restore
| Código: |
try
{
//
ModuloSQL->SQL1->Close();
ModuloSQL->SQL2->Close();
ModuloSQL->IBTransaction1->Active=true;
ModuloSQL->IBTransaction1->Commit();
ModuloSQL->IBDatabase1->CloseDataSets();
ModuloSQL->IBDatabase1->Close();
IBRestoreService1->ServerName="Local Server";
IBRestoreService1->LoginPrompt=False;
IBRestoreService1->Params->Add("user_name=sysdba");
IBRestoreService1->Params->Add("password=masterkey");
IBRestoreService1->Active=True;
IBRestoreService1->Verbose=True;
TRestoreOption Create, UseAllSpace;
//ModuloSQL->IBDatabase1->Connected=false;
//EXEC SQL;
//commit realase;
IBRestoreService1->Options<< Replace<<UseAllSpace>PageBuffers=3000;
IBRestoreService1->PageSize=4096;
OpenDialog1->Execute();
if(OpenDialog1->FileName.IsEmpty())
return;
IBRestoreService1->BackupFile->Add(OpenDialog1->FileName);
IBRestoreService1->DatabaseName->Add(ExtractFilePath(Application->ExeName)+"\HOBBYSOFTBD.GDB");
IBRestoreService1->ServiceStart();
while (!(IBRestoreService1->Eof))
{
RestoreMemo->Lines->Add(IBRestoreService1->GetNextLine());
}
}
__finally
{
IBRestoreService1->Active= False;
ModuloSQL->IBDatabase1->DatabaseName=ExtractFilePath(Application->ExeName)+"\HOBBYSOFTBD.GDB";
ModuloSQL->IBDatabase1->Open();
}
ShowMessage("Copia de Seguridad Restaurada satisfactoriamente");
this->Close();
|
bueno quizas el codigo este un poco chapucero por que tuve que estar ravilando con el bastante pero asi funcionaba.
un saludo!! |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mar 14 Ago, 2007 9:59 am Asunto: |
|
|
Gracias rivo. Que te mejores de la gripe. Entre tu respuesta y la de César sacaré adelante el problema. Una cosa: ¿Por qué no simplificas el backup y eliminas conversiones?
| Código: | TBackupOptions oBackup;
oBackup.Clear();
oBackup << IgnoreLimbo <<NonTransportable>ServerName = "Local Server";
IBBackup->LoginPrompt = false;
IBBackup->Params->Add("user_name = sysdba");
IBBackup->Params->Add("password = masterkey");
IBBackup->Active = true;
try
{
IBBackup->Verbose = true;
IBBackup->Options = oBackup;
IBBackup->DatabaseName = Asociacion->DatabaseName;
IBBackup->BackupFile->Add(ExtractFilePath(Application->ExeName) + "\\copia_de_seguridad\\" + Date().FormatString("yyyymmd") + ".gbk");
IBBackup->ServiceStart();
while (!IBBackup->Eof)
{
Barra->Caption = "Backup » " + Trim(cCadena.SubString(cCadena.Pos(":") + 1, cCadena.Length()));
}
}
__finally
{
IBBackup->Active = false;
} | [/code] _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Ultima edición por Angel el Mar 14 Ago, 2007 10:28 am, editado 1 vez |
|
| Volver arriba |
|
 |
rivo Lt JG

Registrado: 13 Mar 2004Mensajes: 72Ubicación: Asturias (España)
|
Publicado: Mar 14 Ago, 2007 10:18 am Asunto: |
|
|
si es mas sencillo, pero cuando lo hice pensaba que el metodo formatstring devolvia objeto tipo date (al compilar no daba error) y pero luego al utilizarlo me daba error, entonces para solucionarlo utilice eso, pero mas adelante me di cuenta que formatstring devolvia un ansistring, pero bueno como lo otro me funcionaba bien lo deje como taba.
un saludo!! |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mar 14 Ago, 2007 10:35 am Asunto: |
|
|
Es evidente que mientras yo editaba mi último mensaje, rivo estaba escribiendo el suyo. ¡Cosas de internet!
Me esta ocurriendo una cosa curiosa al ejecutar ambos procesos: cuando llego a activar el elemento, por ejemplo IBBackup->Active = true, me da un error SPB Constant Unknow y no sé por donde pillarlo. ¿Alguna idea?
El código que estoy usando es este:
| Código: | void __fastcall TfSocio::BackupClick(TObject *Sender)
{
TBackupOptions oBackup;
oBackup.Clear();
oBackup << IgnoreLimbo <<NonTransportable>ServerName = "Local Server";
IBBackup->LoginPrompt = false;
IBBackup->Params->Add("user_name = sysdba");
IBBackup->Params->Add("password = masterkey");
IBBackup->Verbose = true;
IBBackup->Options = oBackup;
IBBackup->Active = true;
Barra->OptionsText = toCaption;
try
{
IBBackup->DatabaseName = Asociacion->DatabaseName;
IBBackup->BackupFile->Add(ExtractFilePath(Application->ExeName) + "\\Seguridad\\" + Date().FormatString("yyyymmd") + ".gbk");
tAsociacion->Active = true;
tAsociacion->Commit();
IBBackup->ServiceStart();
while (!IBBackup->Eof)
{
cCadena = IBBackup->GetNextLine();
Barra->Caption = "Backup » " + Trim(cCadena.SubString(cCadena.Pos(":") + 1, cCadena.Length()));
}
}
__finally
{
IBBackup->Active = false;
}
} |
_________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mar 14 Ago, 2007 12:24 pm Asunto: |
|
|
Generalmente este error se presenta, cuando "alguien" esta usando la base de datos y tiene bloqueado a un registro, en algunos casos también se presenta cuando la base de datos, que estas a punto de restaurar o de crearle un Backup, se encuentra dañada.
por ejemplo para generar un Backup, realizo la siguiente rutina y aun no me a marcado errores.
| Código: |
this->ibBackupBase->DatabaseName = RutaDeLaBase;
this->ibBackupBase->BackupFile->Add(NombreRespaldo);
this->ibBackupBase->Attach();
this->ibBackupBase->Active = true;// activamos el servicio
try
{
this->ibBackupBase->ServiceStart();// iniciamos la copia de seguridad
Memo1->Clear();
Memo1->Lines->Add("----------------------------------");
Memo1->Lines->Add(" - Inicio del Proceso -");
Memo1->Lines->Add("----------------------------------");
while(!this->ibBackupBase->Eof)
{
Application->ProcessMessages();
Memo1->Lines->Add(this->ibBackupBase->GetNextLine());
}
Memo1->Lines->Add("-----------------------------------");
Memo1->Lines->Add("- Proceso Realizado Con Exito!! -");
Memo1->Lines->Add("-----------------------------------");
}
catch(...)
{
Memo1->Lines->Add("------------------------------------");
Memo1->Lines->Add("- Error en el Proceso, Verifique!! -");
Memo1->Lines->Add("------------------------------------");
}
this->ibBackupBase->Active = false;// Desactivamos el servicio
this->ibBackupBase->DatabaseName = "";
this->ibBackupBase->BackupFile->Clear();
|
y para restaurar la base de datos desde un archivo
el siguiente codigo
| Código: |
this->ibRestoreBase->DatabaseName->Add(RutaDeLaBase); // nombre de la base
this->ibRestoreBase->BackupFile->Add(NombreRespaldo); // archivo backup
this->ibRestoreBase->Options << Replace; // Añadimos la opcion de reemplazar archivo de BDD
this->ibRestoreBase->Attach();
this->ibRestoreBase->Active = true; // Activamos el servicio
try
{
this->ibRestoreBase->ServiceStart(); // Iniciamos la restauracion
Memo1->Clear();
Memo1->Lines->Add("----------------------------------");
Memo1->Lines->Add(" - Inicio del Proceso -");
Memo1->Lines->Add("----------------------------------");
while(!this->ibRestoreBase->Eof)
{
Application->ProcessMessages();
Memo1->Lines->Add(this->ibRestoreBase->GetNextLine());
}
Memo1->Lines->Add("-----------------------------------");
Memo1->Lines->Add("- Proceso Realizado Con Exito!! -");
Memo1->Lines->Add("-----------------------------------");
}
catch(...)
{
Memo1->Lines->Add("------------------------------------");
Memo1->Lines->Add("- Error en el Proceso, Verifique!! -");
Memo1->Lines->Add("------------------------------------");
}
this->ibRestoreBase->Active = false;// Desactivamos el servicio
this->ibRestoreBase->DatabaseName->Clear();
this->ibRestoreBase->BackupFile->Clear(); |
Aun asi, verifica que tu base de datos no se haya dañado con alguna restauracion. pero lo del mensaje es por que "alguien" sigue usando la base de datos, cuando tu estas haciendo un respaldo _________________
 |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mar 14 Ago, 2007 1:01 pm Asunto: |
|
|
Gracias César. He aislado parte del problema, y me ha sorprendido. El mensaje de error SPB... se produce si pongo en el código las líneas:
| Código: | IBBackup->LoginPrompt = false;
IBBackup->Params->Add("user_name = sysdba");
IBBackup->Params->Add("password = masterkey"); |
En el momento que las quito, evidentemente me pide usuario y clave pero no da error. No lo entiendo.
Otra cosa. Buscando como funcionan estos elementos, encontré un foro alemán en que añadía unas líneas:
| Código: | IBBackupService1->BackupFile->Add("c:\\temp\\e1.gbk = 2048");
IBBackupService1->BackupFile->Add("c:\\temp\\e2.gbk = 4096");
IBBackupService1->BackupFile->Add("c:\\temp\\e3.gbk "); |
Y, evidentemente, se generaban esos tres ficheros pero no acabo de entender para que valen.  _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mar 14 Ago, 2007 11:21 pm Asunto: |
|
|
No muy entiendo Aleman (jeje ), pero las tres lineas que usas, son para definir 3 archivos de respaldo de la misma base de datos aun que con diferentes tamaños de pagina, la primera con 2048, la segunda con 4096 y la tercera con los parametros por default que tiene la base de datos.
Con respecto a las líneas que te marcan en el codigo, intenta establecer dentro de tu componente IBBackup los datos de la cuenta y contraseña
presionando doble click en el mismo, generalmente lo uso asi y no he tenido problemas. _________________
 |
|
| Volver arriba |
|
 |
rivo Lt JG

Registrado: 13 Mar 2004Mensajes: 72Ubicación: Asturias (España)
|
Publicado: Mie 15 Ago, 2007 1:16 pm Asunto: |
|
|
eso de paginas me suena a sistemas operativos y es la que me queda pa acabar la carrera (dejame tocar madera...).
yo es qeu lo del ibbackservice y encontre fragmentos por el foro y luego fui adaptando y probando hasta que me funciono.
eso si cuando vayas a probar si funciona el backup no tengas el firebird abierto, por que sino te dara un error de que no se puede copiar, ya que esta el firebird conectada a ella, este fue un falo que me daba a mi y me costo un rato darme cuenta de ello, jajaja.
un saludo!! |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Jue 16 Ago, 2007 4:01 pm Asunto: |
|
|
| rivo escribió: | | eso si cuando vayas a probar si funciona el backup no tengas el firebird abierto, por que sino te dara un error de que no se puede copiar, ya que esta el firebird conectada a ella, este fue un falo que me daba a mi y me costo un rato darme cuenta de ello, jajaja. |
Imagino que te refieres a tenr la base de datos cerrada, ¿no? _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
rivo Lt JG

Registrado: 13 Mar 2004Mensajes: 72Ubicación: Asturias (España)
|
Publicado: Jue 16 Ago, 2007 4:40 pm Asunto: |
|
|
si  |
|
| Volver arriba |
|
 |
|