FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Ayuda con Transaccion en SQL Server
Posts: 396
Joined: Tue Mar 18, 2008 09:41 PM
Ayuda con Transaccion en SQL Server
Posted: Thu May 14, 2009 08:06 AM
Hola Amigos,

Llevo ya unos días con este problema y estoy un poco desesperado. Pues no obtengo ayuda ninguna.

Se trata de varias tablas que tengo que actualizar para mantener la integridad referencial.
Para ello utilizo una transacción de este modo:

Code (fw): Select all Collapse
......
cStrSql := "BEGIN TRY" + CRLF + ;
        "BEGIN TRANSACTION " + CRLF + ;
        "UPDATE tabla1 SET dni = '000000000X'" + CRLF + ;        
        "UPDATE tabla2 SET dni = '000000000X'" + CRLF + ;
        "COMMIT TRANSACTION" + CRLF + ;
        "END TRY" + CRLF + ;
        "BEGIN CATCH" + CRLF + ;
        "ROLLBACK TRANSACTION" + CRLF + ;
        "END CATCH" */

oCnn:Execute( cStrSql )
......


La transacción funciona bien, llevándose buen término si no han habido problemas y cancelándose si no se pudo realizar completamente.

El problema es que no sé como comprobar desde FWH si ha tenido éxito o no ha podido realizarse.

Cualquier ayuda o pista sería de gran ayuda.
:-) :-) :-)
Javier,

FWH 8.04 2008
Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM
Re: Ayuda con Transaccion en SQL Server
Posted: Thu May 14, 2009 10:38 AM

Si usa ADO , puedes hacer esto;

try
oConnection:BeginTrans()
// TU EXECUTE
catch oError
oConnection:RollBackTrans()
? "ERROR. Se ha realizado ROLLBACK." + CRLF )
end
oConnection:EndTrans()

Saludos

Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
Posts: 396
Joined: Tue Mar 18, 2008 09:41 PM
Re: Ayuda con Transaccion en SQL Server
Posted: Thu May 14, 2009 11:26 AM
Hola Rafa,

Gracias por contestar.

He realizado la prueba pero no me actualiza el registro.
Me gustaría que hecharas un vistazo al código por favor. Por si encuentras alguna anomalía.

Muchas gracias otra vez.

Code (fw): Select all Collapse
#include "FiveWin.ch"
#include "colors.ch"
#include "Folder.ch"
#include "xbrowse.ch"
#include "ado.ch"
#include "fget.ch"

function Main()

   local cStrSql, oCnnDb, cConnectionString, oError

   oCnnDb  := TOleAuto():New( "ADODB.Connection" )

   cStrSql := "UPDATE datos_personales SET nombre = 'MARTA'"

   cConnectionString := "Driver={SQL Server}"                      + ;
                        ";Server=TELEINFO-3496FE\SQLEXPRESS"    + ;
                        ";Database=zagaleta"                                 + ;
                        ";Trusted_Connection=yes"

   oCnnDb:connectionString := cConnectionString
   oCnnDb:Open()

   TRY

      oCnnDb:BeginTrans()

      oCnnDb:Execute( cStrSql )

   CATCH oError

      oCnnDb:RollBackTrans()

      FOR EACH oError IN oCnnDb:Errors
          MsgInfo( "Descripción : " + oError:Description  + CRLF + ;
                "Error Nativo: " + Str( oError:NativeError ) + CRLF + ;
                "Número Error: " + Str( oError:Number )     + CRLF + ;
                "Origen      : " + oError:Source                   + CRLF + ;
                "Estado SQL  : " + oError:SQLState )

      NEXT

   END

return nil
Javier,

FWH 8.04 2008
Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM
Re: Ayuda con Transaccion en SQL Server
Posted: Thu May 14, 2009 03:21 PM
Te lo dejo puesto correctamente

Code (fw): Select all Collapse
#include "FiveWin.ch"
#include "colors.ch"
#include "Folder.ch"
#include "xbrowse.ch"
#include "ado.ch"
#include "fget.ch"

function Main()

   local cStrSql, oCnnDb, cConnectionString, oError

   oCnnDb  := TOleAuto():New( "ADODB.Connection" )

   cStrSql := "UPDATE datos_personales SET nombre = 'MARTA'"

   cConnectionString := "Driver={SQL Server}"                      + ;
                        ";Server=TELEINFO-3496FE\SQLEXPRESS"    + ;
                        ";Database=zagaleta"                                 + ;
                        ";Trusted_Connection=yes"

   oCnnDb:connectionString := cConnectionString
   oCnnDb:Open()

   TRY

      oCnnDb:BeginTrans()

      oCnnDb:Execute( cStrSql )
      oCnnDb:CommitTrans()  // Sorry esto te falta

   CATCH oError

      oCnnDb:RollBackTrans()

      FOR EACH oError IN oCnnDb:Errors
          MsgInfo( "Descripción : " + oError:Description  + CRLF + ;
                "Error Nativo: " + Str( oError:NativeError ) + CRLF + ;
                "Número Error: " + Str( oError:Number )     + CRLF + ;
                "Origen      : " + oError:Source                   + CRLF + ;
                "Estado SQL  : " + oError:SQLState )

      NEXT

   END

return nil
Saludos

Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
Posts: 396
Joined: Tue Mar 18, 2008 09:41 PM
Re: Ayuda con Transaccion en SQL Server
Posted: Thu May 14, 2009 04:35 PM

Funciona!!!
Gracias Rafa.


:P:P:P

Javier,

FWH 8.04 2008

Continue the discussion