AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

Este contenido se ha traducido automáticamente.  Haga clic aquí  para ver la versión en inglés.
Ayuda / WLanguage / Administrar bases de datos / HFSQL / Gestión de transacciones / Funciones WLanguage
  • 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
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaReportes y ConsultasCódigo de Usuario (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Código Navegador
WINDEV Mobile
AndroidWidget Android iPhone/iPadIOS WidgetApple WatchMac CatalystUniversal Windows 10 App
Otros
Procedimientos almacenados
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.
AndroidWidget Android iPhone/iPadIOS WidgetMac Catalyst La gestión de transacciones solo está disponible para bases de datos HFSQL Client/Server.
Ejemplo
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
WINDEVWEBDEV - Código ServidorReportes y ConsultasCódigo de Usuario (UMC)AjaxHFSQL Classic
// Start transaction on the Orders and OrdLine data files
HTransactionStart("C:\Temp\Transaction.trs", "Orders, OrderLine, -Customer")
Add_Order()
WHEN EXCEPTION IN
// Add the order
HAdd(Orders)
// Validate the addition
HTransactionEnd()
DO
// Delete the order lines
HTransactionCancel()
END
WINDEVWEBDEV - Código ServidorReportes y ConsultasAndroidWidget Android iPhone/iPadIOS WidgetMac CatalystCódigo de Usuario (UMC)AjaxHFSQL Client/Server
// Start transaction on the Orders and OrdLine data files
HTransactionStart("Orders, OrderLine, -Customer")
Add_Order()
WHEN EXCEPTION IN
// Add the order
HAdd(Orders)
// Validate the addition
HTransactionEnd()
DO
// Delete the order lines
HTransactionCancel()
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:
  • HFSQL Classic 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
HFSQL Classic Nombre y ruta del archivo de la transacción a Cancel:
  • Este parámetro debe ser idéntico al nombre especificado en HTransactionStart (o en HTransaction).
  • Si no se especifica este parámetro y si no hay ninguna transacción en curso, se tiene en cuenta el archivo de transacción Default.
  • Si una transacción está en curso, se cancela y se ignora el nombre del fichero de transacción.
HFSQL Client/ServerOLE DBConectores Nativos Este parámetro no se tiene en cuenta.

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 (""").
WINDEVWEBDEV - Código ServidorWINDEV MobileReportes y ConsultasCódigo de Usuario (UMC)AjaxHFSQL Classic

Cancelar una transacción (se utilizará si no hay ninguna transacción en curso) Ocultar los detalles

<Result> = HTransactionCancel(<Transaction file> , <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 no se especifica el parámetro <Archivo de transacción>, la transacción actual se cancela.
  • Si hay una operación "general" en curso, se cancelan TODAS las operaciones en curso (operaciones HFSQL Classic y/o operaciones HFSQL Client/Server).
  • Si una transacción está en curso en la conexión, se cancela.
  • Si no hay ninguna transacción en curso, sólo se cancelan las transacciones interrumpidas para la conexión especificada.
<Transaction file>: Cadena de caracteres
Nombre y ruta del archivo de la transacción a Cancel.
Este parámetro debe ser idéntico al nombre especificado en HTransactionStart (o en HTransaction).
<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.

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.
WINDEVWEBDEV - Código ServidorCódigo de Usuario (UMC)AjaxOLE DBConectores Nativos

OLE DB y Conectores Nativos

Sólo las sintaxis con conexión son tenidas en cuenta por la Conectores Nativos que soporta las transacciones. También se puede utilizar la función SQLTransaction.
Componente: wd290hf.dll
Versión mínima requerida
  • Versión 9
Esta página también está disponible para…
Comentarios
Uso de HTransactionCancel()
El uso de HTransactionCancel en el caso de no grabar correctamente un Registro.

// Se Inicia Transaccion
IF HTransactionStart(Conn)=<True THEN
HReset(Cliente)
ScreenToFile()
// Se intenta Registrar al Cliente
IF HAdd(Cliente)=False THEN
// EN caso de tener un problena se Cancela la transaccion
HTransactionCancel(Conn)
Result ("Error Registrando Cliente")
END
// Se Finaliza la transaccion
IF HTransactionEND(Conn)=False THEN
// EN caso de tener un problena se Cancela la transaccion
HTransactionCancel(Conn)
Result ("Error al Finalizar Transaccion")
ELSE
Result ("")
END
ELSE
Result ("No se logró iniciar transacción")
END
Mecias SAMUEL
02 08 2022
Example Transaction with Commit 100 in 100
//SQL

SERIAL is int

HTransactionStart(Hfsql)

FOR EACH t0010_enderecoscorreios //leitura da tabela ms sql server // TABELA DE ORIGEM

SERIAL += 1

PROGBAR_01..Value += 1
IF PROGBAR_01..Value = 100 THEN
HTransactionEnd(Hfsql) //commit
PROGBAR_01..Value = 0
HTransactionStart(Hfsql) //start
Multitask(1) //permite compartilhar o processador com os outros prog e serviços windows
END

//HFSQL = MS SQL SERVER 2016 / DEVELOPER
enderecoscorreios.LogradouroAbrev = t0010_enderecoscorreios.LogradouroAbrev
enderecoscorreios.Logradouro = t0010_enderecoscorreios.Logradouro

ok is boolean = HAdd(enderecoscorreios) // gravacao no hfsql
IF ok = False THEN
HTransactionCancel(Hfsql) //Rollback
END

END

Info(SERIAL)
BOLLER
13 04 2017

Última modificación: 27/05/2022

Señalar un error o enviar una sugerencia | Ayuda local