|
|
|
|
- Ubicación y acceso a los archivos de datos
- Detección de un error
- Consejo: Restaurar la consistencia de la base de datos
- Casos de error
- Transacciones y contexto HFSQL independiente
- OLE DB y Conectores Nativos
HTransactionCancel (Función)
No disponible con este tipo de conexión
Si una transacción está en cursocancela todas las operaciones realizadas en los ficheros de datos de la operación desde el inicio de la operación.. En este caso, la transacción se cancela sin interrumpir la ejecución del programa. Si no hay ninguna transacción en cursorestablece la consistencia de la base de datos y cancela la transacción fallida (por ejemplo, un fallo de alimentación).. Observación: Una transacción que ha fallado puede ser cancelada por cualquier programa. El fichero de transacción se destruye automáticamente si no se comparte.. Se desbloquean los registros bloqueados por las operaciones de escritura realizadas durante la transacción.
MyConnection is Connection // Start transaction on data files associated with MyConnection HTransactionStart(MyConnection) Add_Order() WHEN EXCEPTION IN // Add the order HAdd(Orders) // Validate the addition HTransactionEnd(MyConnection) DO // Delete the order lines HTransactionCancel(MyConnection) END
Sintaxis
Cancelar una transacción en curso o una transacción interrumpida en una conexión Client/Server Ocultar los detalles
<Result> = HTransactionCancel(<Connection>)
<Result>: booleano - True STRIMEULB si la transacción fue cancelada,
- False si se produce un problema. HErrorInfo devuelve más detalles sobre el error.
Atención: - Si una transacción está en curso en la conexión, se cancela.
- Si no hay ninguna transacción en curso, las transacciones interrumpidas se cancelan para la conexión especificada..
<Connection>: Cadena de caracteres o variable de tipo Connection Conexión a utilizar. Esta conexión corresponde a: Si este parámetro corresponde a la constante hAccessHF7, la transacción se cancelará en los archivos HFSQL Classic (ISAM).
Cancelación de una transacción en curso o de una transacción interrumpida en todas las conexiones (HFSQL Classic o Cliente/Servidor) Ocultar los detalles
<Result> = HTransactionCancel([<Transaction file>])
<Result>: booleano - True STRIMEULB si la transacción fue cancelada,
- False si se produce un problema. HErrorInfo devuelve más detalles sobre el error.
Atención: - Si no se especifica el parámetro <Archivo de transacción>, la transacción actual se cancela.
- Si hay una transacción en curso, se cancelan TODAS las transacciones en curso (transacciones HFSQL Classic y/o transacciones HFSQL Client/Server).
- Si no hay ninguna transacción en curso, se cancelan TODAS las transacciones interrumpidas (en HFSQL Classic y en Cliente/Servidor).
<Transaction file>: Cadena de caracteres opcional
Cancelar una transacción interrumpida en una base de datos Client/Server (se debe utilizar si no hay ninguna transacción en curso) Ocultar los detalles
<Result> = HTransactionCancel(<Connection> , <Database>)
<Result>: booleano - True STRIMEULB si la transacción fue cancelada,
- False si se produce un problema. HErrorInfo devuelve más detalles sobre el error.
Atención: - Sólo se cancelan las transacciones interrumpidas en la base de datos especificada.
- Las transacciones en curso no se cancelan.
<Connection>: Cadena de caracteres o variable de tipo Connection Conexión a utilizar. Esta conexión corresponde a: Si este parámetro corresponde a la constante hAccessHF7, sólo se cancelarán las transacciones interrumpidas en modo HFSQL Classic. <Database>: Cadena de caracteres Nombre de la base de datos correspondiente. Se produce un error si este parámetro corresponde a una cadena vacía (""").
Cancelar una transacción específica, relacionada con una conexión Ocultar los detalles
<Result> = HTransactionCancel(<Connection> , <Transaction to cancel>)
<Result>: booleano - True STRIMEULB si la transacción fue cancelada,
- False si se produce un problema. HErrorInfo devuelve más detalles sobre el error.
Atención: Sólo se cancelan las transacciones interrumpidas en la base de datos especificada.
<Connection>: Cadena de caracteres o variable de tipo Connection Conexión a utilizar. Esta conexión corresponde a: Si este parámetro corresponde a la constante hAccessHF7, sólo se cancelará la operación interrumpida en modo HFSQL Classic. <Transaction to cancel>: Integro Identificador de la transacción que se cancelará para la conexión especificada. Este identificador es devuelto por HTransactionList. Observaciones Ubicación y acceso a los archivos de datos Antes de llamar a la función HTransactionCancel, los archivos de datos manipulados por la transacción cancelada deben ser: Detección de un error Cuando el programa detecta un error (gestión de errores con WHILE EXCEPTION, por ejemplo), la función HTransactionCancel permite: - restaurar los archivos de datos en su estado inicial.
- cancel todas las operaciones realizadas en los archivos de datos desde la llamada a HTransactionStart (o HTransaction).
Consejo: Restaurar la consistencia de la base de datos Si se produce una avería (corte de corriente, reinicio,...) durante una transacción, los archivos de datos pueden dañarse.: la transacción no fue ni validada ni cancelada. El archivo de la transacción se encuentra todavía en el equipo. Para restaurar la consistencia de la base de datos, debe proponer en su aplicación: - una opción utilizada para mantener la consistencia de la base de datos.
Esta opción puede, por ejemplo, llamar a la función HTransactionCancel o a las funciones HTransactionStart/HTransactionEnd. - gestión del error 70034 en el código de inicialización del proyecto mediante la palabra clave WHEN EXCEPTION.
Así, cuando se produzca el error 70034, la coherencia de la base de datos se restaurará mediante la función HTransactionCancel, o HTransactionStart/HTransactionEnd.
Observación: esta operación puede ser bastante larga (según el número de operaciones realizadas en la transacción). Casos de error - Operaciones de anidamiento: Las transacciones no se pueden anidar (es decir, no se puede llamar a HTransactionStart o HTransaction en una transacción). En este caso, se produce el error 70031.
- Se muestra un error fatal en los siguientes casos:
- Se inicia una transacción en todas las conexiones mientras haya al menos una conexión en la transacción..
- Se inicia una operación en una conexión mientras que ya se ha iniciado una operación en todas las conexiones..
- Se inicia una transacción en todas las conexiones mientras haya al menos una conexión cuyo modo de aislamiento no sea "Lectura no comprometida".
Transacciones y contexto HFSQL independiente Al copiar un contexto, si una transacción está en curso en el primer contexto, el nuevo contexto no está en la transacción.. Debe llamar a HTransactionStart (o HTransaction) para iniciar una transacción en el nuevo contexto.
Esta página también está disponible para…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|