Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-06-2016
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 4.215
Poder: 24
newtron Va camino a la fama
¿Solamente haces ese proceso de inserción? ¿No hay modificaciones ni anulaciones?

Por otro lado, y por experiencia, te puedo decir que lo más sano es que los procesos para actualizar distintos campos a partir de inserciones, modificaciones o anulaciones en tablas de movimientos estén en triggers de la base de datos. De esa manera tendrás bastantes menos problemas.

Saludos
__________________
Be water my friend.
Responder Con Cita
  #2  
Antiguo 09-06-2016
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Poder: 24
fjcg02 Va camino a la fama
Cita:
Empezado por newtron Ver Mensaje
Por otro lado, y por experiencia, te puedo decir que lo más sano es que los procesos para actualizar distintos campos a partir de inserciones, modificaciones o anulaciones en tablas de movimientos estén en triggers de la base de datos. De esa manera tendrás bastantes menos problemas.


Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #3  
Antiguo 09-06-2016
bitbow bitbow is offline
Miembro
 
Registrado: jul 2006
Posts: 366
Poder: 20
bitbow Va camino a la fama
Solo por molestar un poco, de casualidad tu cliente maneja multiples puntos de venta (varios equipos con su soft atacando la misma base de datos), como gestionas esto?

Veo que en tus inserts no manejas un identificador para el punto de venta o terminal.

Saludos.
__________________
¡Ni como ayudarte Niño!!
bitbow
Responder Con Cita
  #4  
Antiguo 09-06-2016
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.941
Poder: 27
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Otra buena practica es usar logs. En cada paso importante pones algo como

Cita:
Log.debug("Inv.Add", "id=16, date='2016-06-08', date='22:19:12', total=1"),
Y luego asi puedes evaluar posteriormente el flujo del proceso.

AUN mas confiable si haces el LOG *dentro* de la BD. Creas una tabla LOG y haces similar.

Si haces un Log *correcto*, deberias poder reconstruir con 100% de fidelidad los datos derivando SOLO del log.
__________________
El malabarista.
Responder Con Cita
  #5  
Antiguo 09-06-2016
Avatar de darkerbyte
darkerbyte darkerbyte is offline
Miembro
 
Registrado: feb 2005
Posts: 197
Poder: 22
darkerbyte Va por buen camino
Gracias mamcx

Tienes razón, voy a programar el log porque es un dolor de cabeza esto.
Responder Con Cita
  #6  
Antiguo 10-06-2016
bitbow bitbow is offline
Miembro
 
Registrado: jul 2006
Posts: 366
Poder: 20
bitbow Va camino a la fama
Ya que nos ampliaste la info sobre le problema lo único que queda son los logs y como indican los compañeros en sus comentarios, si el fallo lo tiene el cliente y tu no puedes replicarlo vuela al lugar del cliente (después de añadir logs por donde se te ocurra) y espera a ver el error.

Saludos.
__________________
¡Ni como ayudarte Niño!!
bitbow
Responder Con Cita
  #7  
Antiguo 09-06-2016
Avatar de darkerbyte
darkerbyte darkerbyte is offline
Miembro
 
Registrado: feb 2005
Posts: 197
Poder: 22
darkerbyte Va por buen camino
Cita:
Empezado por bitbow Ver Mensaje
Solo por molestar un poco, de casualidad tu cliente maneja multiples puntos de venta (varios equipos con su soft atacando la misma base de datos), como gestionas esto?

Veo que en tus inserts no manejas un identificador para el punto de venta o terminal.

Saludos.
Si maneja multiples terminales, incluso manejamos sucursales vía internet.

No puse todos los campos de la tabla en la consulta que escribí arriba a fin simplificar mi ejemplo. La tabla de Ventas tiene como llave primaria (idSucursal, idVenta) ambas de tipo entero con la que identifico en que sucursal se realizó la venta. Claro, esta misma llave esta en la tabla ventas_det la cual tiene como llave primaria (idSucursal, idVenta, idProducto) siendo el ultimo de tipo string que es una llave foranea a la tabla de productos. La tabla de Ventas también tiene una columna llamada "idVendedor" con la que identifico que vendedor hizo la venta. No llevo un control por máquina ya que los vendedores pueden abrir multiples instancias del programa en diferentes computadoras usando su mismo id de usuario y estas ventas al hacerse el corte se filtran en base al vendedor que las realizó.

Para registrar la venta lo que hago es obtener el primero el siguiente folio y después genero la consulta (como la que puse arriba, mas menos productos).
Si ocurre un error (que se intentaran registrar dos ventas en el mismo instante y por ende el folio de la venta que llegó posterior está repetido) el sistema manda un rollback de la transaccion que fue rechazada, actualizamos el folio e intentamos registrarla nuevamente.

Estoy haciendo algo mal? quiza me pueden sugerir una mejor manera de hacer las cosas.

De verdad muchas gracias por sus comentarios
Responder Con Cita
  #8  
Antiguo 09-06-2016
Avatar de darkerbyte
darkerbyte darkerbyte is offline
Miembro
 
Registrado: feb 2005
Posts: 197
Poder: 22
darkerbyte Va por buen camino
Question Triggers

Cita:
Empezado por newtron Ver Mensaje
¿Solamente haces ese proceso de inserción? ¿No hay modificaciones ni anulaciones?

Por otro lado, y por experiencia, te puedo decir que lo más sano es que los procesos para actualizar distintos campos a partir de inserciones, modificaciones o anulaciones en tablas de movimientos estén en triggers de la base de datos. De esa manera tendrás bastantes menos problemas.

Saludos
Hola Newtron.

Aprecio mucho tu tiempo para responder y por tu consejo.

Basicamente son 3 tablas. Una con el inventario de productos, una para registro de ventas y otra con el detalle de la venta. La situación es que solo hago inserts cuando se hace una venta.
Cuando se hace una devolución de algun producto o la cancelación de la venta solo marco el ID de la cancelación el que guardo en una tabla de cancelaciones y reintegro el producto al inventario.
No se si para estos casos es posible programar un trigger ya que se haría una modificación solo en una columna de la tabla. No soy muy experto en el tema de los triggers.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
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
Alguién conoce una solución simple y confiable para la WebCam en Delphi ? rolandoj Gráficos 8 27-05-2013 09:53:56
Sincronizar BD MySQL Hosting con BD MySQL servidor local ivantech MySQL 3 09-03-2010 19:01:07
Componente confiable para pasar voz a texto!! JuanErasmo C++ Builder 1 06-05-2006 01:20:13
como conectarme remotamente mysql a mysql sakuragi MySQL 14 11-11-2004 15:04:46


La franja horaria es GMT +2. Ahora son las 21:53:01.


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