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 22-11-2006
Bluechip Bluechip is offline
Registrado
 
Registrado: jun 2006
Posts: 6
Poder: 0
Bluechip Va por buen camino
Colision registros

Hola a todos.

Soy nuevo por estos lares y me gustaria que me echaseis una manita.
Tengo una aplicación funcionando hace 7 años con unos 15 puestos.
Todo va ok pero de vez en cuandome hace una gracia que no llego a ver como solucionarla.

La cosa está en que cuando dos usuarios dan de alta un cliente, solo en estrañas ocasiones, colisionan y uno se pierde.

El sistema que uso es leer el último cliente, incremento el código (+1) y lo guardo para que si acto seguido hay otro alta, coja el siguiente.

Pues bien, pese a incrementar y rapidamente guardar el registro con el consabido Pos y FlushBuffers, como os digo, a veces chocan...

Toy desesperado...
Responder Con Cita
  #2  
Antiguo 22-11-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.298
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
No das muchos datos técnicos (Base de Datos,...), pero ¿Podrías probar a utilizar transacciones?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 22-11-2006
Bluechip Bluechip is offline
Registrado
 
Registrado: jun 2006
Posts: 6
Poder: 0
Bluechip Va por buen camino
Que hay.

La base que uso es paradox y no, no uso transiciones. Me resultan complejas para el uso que tiene la base. Solo existe ese problemilla y es muy esporádico.
La verdad es que me da mucha perza remodelar todo por eso solo.

grcias

Última edición por Bluechip fecha: 22-11-2006 a las 14:30:49.
Responder Con Cita
  #4  
Antiguo 27-11-2006
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
El problema es que esta mal modelado desde el principio y creo que no tuviste en cuenta la concurrencia que pudiera darse. A veces efectivamente es por milesimas de segundo pero sucede. Supongamos que un puesto esta dando de alta un cliente (A) y al mismo tiempo otro puesto hace lo mismo(B). Digamos que tienes el ultimo numero en 100. Entonces A checa y calcula el proximo en 101, al mismo tiempo B hace exactamente lo mismo y obtiene obviamente el mismo valor (suponemos que como A no ha guardado aun su informacion el valor 100 no se ha movido). Entonces A finalmente guarda sus datos sin problemas e inmediatamente despues de eso B intenta guardar. Como esta usando la misma clave, y suponemos que esta correctamente definida la clave principal para evitar duplicados, el manejador de BD no permite guardar (duplicate Key error) y el registro que se intentaba guardar se pierde (el de B). Obviamente todo esto paso en fracciones de segundo.

Por que es un mal modelo? Porque aun suponiendo la situacion anterior, el sistema deberia poder recuperarse del error en la clave y ya sea mandarle el mensaje al usuario sin perder el registro o bien incrementar la clave una vez mas hasta conseguir poder guardarlo. En "La cara oculta" de Marteens trae un capítulo que habla de este problema y el manejo de transacciones, seguro te servirá.

Una solucion mucho mas sencilla, es usar en tu table de clientes un campo autoincrementado (Paradox lo soporta) y asi te olvidas ya que es Paradox quien se encarga de asignar las claves y obviamente nunca se presenta el problema que vimos ya que la clave sea asigna justo al momento de guardar el registro por lo que es imposible que se pierda.

Por último:
Cita:
La verdad es que me da mucha perza remodelar todo por eso solo.
Recuerda el conocido refrán: "El flojo y el mezquino andan dos veces el camino"..
__________________
AKA "El animalito" ||Cordobés a mucha honra||
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
por que duplicidad de registros con clientdataset sin ingresar registros ...mysql Arturo MySQL 3 05-09-2006 18:39:37
Registros duplicados Shidalis SQL 2 06-12-2005 22:46:44
20,000 registros ABDIGAR SQL 8 27-06-2005 19:19:58
registros que no se ven en ado joanajj Conexión con bases de datos 5 08-04-2005 22:02:54
Actualizacion de Registros Nelson Alberto Conexión con bases de datos 0 07-10-2004 19:11:15


La franja horaria es GMT +2. Ahora son las 23:33:40.


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