Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-12-2017
pkcito pkcito is offline
Registrado
NULL
 
Registrado: dic 2017
Posts: 2
Poder: 0
pkcito Va por buen camino
Transacciones

Entiendo que hay un problema de transacciones. No puedo asegurarlo sin tener más información.

Cuando se ejecuta el método ApplyUpdate del ClientDataSet los datos originales (los que se obtuvieron de la base de datos) y las modificaciones se empaquetan y se pasan al DataSetProvider. Dependiendo de su configuración, el DataSetProvider puede aplicar los cambios de dos formas: generando sentencias INSERT, UPDATE y DELETE (lo que hace por defecto) o actualizando los DataSet usados para obtener los datos. Asumo que la configuración del DataSetProvider no se ha modificado y se están generando sentencias INSERT, DELETE y UPDATE.

En el proceso que aplica los cambios se verifica si ya hay una transacción activa. Si la hay entonces no se hace StartTransaction ni Commit. Si no la hay entonces se hace StartTransaction y luego Commit. Está claro que en este caso hay una transaccíon activa y, si bien los cambios son aplicados en la base de datos, no son visibles fuera del contexto de la transacción activa. Al cerrar la conexión con la base de datos, y esto también depende de la configuración, la transacción activa es finalizada automáticamente con Commit.

Lo más probable es que sea el propio DataSetProvider el que inicia la transacción y la mantenga activa. Cuando el DataSetProvider no le pasa todos los registros disponibles al ClientDataSet (esto depende de la propiedad PacketRecords del ClientDataSet) entonces el DataSet que usa el DataSetProvider para obtener los datos permanece activo y su transacción asociada también.

Para solucionarlo de una forma más elegante (en vez de cerrar la conexión con la base de datos para forzar un Commit) me tienes que decir qué tecnología de acceso a datos estás usando. De todas formas creo que es una buena práctica usar dos transacciones (si se puede) o dos conexión con la base de datos: una de sólo lectura para mostrar registros y otra de lectura y escritura para modificarlos.

Espero que sea de ayuda.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
actualizar base de datos desde dbgrid edgar_prospero Varios 36 31-08-2012 02:27:34
DBGrid. Al actualizar los datos 'No pude encontrar la fila para su actualizacion' juliannemiro Varios 2 02-02-2012 04:30:02
Actualizar datos con TQuery sin mover dbgrid odrack Varios 2 13-02-2009 19:53:03
actualizar datos mediante un dbgrid chass Varios 2 28-07-2008 23:01:59
¿Cómo puedo actualizar en el DBGrid los datos que inserto en la misma sesión? nuri SQL 3 18-07-2005 18:27:19


La franja horaria es GMT +2. Ahora son las 22:20:36.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi