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 

IBX, transaction, Comit, Rollback

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: IBX, transaction, Comit, Rollback Responder citando

Buenas a todos.

Quisiera saber si alguien puede decirme cual es la "secuencia" para trabajar con transacciones en forma explicita para un insert c/ un
form-ShowModal creo que es algo así...


try
{
Fdm->Tclientes->Insert();
Fabmclientes->Caption = "Agregar cliente.";
if(Fabmclientes->ShowModal() == mrOk)
{
Fdm->Tclientes->Post();
Fdm->IBTransaction->CommitRetaining();
}
}
catch(...)
{
Fdm->IBTransaction->RollbackRetaining();
Fdm->Tclientes->Refresh();
}

Pero estoy cansado Crying or Very sad de cartelitos como "Transaction Active" o "error operation... Dataset Close" etc.

Desde ya muchisimas gracias.
_________________
Salu2
Ale
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

HOLA:

Prueba antes de finalizar las transacciones saber si la transaction esta activa

if (IBTransaction1 ->InTransaction)


By.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola, para trabajar con transacciones explicitas debes encerrar las posibilidades de realizar modificaciones fuera del ambito de la transaccion.

Por ejemplo tener los controles de datos con la propiedad ReadOnly a true para evitar modificaciones fuera del contexto, puedes poner un Boton "Editar", otro "Aceptar" y un tercero "Cancelar", los dos ultimos los pones Enabled a false, asocia los eventos OnClick como sigue:
Código:

//---------------------------------------------------------------------------

void __fastcall TForm1::Editar1Click(TObject *Sender)
{
EditarONoEditar();
if(!IBTransaction1 ->InTransaction)
 IBTransaction1->StartTransaction();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Cancelar1Click(TObject *Sender)
{
EditarONoEditar();
IBTransaction1->Rollback();
//Aqui pones el codigo para reabrir tus tablas

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Aceptar1Click(TObject *Sender)
{
EditarONoEditar();
IBTransaction1->CommitRetaining();
}
//---------------------------------------------------------------------------
//Funcion para Habilitar/Deshabilitar la escritura en las tablas
void __fastcall TForm1::EditarONoEditar() //That is the question...
{
   TDBEdit * Edit;
              TDBGrid * Grid;
   for(int i=0; i < ComponentCount; i++)
   {

      if (Components[i]->ClassNameIs("TDBEdit"))
      {

       Edit = (TDBEdit *)Components[i];
                             if(Edit->ReadOnly) //Caso de no estar en edicion
                              {
          Edit->ReadOnly = false; //Permitimos la edicion
          Edit->Color = 0x00E6EBFF;//Podemos cambiar el color de fondo para enfatizar que estamos editando
                              }
                            else
                              {
                                Edit->ReadOnly = true; //Bloqueamos la edicion
          Edit->ParentColor =true;//Devolvemos el color original
                               }
      }

                           if (Components[i]->ClassNameIs("TDBGrid"))
      {

       Grid = (TDBGrid *)Components[i];
                             if(Grid->ReadOnly)
                                Grid->ReadOnly=false;
                             else
                                Grid->ReadOnly=true;                             
                            }
                  }
                 //Habilitamos o Deshabilitamos los MenuItems segun caso
                  Editar1->Enabled=!Editar1->Enabled;
                  Aceptar1->Enabled=!Aceptar1->Enabled;
                  Cancelar1->Enabled=!Cancelar1->Enabled;                               
}
//------------------------------------------------


Disculpa la indentacion pero no tengo tiempo para corregirla, de todas formas esta probado y debe trabajar.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
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.