Club Delphi  
    FTP   CCD     Enlaces   Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Desplegado
  #1  
Antiguo 04-01-2012
jimmy_aei jimmy_aei is offline
Registrado
 
Registrado: mar 2008
Posts: 6
jimmy_aei Va por buen camino
Duplicidad de registros

Hola foro
estoy trabajando con firebird 2.1 en una pc con windows server 2008 y 6 gb en RAM, manejo 9 bases de datos en carpetas distintas, 1 por cada sucursal del negocio. Mi problema que me trae de cabeza es que desde el programa que les diseñe para facturar, al generar el cargo en la tabla de clientes para saber que es un credito, me lo llega a duplicar en otra sucursal, y el pago en una sucursal se llega a ver en otra sucursal, esto, ademas es aleatorio en un dia se pasan 2 o 3 movimientos y en ocasiones han llegado a pasarse todos los de 1 dia completo. No se si alguien tenga una sugerencia al respecto. Yo reviso el codigo y no hay manera de 2 conexiones como para que lo duplique, he pensado en cosas de cache o de escritura retardada de windows, pero no entiendo porque sucede eso.
Responder Con Cita
  #2  
Antiguo 04-01-2012
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.843
AzidRain Va por buen camino
No indicas que motor usas pero sospecho que usas Access (que por cierto no es motor). La duplicidad que mencionas se debe a un mal diseño de la base de datos y más aún un mal diseño en el acceso a las mismas. El mal diseño que indico primero se refiere a meter cada sucursal en una base de datos distinta, eso te produce errores como este y otros más que se acumulan (clientes que seguramente aparecen en más de una sucursal con datos diferentes, no puedes saber cuanto debe un cliente que compra en todas las sucursales, etc.) Lo ideal siempre es usar una sola base de datos y partir de que un campo "forzoso" en la mayoría de las tablas será el de la sucursal.

Hacen falta mas datos para ayudarte pues no indicas la estructura de al menos la tabla de clientes. Revisa tu diseño, para mi gusto desde ahi estamos mal.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #3  
Antiguo 04-01-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador gruñón
 
Registrado: sep 2004
Ubicación: Planeta Agua
Posts: 23.148
Casimiro Notevi Va camino a la fama
Imposible ayudar, no tenemos información suficiente
__________________
/* Saludos
*/
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código

$ sudo mv system > /dev/null

Responder Con Cita
  #4  
Antiguo 04-01-2012
jimmy_aei jimmy_aei is offline
Registrado
 
Registrado: mar 2008
Posts: 6
jimmy_aei Va por buen camino
Hola Azid
Agradezco la pronta respuesta

En el servidor tengo instalado firebird 2.1, me conecto con la paleta de componente de interbase y uso delphi 6.
Este proyecto lo inicie hace ya bastante tiempo, y el cliente fue creciendo, y si, es cierto debí meterlo en una sola base de datos pero pues ya no lo hice en su momento y ya es complejo ahorita por que cada sucursal tiene sus propios clientes, ademas que físicamente estaban separadas y no había forma de tenerlas en un solo servidor hasta ahora, que tienen antenas inalambricas. (este es otro punto, están conectadas las terminales con antenas).

Dentro de la base de datos hay una tabla que se llama CXCMOV su estructura es mas o menos asi;

Código SQL [-]
CREATE TABLE "CXCMOV" 
(
  "NSECXC"  VARCHAR(2) NOT NULL,
  "FOLCXC"  INTEGER NOT NULL,
  "CTECXC"  INTEGER NOT NULL,
  "CVECXC"  SMALLINT NOT NULL,
  "DOCCXC"  INTEGER NOT NULL,
  "ID"  INTEGER NOT NULL,
  "TOTCXC"  DOUBLE PRECISION,
  "CARGO"  DOUBLE PRECISION,
  "ABONO"  DOUBLE PRECISION,
  "SDOCXC"  DOUBLE PRECISION,
  "FECCXC"  DATE,
  "VTOCXC"  DATE,
  "STACXC"  VARCHAR(1),
  "AGTCXC"  VARCHAR(3),
  "REFCXC"  VARCHAR(40),
  "FPACXC"  VARCHAR(2),
  "OBSCXC"  VARCHAR(80),
  "STICXC"  VARCHAR(1),
  "VALOR"  INTEGER DEFAULT 0,
  "NSEDOC"  VARCHAR(2),
  "RDPCXC"  INTEGER,
  "BANCOSCXC"  VARCHAR(20),
  "NRECXC"  INTEGER DEFAULT 0,
  "TAXCXC"  VARCHAR(2),
  "IVACXC"  DOUBLE PRECISION DEFAULT 0,
  "IVNCXC"  DOUBLE PRECISION DEFAULT 0,
  "TAXMOV"  VARCHAR(2),
  "HORCXC"  TIME DEFAULT CURRENT_TIME
,
 PRIMARY KEY ("NSECXC", "FOLCXC", "CTECXC", "CVECXC", "DOCCXC")
);
y si es un cargo o adeudo del cliente se graba un registro, y si es un abono, también se graba otro registro.
Lo raro es que solo sucede con esa tabla, porque hay tablas de los movimientos de ventas y no se afectan
Yo se lo atribuia a que ya son demasiadas bases de datos con un promedio de 150 mb cada una y que la memoria RAM es poca y lo que ocasionaba ya que se saturara y mandara información de un lado a otro.

Última edición por Casimiro Notevi fecha: 04-01-2012 a las 22:06:21.
Responder Con Cita
  #5  
Antiguo 04-01-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador gruñón
 
Registrado: sep 2004
Ubicación: Planeta Agua
Posts: 23.148
Casimiro Notevi Va camino a la fama
Recuerda poner el código entre etiquetas, ejemplo:



.
El problema que tienes es seguro un error del programa, más aún si ocurre con una tabla y con las otras no.
El que sean 9 bases de datos o que sean 9000 no tiene nada que ver.
Tampoco es ningún problema que sean de sólo 150 Mb..
__________________
/* Saludos
*/
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código

$ sudo mv system > /dev/null

Responder Con Cita
  #6  
Antiguo 05-01-2012
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.843
AzidRain Va por buen camino
Perdona que insista, pero es un mal diseño de la base de datos, ¿Para que quieres una tabla de clientes por cada sucursal? que no cada cliete pude comprar en cualquier sucursal (sigue siendo él mismo). Creo antes de meterte mas a fondo debes replantear las tablas, la cosa va por los clientes, digamos que tengo a un cliente "Casimiro" con clave 001 y me compra en todas mis sucursales, obviamente debo poder saber cuanto me ha comprado en total y además separarlo por sucursal si quisiera. Por otro lado estas revolviendo la gimnasia con la magnesia, una cosa es la tabla de clientes y otra la tabla de movimientos que haya hecho cada cliente (sea en donde fuere). Lo de la memoria la verdad da risa con todo respeto, muchos por aquí tenemos servidores con millones de registros y solo 1 Gb de ram....insisto, pésimo diseño del sistema. Entiendo que no es tu culpa pues asi lo encontraste pero tienes que empezar a picar piedra por ahí, ver si te reditúa hacer toda la migracíón o si no de plano no meterse en honduras, en este negocio te encuentras cada cosa...
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #7  
Antiguo 05-01-2012
jimmy_aei jimmy_aei is offline
Registrado
 
Registrado: mar 2008
Posts: 6
jimmy_aei Va por buen camino
ok
agradezco los comentarios
Entiendo lo del diseño y es correcta la observación de unificarlos, pero no esta así.
Voy a revisar exhaustivamente mi código para ver que no sea desde el programa.
Aún me resulta raro insisto, porque hay otro negocio con 4 sucursales y en varios años nunca había pasado algo así.
Pensé que podía ser algún problema en configuración del servidor firebird o algún debúg, porque de la noche a la mañana empezó a hacerlo.

Pero tomare en cuenta sus observaciones y validare y revisare 3 veces el codigo
Responder Con Cita
  #8  
Antiguo 05-01-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador gruñón
 
Registrado: sep 2004
Ubicación: Planeta Agua
Posts: 23.148
Casimiro Notevi Va camino a la fama
Cita:
Empezado por jimmy_aei Ver Mensaje
.. algún debúg..
Sí, debe ser un debug, pero no de firebird, ya que él (firebird) no puede decidir si grabar unos datos en una base de datos o en otra, eso sólo lo podemos hacer nosotros.
__________________
/* Saludos
*/
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código

$ sudo mv system > /dev/null

Responder Con Cita
  #9  
Antiguo 05-01-2012
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.674
Chris Va por buen camino
Una pregunta: ¿Cómo determinas a que base de datos te conectarás dependiendo de la sucursal en la que te encuentres? ¿Está guardado en alguna configuración o lo hace el usuario?

Otra pregunta: ¿Utilizas conexiones persistentes o reinicias la conexión a la base de datos cuando realizas ciertas operaciones?

Saludos,
Chris
__________________
Delphi Blog - Blog Web - @chrramirez
Responder Con Cita
  #10  
Antiguo 05-01-2012
jimmy_aei jimmy_aei is offline
Registrado
 
Registrado: mar 2008
Posts: 6
jimmy_aei Va por buen camino
Gracias chris
Tengo un config.ini por terminal y de allí tomo la ruta de conexión, allí hacen todos los movimientos.
desde que entran al sistema se hace la conexión al ibdatabase y hasta que cierran el programa se cierra la conexión.

dentro del programa si hago consultas o conexiones a las otras bases de datos, pero solo para consulta de productos y existencias en las demás sucursales.

es un ibdatabase adicional, con un ibsql y una transaccion, se conecta, obtiene la consulta del producto especifico y se cierra.

no se si esto sirva
saludos
Responder Con Cita
  #11  
Antiguo 05-01-2012
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.674
Chris Va por buen camino
Cita:
Empezado por jimmy_aei Ver Mensaje
dentro del programa si hago consultas o conexiones a las otras bases de datos, pero solo para consulta de productos y existencias en las demás sucursales.

es un ibdatabase adicional, con un ibsql y una transaccion, se conecta, obtiene la consulta del producto especifico y se cierra.
He ahí el detalle, a cómo decía Cantinflas.

Creo que son estas partes las que tienes que depurar con ojo de forense de catástrofes aéreas. Estoy casi seguro que esa es la parte de la aplicación que te está dando problemas. Revisa con lupa el código de estas secciones de la aplicación y seguro encuentres el problema.

Saludos,
Chris
__________________
Delphi Blog - Blog Web - @chrramirez
Responder Con Cita
Respuesta


Herramientas
Desplegado

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
comprobar duplicidad campos sql gonza_619 Varios 4 16-09-2010 17:40:50
Duplicidad de datos a la hora de imprimir - Fastreport Nilson Zabaleta Impresión 0 27-10-2008 15:30:11
Como evitar duplicidad en un dbgrid? alcides OOP 8 06-02-2007 22:06:48
por que duplicidad de registros con clientdataset sin ingresar registros ...mysql Arturo MySQL 3 05-09-2006 19:39:37
Duplicidad de lineas en un grid con select contra firebird saruman91 Firebird e Interbase 6 29-10-2004 03:41:33


La franja horaria es GMT +2. Ahora son las 00:22:08.


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