TprxADOTransaction
Introducción
Todas las operaciones de actualización de la base de datos se hacen dentro de transacciones. Por ejemplo: si grabamos una factura el sistema aplicará como si fuera una sola operación el grabado de la cabecera, del detalle de esa factura y la carga impositiva. Si alguna de esas operaciones fallara en el grabado toda la transacción será ignorada. De este modo la información grabada es consistente.
El componente TprxADOTransaction (Manejo de transacciones con la base de datos.) administra las transacciones.
Identidad
- Ancestro: TComponent
- Carpeta: C:\DevelopPrx\library
- Archivo: prxADOTransaction.pas
Declaración
type TprxADOTransaction = class(TComponent) private FQuery: TprxADOQuery; FTransactionQuery: TprxADOQuery; Freplicacion_activa: Boolean; FTransactionTimeStamp: String; FTransactionLevel: Integer; FTransactionErrors: Integer; FErrorMessages: TStringList; FRowsAffected: Integer; Fon_get_db_timestamp: Tprx_get_db_timestamp; FTransactionData: TComponent; FReplicaMsg: TComponent; protected procedure Loaded; override; function Connection: TADOConnection; procedure devlog_Catalog_Set(aValue: String); function devlog_Catalog_Get: String; procedure devlog_Tipo_Set(aValue: String); function devlog_Tipo_Get: String; procedure devlog_Codigo_Set(aValue: String); function devlog_Codigo_Get: String; procedure devlog_Subcodigo_Set(aValue: String); function devlog_Subcodigo_Get: String; procedure devlog_Operacion_Set(aValue: String); function devlog_Operacion_Get: String; procedure ErrorMessage_Show; property Query: TprxADOQuery read FQuery write FQuery; property TransactionQuery: TprxADOQuery read FTransactionQuery write FTransactionQuery; property TransactionLevel: Integer read FTransactionLevel write FTransactionLevel; property TransactionErrors: Integer read FTransactionErrors write FTransactionErrors; property ErrorMessages: TStringList read FErrorMessages write FErrorMessages; property TransactionData: TComponent read FTransactionData write FTransactionData; property ReplicaMsg: TComponent read FReplicaMsg write FReplicaMsg; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; function SQLCommands_Count: Integer; procedure SQLCommands_Clear; procedure SQLCommands_Add(aSQL: String; aCheckCommand: Boolean); function Transaction_Start(aDataSet: TDataSet): Integer; function TransactionCommit(aEndTransaction: Boolean = True): Boolean; procedure TransactionRollback; function Replicacion_Inicializar: Boolean; property on_get_db_timestamp: Tprx_get_db_timestamp read Fon_get_db_timestamp write Fon_get_db_timestamp; property RowsAffected: Integer read FRowsAffected; property replicacion_activa: Boolean read Freplicacion_activa; property TransactionTimeStamp: String read FTransactionTimeStamp; property devlog_Catalog: String read devlog_Catalog_Get write devlog_Catalog_Set; property devlog_Tipo: String read devlog_Tipo_Get write devlog_Tipo_Set; property devlog_Codigo: String read devlog_Codigo_Get write devlog_Codigo_Set; property devlog_Subcodigo: String read devlog_Subcodigo_Get write devlog_Subcodigo_Set; property devlog_Operacion: String read devlog_Operacion_Get write devlog_Operacion_Set; published end;
Componentes TprxADOQuery
Administran las operaciones de actualización de la base de datos.
Propiedades devlog
Las propiedades devlog se usan cuando la transacción pertenece a algún objeto del catálogo. Por ejemplo, la modificación a una tabla. Sino no se usan.
Identifican a:
- devlog_Catalog es el catálogo al que pertenece el objeto modificado.
- devlog_Tipo es el tipo de objeto modificado, por ejemplo 'prxclases' para identificar a una clase.
- devlog_Codigo es el código del objeto modificado. Por ejemplo, el nombre de una tabla.
- devlog_Subcodigo es el subcódigo del objeto modificado, solo cuando corresponde. Por ejemplo, el nombre de un trigger asociado a una clase.
- devlog_Operacion es el tipo de operación (insert, log, update o delete).
Implementación
function Transaction_Start(aDataSet: TDataSet): Integer
Inicia la transacción inicializando las propiedades necesarias.
function TransactionCommit(aEndTransaction: Boolean = True): Boolean
Intenta grabar la transacción en la base de datos usando el comando CommitTrans de la conexión a la BD, si tiene éxito retorna True, si no pudo grabar ejecuta un rollback usando el comando RollbackTrans de la conexión a la BD y retorna False. Los mensajes de error se guardan en la propiedad ErrorMessages.
Si es una operación de catálogo graba los comandos en el Registro:
// Aunque no haya líneas si es un _catálogo de los nuevos aplica la // transacción, mientras coexista con el anterior éste tiene que ir al final... if AnsiCompareText(TprxADOTransactionData(TransactionData).msg_dev_operacion, TprxADOTransaction_Text_Null) <> 0 then TprxADOTransactionData(TransactionData).SaveToDevlog(True);
Si la replicación está activa graba la transacción en la bandeja de salida de Replicación:
// Si hay replicación agregamos los registros correspondientes en base // al contenido de SQLCommands, REPLICACIÓN DROPBOX... if (replicacion_activa = True) and (TransactionErrors = 0) and (TprxADOTransactionData(TransactionData).msg_contenido.Count > 0) then TprxADOTransactionData(TransactionData).SaveToBS;
procedure TransactionRollback
Ejecuta un rollback si falló el grabado de la transacción.
Uso
Este componente se usa exclusivamente para el grabado de una transacción, invocado desde TprxADOConnection.
Obsoletos
ReplicaMsg
La propiedad property ReplicaMsg: TComponent se encuentra osbolketa y debería ser eliminada.
El componente TfvaTextMessageReplica también debería ser eliminado.