 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
JesúsGandia Master


Registrado: 17 Jul 2004Mensajes: 403Ubicación: Gandia, Valencia
|
Publicado: Mar 16 Sep, 2008 9:15 pm Asunto: Ayuda Leo, TIBValidationService, por favor |
|
|
Estoy intentando implementar un botón para que en caso de que la base de datos de Interbase se corrompa, poder arreglarla con el componente 'TIBValidationService'. He probado con las opciones (<<ValidateDB <<ValidateFull) y (<< CheckDB << ValidateDB), pero no consigo que me muestre ningún mensaje en el TMemo. El codigo funciona pero parece que no hace nada. Me pueden ayudar por favor.
La Propiedad GlobalAction del TIBValidationService la tengo como "CommitGlobal"
Este el el Codigo que Utilizo con Interbase 2007 y CodeGear C++ 2007:
| Código: |
void __fastcall TFrameCopiaSeg::BtnValidarClick(TObject *Sender)
{
if(MessageDlgPos(
"¡ Aviso !...\n"
"Se procederá a Reorganizar los Índices, los Campos,\n"
"las Tablas de la Base de Datos y a Limpiar el espacio\n"
"no utilizado por la carga de transacciones.\n\n"
"Ello es útil cuando existen problemas en la Base de Datos,\n"
"posiblemente causadas por un fallo del Hardware del PC\n"
"o TPV o un fallo producido por el Sistema Operativo.\n\n"
"Solo ejecute esta opción si realmente tiene problemas\n"
"de ejecución con la Base de Datos.\n\n"
"¿Está seguro de querer continuar?",
mtConfirmation, TMsgDlgButtons() << mbNo <<mbOK>Left + 290, frmVentas->Top + 300)== mrOk)
{
try // Codigo protegido
{
//Ruta a el fichero de copia de Seguriddad
TIniFile *INI = new TIniFile(frmVentas->BtnCambioCamarero->Caption + "Barman.ini");
AnsiString NombrePC = INI->ReadString("PC", "Nombre PC", "");
AnsiString Ruta = FrameCopiaSeg->DirCopia->Directory + "\\TPV.IB";
AnsiString Ruta2 = INI->ReadString("PC", "Ruta Servidor","") + "\\TPV.IB";
AnsiString Servidor = INI->ReadString("PC", "Nombre Servidor", NombrePC);
delete INI;
bool Existe = false;
MDatos->IBDValidServ->ServerName = Servidor;
if(!LMDGBBackup->Tag)
{
if(FileExists(Ruta.c_str()))
{
MDatos->IBDValidServ->DatabaseName = Ruta;
Existe = true;
}
}
else
{
if(FileExists(Ruta2.c_str()))
{
MDatos->IBDValidServ->DatabaseName = Ruta2;
Existe = true;
}
}
if(Existe)
{
MDatos->IBDatabase->Close();
Screen->Cursor = crHourGlass;
MDatos->IBDValidServ->Attach();
MDatos->IBDValidServ->Active = true;
MDatos->IBDValidServ->Options << CheckDB <<ValidateDB>IBDValidServ->ServiceStart();
Application->ProcessMessages();
MemoBackup->Clear();
// Mientras se esté ejecutando.
while(!MDatos->IBDValidServ->Eof)
{
MemoBackup->Lines->Add(MDatos->IBDValidServ->GetNextLine());
}
MDatos->IBDValidServ->Active = false;
Screen->Cursor = crDefault;
MessageDlgPos(
"Reorganización y Limpieza realizada con éxito.\n\n"
"Saldrá del programa, para que los cambios surjan efecto."
,mtInformation, TMsgDlgButtons() <<mbOK>Left + 515, frmVentas->Top + 85);
MDatos->IBDatabase->Tag = 1;
frmVentas->BtnEstado->Click();
frmVentas->BtnSalirVentas->Click();
}
else
MessageDlgPos(
"Reorganización y Limpieza Cancelada.\n\n"
"No se ha encontrado el fichero (TPV.ib)."
,mtInformation, TMsgDlgButtons() <<mbOK>Left + 515, frmVentas->Top + 85);
}
catch(...) // En caso de Error
{
Screen->Cursor = crDefault;
MessageDlgPos("Ha habido un Error en el proceso.\n"
"Sus Datos aun no están Seguros.\n"
"Saldrá del Programa.\n\n"
"Error Número: (30)\n\n"
"Anote el Número de Error y\n"
"pongase en Contacto con su Servicio Técnico."
,mtWarning, TMsgDlgButtons() <<mbOK>Left + 290, frmVentas->Top + 300);
MDatos->IBDatabase->Tag = 1;
frmVentas->BtnEstado->Click();
frmVentas->BtnSalirVentas->Click();
}
}
}
|
_________________ Muchos hombres no se equivocan jamás porque no se proponen nada razonable. |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mie 17 Sep, 2008 11:08 am Asunto: |
|
|
Hola Jésus, lo unico que veo diferente es que no inicias el Servicio
| Código: | MemoBackup->Clear();
// Mientras se esté ejecutando.
MDatos->IBDValidServ->ServiceStart(); // <-- Veo que esta linea falta
while(!MDatos->IBDValidServ->Eof)
{
MemoBackup->Lines->Add(MDatos->IBDValidServ->GetNextLine());
}
|
Saludos! _________________
 |
|
| Volver arriba |
|
 |
JesúsGandia Master


Registrado: 17 Jul 2004Mensajes: 403Ubicación: Gandia, Valencia
|
Publicado: Mie 17 Sep, 2008 3:48 pm Asunto: |
|
|
Si que está Cerar, mira la Linea:
MDatos->IBDValidServ->Options << CheckDB <<ValidateDB>IBDValidServ->ServiceStart();
El problema es que al pegar el codigo en el foro despues de la linea donde aparece 'ValidateDB' Me sustituye el ';' por el simbolo '>'
Pero en mi codigo todo esta como toca. _________________ Muchos hombres no se equivocan jamás porque no se proponen nada razonable. |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mie 17 Sep, 2008 8:30 pm Asunto: |
|
|
Pues no creo que sea de preocupacion pues yo mismo he visto y comprobado que no sale nada.
Puede ser que "nuestras" bases de Datos esten bien y por ello no registre nada para mostrar en el Memo.
te paso una imagen para que veas como esta funcionando en mi computadora
 _________________
 |
|
| Volver arriba |
|
 |
JesúsGandia Master


Registrado: 17 Jul 2004Mensajes: 403Ubicación: Gandia, Valencia
|
Publicado: Mie 17 Sep, 2008 11:12 pm Asunto: |
|
|
Sí, mas o menos eso creía yo. pero...
El problema es que no tengo una base de datos corrupta para comprobarlo.
¿Hay forma de saber que el reparador no ha hecho nada?
Esto es para poder enseñar un mensaje al Cliente diciendole que la base de datos esta en perfecto estado.
Gracias Cesar. _________________ Muchos hombres no se equivocan jamás porque no se proponen nada razonable. |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|