Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-06-2018
Avatar de Soa Pelaez
Soa Pelaez Soa Pelaez is offline
Miembro
 
Registrado: nov 2015
Posts: 133
Poder: 9
Soa Pelaez Va por buen camino
TFDConection StartTransaction no hace el Rollback

Buen día.

Tengo el siguiente código donde valido una transacción con un campo llave numérico, en caso de error realizo un rollback de la transacción y el campo llave lo aumento e inicio la transacción, el guarda el registro pero igual me tira el error de que la transacción no se podía realizar por error en llave y esa es la transacción que se debería cancelar con el rollback.
Código Delphi [-]
//Conexion --> TFDConnection
//Squema --> TDSchemaAdapter
//
  Conexion.StartTransaction;
    try
      iErrors := Squema.ApplyUpdates(0);
      if iErrors = 0 then
      begin
        for x := 0 to Squema .Count - 1 do
        if Squema .DataSets[x].UpdatesPending then
        begin
          Squema .DataSets[x].CommitUpdates;
          Conexion.Commit; //09/12/2015
        end;
      end
      else
      begin
        Conexion.Rollback;
      end;
    except
      on e: Exception do
      begin
        Conexion.Rollback;
        raise;
      end;
    end;

Que error tengo en el código o que me falta para que cancele correctamente la transacción, uso un TFDConnection, TFDQuery, TDSchemaAdapter. La parte donde realizo el aumento de la llave numérica es en el evento OnError del TFDQuery.

Gracias de antemano.

Última edición por Soa Pelaez fecha: 14-06-2018 a las 23:14:50.
Responder Con Cita
  #2  
Antiguo 15-06-2018
Avatar de gmontes
gmontes gmontes is offline
Miembro
 
Registrado: jul 2004
Ubicación: Culiacán, Sinaloa, México
Posts: 668
Poder: 20
gmontes Va por buen camino
yo lo hago con componentes zeos asi



este es un codigo que no he revisado en años, pero es de una aplicacion que funciona





Código Delphi [-]
 //inicia transaccion
   DMSIU.zcDBase.StartTransaction;
   try
   
     with DMSIU.zqryModifica do
      begin
        Close;
        SQL.Clear;
        SQL.Add('SELECT * FROM ocxc WHERE clavef = '''+inttostr(iClavef)+'''');
        Open;
        if not (Eof) then
         Begin
          //Application.MessageBox('El documento ya existe en cobranza.', 'Error', MB_OK);
          bAcepta:=False;
         end;
        Close;
      end;
      if bAcepta then
       begin
        with DMSIU.zqryModifica do
         begin
          Close;
          SQL.Clear;
          SQL.Add('SELECT * FROM oconcxc WHERE codigo = ''FAC''');
          Open;
          iClaveConCxC :=0;
          if not (Eof) then
           iClaveConCxC:=FieldByname('claveccxc').asinteger;
          Close;
         end;

        sFechacxc:=copy(datetostr(date),7,4)+'/'+copy(datetostr(date),4,2)+'/'+copy(datetostr(date),1,2);
        sFechaven:=copy(datetostr(date+30),7,4)+'/'+copy(datetostr(date+30),4,2)+'/'+copy(datetostr(date+30),1,2);
        sFechae:=copy(sFechae,7,4)+'/'+copy(sFechae,4,2)+'/'+copy(sFechae,1,2);
        with DMSIU.zqryModifica do
         begin
          Close;
          SQL.Clear;
          SQL.Add('INSERT INTO ocxc (clavec, claveccxc, clavef, documento, docto, referencia, importe, pagado, fechaaplic, fechavenc, fechaelab, estado, condicion,serie,folio) VALUES('''+IntToStr(iClavec)+''','''+IntToStr(iClaveConCxC)+''',');
          SQL.Add(''''+IntToStr(iClavef)+''','''+sDocumento+''','''+sDocumento+''','''+sDocumento+''','''+floa  ttostr(nImportet)+''',''0.0'','''+sFechacxc+''',');
          SQL.Add(''''+sFechaven+''','''+sFechae+''','''+sEstatus+''','''+'Credito'+''','''+LeftStr(sDocumento  ,1)+''','''+Trim(Copy(sDocumento,2,Length(sDocumento)))+''')');
          ExecSQL;
          Close;
          SQL.Clear;
         end;
       end; //bAcepta

    //transaccion
    //Application.MessageBox('Datos capturados', 'Aceptar', MB_OK);
    DMSIU.zcDBase.Commit;
   except
    Application.MessageBox('Error en datos', 'Aceptar', MB_OK);
    DMSIU.zcDBase.Rollback;
   end;
   //transaccion
__________________
Todos llevamos nuestros demonios a cuestas..
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
StartTransaction Genera Error En Unigui ASAPLTDA Delphi para la web 2 06-07-2012 19:05:23
StartTransaction david duarte Conexión con bases de datos 4 31-07-2007 21:37:40
StartTransaction - Commit y Rollback Patricio Conexión con bases de datos 0 07-12-2005 14:56:27
Cuando se llama un SP dentro de otro SP autom. se hace rollback por error cuxoapat Firebird e Interbase 1 06-04-2005 23:15:50
Problemas con StartTransaction, Commit, Roll MiguelC OOP 4 02-04-2004 00:47:29


La franja horaria es GMT +2. Ahora son las 17:05:54.


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