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
  • Presentación
  • Gestión de las transacciones mediante programación
  • Implementación de la gestión de las transacciones
  • Resumen tabla de las funciones WLanguage utilizadas (para una base de datos HFSQL ISAM o Cliente/Servidor)
  • Manipular registros durante una transacción: las reglas a seguir
  • Utilizando las transacciones cortas
  • Bloqueo de los registros en modo de lectura
  • Realizar una transacción a la vez
  • No se debe utilizar ninguna interfaz de usuario (ventana, reporte, página, ...) entre el inicio y el final de una transacción.
  • La cancelación de una transacción puede fallar ocasionalmente debido a violaciones de las restricciones de integridad y/o duplicar las violaciones de las restricciones..
  • Errores específicos de la gestión de las operaciones
  • Gestión de casos especiales
  • Fallo de alimentación
  • Consejo: restauración de la consistencia de la base de datos
  • Error durante el uso del programa
  • Borrar el registro de transacciones
  • Diferencias de comportamiento entre las transacciones ISAM y Cliente/Servidor
  • Gestión avanzada
  • Transacción: Los archivos creados
  • Identificador de el equipo que realiza la transacción
  • Transacciones y contexto HFSQL independiente
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
Transacciones: Procesos secure en archivos de datos HFSQL
HFSQL ClassicHFSQL Client/ServerDisponible solo con estos tipos de conexión
Gestión de las transacciones mediante programación

Implementación de la gestión de las transacciones

  1. Si sus archivos de datos están protegidos por una contraseña, abra todos los archivos de datos utilizados durante la transacción antes del inicio de la misma o especifique las diferentes contraseñas con HPass.
    Si sus archivos de datos no están protegidos por contraseña, los archivos de datos manejados después de HTransactionStart (o HTransaction) se pondrán automáticamente en transacción.
  2. Inicie la operación con HTransactionStart o HTransaction.
  3. Realice sus operaciones. Todas las operaciones de escritura realizadas en los ficheros de datos de la transacción se graban automáticamente en el fichero de transacción.. Atención: los procesos realizados son más lentos (porque cada operación se guarda en un archivo de datos específico).
  4. Cancel (si es necesario) las operaciones realizadas durante la transacción (HTransactionCancel.
  5. Especifique el fin de la transacción con HTransactionEnd: se valida la transacción.
Observaciones:
  • HFSQL Classic El modo de aislamiento de transacciones utilizado es "READ UNCOMMITED".
  • HFSQL Client/Server El modo de aislamiento de las transacciones se define con HTransactionIsolation. El modo de aislamiento de Default es el modo "READ UNCOMMITED".
  • Las transacciones no están disponibles para los archivos de datos de Hyper File 5.5.

Resumen tabla de las funciones WLanguage utilizadas (para una base de datos HFSQL ISAM o Cliente/Servidor)

CaracterísticasFunción del lenguaje
Permitir (o no) la gestión de las transacciones
(la gestión de las transacciones está habilitada por Default).
HSetTransaction
HFSQL Client/Server Definir el modo de aislamiento.
HTransactionIsolation
Inicie la transacción.HTransactionStart o HTransaction
Validar la transacción.HTransactionEnd
Cancel la transacción actualHTransactionCancel
Cancel una transacción que falló (corte de energía).
Determinar si una transacción ha sido interrumpida (la transacción no ha sido comprometida o cancelada). Caso de apagón.HTransactionInterrupted
Si un Record encontrado en el archivo de datos especificado se considera que está en transacción pero no pertenece a una transacción en curso, se libera automáticamente.HTransactionFree
Determinar si una transacción está en curso.HTransactionInProgress
Manipular registros durante una transacción: las reglas a seguir

Utilizando las transacciones cortas

Los registros utilizados durante la transacción se bloquean automáticamente en modo de escritura para evitar que los otros ordenadores modifiquen los datos afectados y, por tanto, para secure la transacción.
En una aplicación de red, si otro usuario intenta modificar un Record en una transacción, la gestión de cerraduras de automatic permitirá a este usuario a Cancel o reintentar la operación.
Por lo tanto, la transacción debe ser lo más corta posible para evitar bloquear a los usuarios.

Bloqueo de los registros en modo de lectura

Todas las modificaciones realizadas durante una transacción son Visible de todos los ordenadores (en una red por ejemplo) antes del final de la transacción. Los otros ordenadores pueden leer los datos con una duración limitada (si la transacción es cancelada por HTransactionCancel, por ejemplo).
Por lo tanto, le recomendamos encarecidamente que bloquee los registros relevantes en el modo de lectura.

Realizar una transacción a la vez

Una aplicación debe realizar una sola transacción a la vez. No se debe realizar ninguna transacción en hilos simultáneos o en contextos HFSQL independientes.

No se debe utilizar ninguna interfaz de usuario (ventana, reporte, página, ...) entre el inicio y el final de una transacción.

Todas las operaciones de transacción deben realizarse en el mismo in Process: HTransactionStart (o HTransaction) y HTransactionCancel deben ser llamados desde el mismo process o event: código de clic de un control Botón, etc.
Para anular una operación mediante un botón, utilice una "validación de automatic" control Botón durante un corto período de tiempo. Esto le permite evitar posibles interacciones con los datos manejados desde otros ordenadores de la red.

La cancelación de una transacción puede fallar ocasionalmente debido a violaciones de las restricciones de integridad y/o duplicar las violaciones de las restricciones..

Ejemplo 1: Violación de las restricciones duplicadas
  • El archivo de datos de A manejado por una transacción contiene una clave única.
  • Un ordenador A realiza una transacción durante la cual se borra un Record de este archivo de datos.
  • Al mismo tiempo, un ordenador B añade un nuevo Record en el mismo fichero de datos con el mismo valor de clave única que el Record borrado por el equipo A.
  • La cancelación de la transacción en este momento provocará un error duplicado en la clave única..
Solución 1: Intente Cancel la transacción de nuevo con WDTrans (o WDOptimizer). Esta herramienta permite ignorar los errores de duplicación y/o los errores de integridad ("Desactivar la gestión de la integridad" y "Desactivar la gestión de los duplicados" en el asistente para cancelar las transacciones).
Solución 2: Utilice HSetDuplicates antes de cancelar la transacción. Esta función permite ignorar temporalmente la gestión de duplicados.. En este caso, no olvide volver a activar la gestión de duplicados estableciendo el parámetro en True después de cancelar la transacción.
A continuación, debe verificar los registros incorrectos y modificarlos en consecuencia.
Ejemplo 2: Violación de las restricciones de integridad
  • El archivo de datos del CLIENTE de A es relacionado a un archivo de datos de PEDIDOS (relacionado en una llave)
  • El ordenador A A realiza una transacción durante la cual un Record se añade al archivo del CLIENTE.
  • Al mismo tiempo, un equipo B agrega un nuevo registro al archivo de datos ORDERS relacionado con el registro agregado al archivo de datos CUSTOMER.
  • La cancelación de la transacción en este preciso momento provocará un error de integridad porque el Record agregado al archivo de datos de PEDIDOS no tendrá ningún vínculo con el Record borrado del archivo de datos de CLIENTES (la adición al archivo de CLIENTES habrá sido cancelada).
Solución 1: Intente Cancel la transacción de nuevo con WDTrans (o WDOptimizer). Esta herramienta permite ignorar los errores de duplicación y/o integridad (marque "Desactivar la gestión de la integridad" y "Desactivar la gestión de los duplicados" en el asistente para cancelar las transacciones).
Solución 2: Utilice HSetIntegrity antes de cancelar la transacción. Esta función permite ignorar temporalmente los errores de integridad (estableciendo el parámetro en False). En este caso, no olvide volver a activar la gestión de la integridad estableciendo el parámetro en True después de cancelar la transacción.
A continuación, debe verificar los registros incorrectos y modificarlos en consecuencia.
Consejo: Plan para este tipo de conflictos en sus programas y al crear archivos de datos en el editor de análisis.
  • Los errores de duplicación no se producirán si se utilizan claves únicas cuyo tipo sea el identificador automatic.
  • Si manipula las claves únicas manualmente (sin identificadores automáticos), debe establecer un valor único para todos los equipos al agregar o modificar registros (con las funciones HAdd y HModify).
    Recordatorio: Por defecto, para cada Record que presenta un problema, el motor HFSQL propone la gestión asistida de los errores: una ventana usada para arreglar los conflictos duplicados.

Errores específicos de la gestión de las operaciones

  • 70031: Operación no permitida en la transacción
    Está utilizando una función que no está permitida durante una operación.. Por ejemplo, HTransactionStart (o HTransaction) se utiliza en medio de una transacción.
  • 70034: La última transacción falló
    Usted está tratando de utilizar un Record que pertenece a una transacción fallida (corte de energía, ...). El programa se reinicia pero la transacción no se cancela.. En este caso, le recomendamos que Cancel la transacción que falló (ver más abajo).
  • 74020: La clave de acceso del fichero de transacción no corresponde a la clave de acceso del fichero fuente.
    El archivo de datos (en modo HFSQL Client/Server) y el archivo de transacciones no utilizan la misma contraseña.
  • 70032: Problema del modo de aislamiento
    Este error puede ocurrir en los siguientes casos:
Gestión de casos especiales

Fallo de alimentación

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.
En este caso, se restaurará la consistencia de la base de datos:
Atención: Restaurar la integridad de la base de datos puede llevar un tiempo.
Observación: Para saber si hay que restaurar la consistencia de la base de datos, compruebe el resultado de HTransactionInterrupted en el código de inicialización del proyecto (por ejemplo).

Consejo: restauración de la consistencia de la base de datos

Para restaurar la consistencia de la base de datos, le aconsejamos que realice las siguientes operaciones:
  1. Comprueba el resultado de HTransactionInterrupted en el código de inicialización del proyecto, por ejemplo.
  2. Si la transacción se interrumpió, realice una de las siguientes operaciones para restaurar la consistencia de la base de datos:
Ejemplo:
IF HTransactionInterrupted() = True THEN
IF Confirm("The transaction performed by computer " + H.TrsPost + ...
" was interrupted. " + ...
 "Do you want to restore the consistency of data files?") = True THEN
// Cancels the interrupted transactions
 IF HTransactionCancel() = False THEN
 Error("Unable to cancel the transaction")
 END
END
END
Otra solución: El error 70034 también puede ser tratado en la Event de "Inicialización" del proyecto utilizando la palabra clave WHEN EXCEPTION. Por lo tanto, cuando se produzca el error 70034, la consistencia de la base de datos será restaurada por HTransactionCancel, o por HTransactionStart/HTransactionEnd.
Observación: Después de un corte de energía, le recomendamos que vuelva a indexar los archivos de la aplicación.

Error durante el uso del programa

Cuando la aplicación se detiene debido a una división de programación Error( por cero, por ejemplo), la transacción actual se cancela automáticamente.

Borrar el registro de transacciones

El registro de transacciones es un archivo HFSQL creado y presente sólo durante el tiempo de la transacción. No debe eliminar este archivo por temor a problemas de integridad de la base de datos..

Diferencias de comportamiento entre las transacciones ISAM y Cliente/Servidor

Comportamiento en HFSQL ClassicComportamiento en HFSQL Client/Server
Creación de un archivo de datos durante una transacción (HCreation).Si se cancela la transacción, el archivo de datos vuelve a estar vacía.
Cierre de un archivo de datos durante una transacción (HClose).La transacción se interrumpe.La transacción no se cancela.
Desbloquear un Record o un archivo de datos durante una transacción.El bloqueo de las transacciones se cancela.
La transacción se interrumpe.
Desbloquear un Record o un archivo de datos
La transacción no se cancela.
Ejecutar una consulta INSERT/UPDATE.La transacción se interrumpe.La transacción no se cancela.
Gestión avanzada

Transacción: Los archivos creados

Se crean dos tipos de archivos de datos HFSQL al implementar las transacciones:
  • el registro de operaciones en transacción: Fichero temporal en formato HFSQL que contiene las diferentes operaciones realizadas sobre los ficheros de aplicación que tiene en cuenta la transacción.. Este archivo se crea con HTransactionStart (o con HTransaction). Por Default, se llama <Nombre del proyecto>_$TRS_OPERATION.TRS. Este nombre puede modificarse con HTransactionStart (o HTransaction).
    HFSQL Client/Server Este archivo se llama TRSOPERATION.TRS.
  • el registro de valores: Archivo temporal associated con cada archivo de datos que se tiene en cuenta en la transacción. Este archivo se llama <Nombre del archivo de datos>_$$_TRSVAL.TRX. Para cada operación realizada en la transacción, este fichero contiene:
    • el contenido de la Record después de la operación (durante una supresión por ejemplo)
    • el contenido de la Record después de la operación (durante una adición por ejemplo)
      HFSQL Client/Server Este archivo se llama <Nombre del archivo de datos>.TRX.
Estos archivos pueden ser tratados por WDTRANS o WDOptimizer.
HFSQL Client/Server En In HFSQL Client/Server, se crea un fichero adicional: TRSOperationInfoClient.TRS.
Este archivo contiene la información única que se utiliza para identificar la transacción (nombre del cliente, ordenador, ...).

Identificador de el equipo que realiza la transacción

De forma predeterminada, el equipo está identificado con un número único y el nombre del equipo (definido en Windows).
Para identificar fácilmente a el equipo que realiza las operaciones en la transacción, se utiliza HComputer para definir un identificador propio de el equipo. Este identificador sustituye al nombre de el equipo. Este identificador se guarda en el registro de operaciones en transacción y se puede consultar con WDTRANS.
HFSQL Client/Server El identificador de la computadora incluye:
  • Nombre e IP Address de la computadora.
  • Nombre de la aplicación, que significa ExecutableName(ProjectName).

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.
Ver también
Versión mínima requerida
  • Versión 9
Esta página también está disponible para…
Comentarios
Haga clic en [Agregar] para publicar un comentario

Última modificación: 27/05/2022

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