 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Alejjandro Cdt

Registrado: 04 Feb 2003Mensajes: 22
|
Publicado: Mar 17 Feb, 2004 7:09 pm Asunto: IBX, transaction, Comit, Rollback |
|
|
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 de cartelitos como "Transaction Active" o "error operation... Dataset Close" etc.
Desde ya muchisimas gracias. _________________ Salu2
Ale |
|
| Volver arriba |
|
 |
TOÑO Master

Registrado: 26 Ago 2002Mensajes: 223Ubicación: Madrid - España -
|
Publicado: Mie 25 Feb, 2004 6:46 pm Asunto: |
|
|
HOLA:
Prueba antes de finalizar las transacciones saber si la transaction esta activa
if (IBTransaction1 ->InTransaction)
By. |
|
| Volver arriba |
|
 |
alfredo Master

Registrado: 13 Oct 2003Mensajes: 246Ubicación: Valencia Venezuela
|
Publicado: Jue 26 Feb, 2004 1:12 am Asunto: |
|
|
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 |
|
 |
|
|
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.
|