Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Ayuda Leo, TIBValidationService, por favor

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Ayuda Leo, TIBValidationService, por favor Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mensaje    Asunto: Responder citando

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!
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mensaje    Asunto: Responder citando

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


_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mostrar mensajes de anteriores:   
Cambiar a:  
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


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.