Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-11-2005
Luis Castillo Luis Castillo is offline
Miembro
 
Registrado: jun 2003
Ubicación: Colombia
Posts: 102
Poder: 21
Luis Castillo Va por buen camino
Transacciones...què permanece

Hola colegas.....

Me dado cuenta de algo....

Estoy trabajando en una base de datos en Delphi en Paradox.....utilizo un componente Database, con el cual hago mis transacciones...

database.starttransaction;
try
...
DataBase.Commit
Except
DataBase.RollBack;
End;

Tengo entendido, y lo he comprobado, que las transacciones son para asegurar la atomicidad de los procesos que modifican la base de datos y a la vez garantizar la integridad de los datos.

Y es asi que cuando me pasa un error, todo se desasce...PERO...En que estado quedan las componentes TTAble que utilizo....es decir, si antes de la transaccion estaban en modo INSERT, si se hace un rollback yo creia que quedaban en insert...

Y ese es el problema que tengo... Tengo 2 tablas: TABLE1 Y TABLE2

{TABLE1 Y TABLE2 ESTAN EN INSERT}
database.starttransaction;
try
...
Table1.Post
...
--En esta linea ocurre error---
...
Table2.post
DataBase.Commit
Except
DataBase.RollBack;
End;

Donde ocurre el error salta al rollback....Entonces la TABLE1 queda en modo browser (ocacionandome dificultades despues) y la TABLE2 queda como estaba en INSERT

Amigos....esto es asi...o que. Que pueden decir...

Gracias
__________________
LK
Responder Con Cita
  #2  
Antiguo 01-11-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Para evitar estos problemas tienes que analizar el estado del Dataset correspondiente.

Código Delphi [-]
 procedure TForm1.Button1Click(Sender: TObject);
 begin
   if DataSource1.State in [ dsInsert] then
   ShowMessage('Podemos insertar')
   else
   ShowMessage('No podemos insertar');
 end;

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 01-11-2005
Luis Castillo Luis Castillo is offline
Miembro
 
Registrado: jun 2003
Ubicación: Colombia
Posts: 102
Poder: 21
Luis Castillo Va por buen camino
Aclaremos....

Muchas gracias por la respuestas....pero creo que no me explique bien.

El condicional que haces de si la tabla esta en modo insert, en realidad no creo que me sirva porque yo se que ambas tablas estan en modo Insert. El post va a hacer Post para ambas. Pero como esta en el ejemplo, despues de hacerle el Post a la primera ocurre un error y no se hace el post a la segunda. Entonces la primera, debido a que le hice el Post queda en modo Browser, y la segunda como no le alcanzo a hacer el POst que en insert....

Y pensè que ambas debian retornar a su estado inicial....


¿Existe algun parametro o algo asi para que todas retornen a su estado inicial?

Gracias
__________________
LK
Responder Con Cita
  #4  
Antiguo 22-12-2005
david duarte david duarte is offline
Miembro
 
Registrado: ago 2005
Posts: 217
Poder: 19
david duarte Va por buen camino
Solamente una pregunta que no se si sea la resupuesta para esta pregunta

No se supone que cuando haces commits, se supone que se guarda toda la informacion??? que es lo mismo si hicieras un post o un applyupdates??

Si no es asi, pues creo que he vivido engañado toda mi vida

Lo que pasa es que yo tambien quiero ocupar una transaccion, pero no se si se pueda utilizar con tablas paradox, y una pregunta mas(ya se que no esta permitido, pero no quiero abrir otro hilo por la pregunta) como dice en la pregunta de Luis castillo, que pasaria si al aplicar mi commit(las 2 tablas estan en insert), a la primera tabla se hace todo bien y guarda los datos, pero en la segunda tabla sucede un error, entonces la primera tabla, ya esta en browse y la segunda queda en insert. al hacer el rollback se deshacen los cambios de la primera tabla???, entonces tendria que modificar el estado de la primera tabla. o simplemente se guardarian los cambios al aplicar el commit?
Con esto me refiero a que no se guardan los cambios de la primera tabla hasta que se guardan tambien los de la segunda tabla. o los cambios se hacen secuencialmente que es como lo menciona castillo.

Gracias
Cómo te sientes hoy??
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 06:39:01.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi