Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Providers
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-03-2008
Esau Esau is offline
Miembro
 
Registrado: may 2003
Ubicación: Canto Rey
Posts: 140
Poder: 22
Esau Va por buen camino
Donde confirmo la Transacción

Hola Amigos..
tengo una duda e intente buscar información en la red y en los foros pero no encontre nada.
Estoy haciendo una aplicación de tres capas en Delphi 7 con SQL Server 2000
tengo dos tablas una maestro y un detalle.
la capa intermedia tengo una ADOConection con sus propiedades y valores luego tengo un ADOQuery son la siguiente Sentencia
Código SQL [-]
 
Select * from Cab_Factura where Numero = :Numero
luego tengo otro ADOQuery con la Siguiente Sentencia
Código SQL [-]
Select * from Det_Factura where Numero = :numero order by Item
la primera consulta es para la cabecera de la factura y la segunda consulta es para el detalle de la factura.
luego tengo dos TdataSetprovider cada uno apuntando a su respectivo ADOQuery.
Hasta Aquí tengo la capa intermedia.
en la capa cliente tengo un formulario con datos de la cabecera y del detalle
tambien tengo dos TClientdataSet, uno para la cabecera y otro para el detalle.
tengo un boton Guardar en donde pongo esta sentencia
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  Cabecera.ApplyUpdates(0);
  Detalle.ApplyUpdates(0);
end;
// graba los cambios de la cabecera y el detalle de la factura
mi problema es el siguiente:
¿Como hago para encerrar en una transacción ambos ApplyUpdates?
lo que sucede es que no quisiera que solo se grabe la cabecera y si el detalle posee un error ninguno de los datos deben confirmarse.

Gracias de antemano por la Ayuda.
Responder Con Cita
  #2  
Antiguo 01-04-2008
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 20
kuan-yiu Va camino a la fama
Yo lo hago así, aunque no uso ADO.
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    database1.starttransaction;

    Cabecera.ApplyUpdates(0);
    Detalle.ApplyUpdates(0);

    database1.commit;
  except
    On E: Exception do
    begin
// Esto o lo que sea que necesites hacer cuando se produce un error.
      ShowMessage('Error actualizando.' + chr(13) + E.Message);
      database1.rollback;
    end;
end;
// graba los cambios de la cabecera y el detalle de la factura
Responder Con Cita
  #3  
Antiguo 01-04-2008
Esau Esau is offline
Miembro
 
Registrado: may 2003
Ubicación: Canto Rey
Posts: 140
Poder: 22
Esau Va por buen camino
Correcto, eso esta bien pero recordemos que la aplicacion esta separada en capas, por lo tanto el componente DataBase no se encuentra en la capa cliente, se encuentra en la capa intermedia, y es ahi donde surge el problema por que no encuentro la forma de hacer el BeginTran y el commit. desde la capa cliente.

sigo investigando..

Saludos
Responder Con Cita
  #4  
Antiguo 01-04-2008
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 20
kuan-yiu Va camino a la fama
Pues esa capa intermedia la puedes llamar de algún modo, ¿o no? ¿Dónde tienes el componente DataBase?
Ahí es donde debes tener este procedimiento y en el formulario simplemente llamar al procedimiento en que incluirás lo que te he puesto.

Yo todas las consultas, borrados, inserciones... las tengo en DataModules a los que incluyo en la sección uses del formulario que los necesita.
Responder Con Cita
  #5  
Antiguo 01-04-2008
Esau Esau is offline
Miembro
 
Registrado: may 2003
Ubicación: Canto Rey
Posts: 140
Poder: 22
Esau Va por buen camino
Te explico mejor,
El ClientDataSet se conecta a un DCOMConnection, en la capa Cliente, luego el DCOMConnection tiene una propiedad ServerName, en esta propiedad se enlaza este componente a la capa intermedia, Esta capa intermedia es un DLL que esta registrada en la PC. Las consultas y el componente database o ADOConnection en mi caso estan en la capa intermedia.
Ahi es donde surge el problema,
no puedo acceder al ADOConecction por que esta en la capa intermedia.

espero haber sido especifico.
Saludos
Responder Con Cita
  #6  
Antiguo 02-04-2008
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 20
kuan-yiu Va camino a la fama
Pues me temo que no puedo ayudarte. Las únicas DLL que uso son para procesos de autentificación y acceso remoto (y ni las hice yo).
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema con transaccion mierda SQL 0 05-05-2007 16:23:18
RollBack con más de una transacción kikodelphi MS SQL Server 2 12-10-2005 20:24:25
Transaccion en Tablas Luis Castillo Conexión con bases de datos 2 12-10-2005 16:27:00
Problema con transaccion con IB reina Varios 2 03-09-2005 02:40:11
Transaccion Esau SQL 1 14-01-2004 10:00:34


La franja horaria es GMT +2. Ahora son las 05:55: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