Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

registros duplicados

Estas en el tema de registros duplicados en el foro de Mysql en Foros del Web. hola a todos.. resulta que tengo una tabla llamada ventas con la siguientes estructura id LLAVE (PRIMIARY KEY) AUTONUMERICO numfac NUMERICO cliente VARCHAR monto DOUBLE ...
  #1 (permalink)  
Antiguo 19/06/2014, 05:21
Avatar de Ausberto  
Fecha de Ingreso: octubre-2005
Mensajes: 27
Antigüedad: 18 años, 6 meses
Puntos: 0
registros duplicados

hola a todos..
resulta que tengo una tabla llamada ventas con la siguientes estructura

id LLAVE (PRIMIARY KEY) AUTONUMERICO
numfac NUMERICO
cliente VARCHAR
monto DOUBLE
fecha DATE
dosif dosificacion
usuario VARCHAR

COMO PUEDO CONTROLAR QUE NO SE REPITA EL NUMERO DE FACTURA (numfac) AL INSERTAR DATOS DESDE UN RED CON 3 PCS, resulta que es un sistemita punto de venta y resulta que si se pueden repetir siempre y cuando sea distinta dosificacion campo (dosif), he ntentado muchas cosas y nada al parecer cuando presionan al mismo tiempo insertar dos pcs siempre se repite el numero de factura de la misma dosificacion, estoy utilizzando vb 2008 y Mysql.
ayuda porfavor es urgente....
  #2 (permalink)  
Antiguo 19/06/2014, 07:39
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: registros duplicados

Amigo estas en un foro de sql server no de mysql....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 19/06/2014, 07:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: registros duplicados

Movido a foro de MySQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 19/06/2014, 07:53
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: registros duplicados

Cita:
Iniciado por Ausberto Ver Mensaje
hola a todos..
resulta que tengo una tabla llamada ventas con la siguientes estructura

id LLAVE (PRIMIARY KEY) AUTONUMERICO
numfac NUMERICO
cliente VARCHAR
monto DOUBLE
fecha DATE
dosif dosificacion
usuario VARCHAR

COMO PUEDO CONTROLAR QUE NO SE REPITA EL NUMERO DE FACTURA (numfac) AL INSERTAR DATOS DESDE UN RED CON 3 PCS, resulta que es un sistemita punto de venta y resulta que si se pueden repetir siempre y cuando sea distinta dosificacion campo (dosif), he ntentado muchas cosas y nada al parecer cuando presionan al mismo tiempo insertar dos pcs siempre se repite el numero de factura de la misma dosificacion, estoy utilizzando vb 2008 y Mysql.
ayuda porfavor es urgente....
Por un lado, habría que saber hasta qué punto puedes tu modificar la base de datos, por cuanto es muy probable que haya ererores de diseño.

Por otr lado, es más un tema de diseño de sistemas que propiamente de BBDD.
La cosa es simple en alguna medida:
1) El número de factura no se genera localmente en los clientes, sino que se consulta a la base.
2) Cuando se consulta, se debe hacer una reserva da ID (hay un capitulo entero del manual de referencia ed MySQL sobre este tema).
3) Usualmente, las facturas se deben generar si y sólo si se confirma la venta, y para ese momento ya se cuenta con todos los datos para dar el alta de la factura completa. NO se debe generar un número de factura antes de eso, y no se debe inciial la gestion del pago hasta que la factura no se genere.
4) En el caso extremo, si dos maquinas cliente puede acceder simultáneamente, se deben usar transacciones para evitar las inconsistencias.
5) En el caso de haber concurrencia, también debe hacerse un proceso de validacion de existencias al momento de generar l afactura, porque otra venta podría haber realizado las restas de stock y no ser posible completar esa venta.

Tal vez puedas ver en este contexto que hacer un sistema multiusuario de ventas no es una tarea sencilla, y hay que diseñar con cuidado.
No es posible "adaptar" un sistema monousuario a multiusuario en pasos simples. Hay mucho por rediseñar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 19/06/2014, 11:29
Avatar de Ausberto  
Fecha de Ingreso: octubre-2005
Mensajes: 27
Antigüedad: 18 años, 6 meses
Puntos: 0
Respuesta: registros duplicados

alguna idea para corregir el diseño algun administrador de mysql que me permita hacer esta tarea estoy tratando de controlarlo con procedimientos almacenados pero no logro salir de esto:


CREATE DEFINER=`root`@`%` PROCEDURE `guardar`(in pidv bigint, in pnt int, in pccon varchar(50), in pidcli varchar(30), in pfecha Date, in phora varchar(15), in ptipov varchar(20), in pcajera varchar(30) , in ptotalc Double, in pbs Double, in psus Double, in pcambio Double, in pnauto varchar(30), in psenor varchar(50), in pidalm int, in pdescu Double, in predon Double, in pip varchar(40), in pabonox Double, in psaldo Double, in pflim Date, in pidos Int, in ptipoc Double, in pntar varchar(50), in pvtat varchar(5), in pentrega Double)
BEGIN
DECLARE num INT;
SELECT COUNT(*) INTO 'num' FROM t_venta WHERE idv =pidv AND idos = pidos AND vtat ='F';
if num = 0 THEN
INSERT INTO t_venta(idv, nt, ccon, idcli, fecha, hora, tipov, cajera, totalc, bs, sus, cambio, nauto, senor, idalm, descu, redon, ip, abonox, saldo, flim, idos, tipoc, ntar, vtat, entrega) VALUES (pidv, pnt, pccon, pidcli, pfecha, phora, ptipov, pcajera, ptotalc, pbs, psus, pcambio, pnauto, psenor, pidalm, pdescu, predon, pip, pabonox, psaldo, pflim, pidos, ptipoc, pntar, pvtat, pentrega);
END if;
call existe(pidv, pidos, pnt);
END;


bueno ese es mi proced y lo llamo asi

Código:
Dim cmd As New MySqlCommand("guardar", Con)
            Dim XX As String

            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.AddWithValue("?pidv", v1)
            cmd.Parameters.AddWithValue("?pnt", v2)
            cmd.Parameters.AddWithValue("?pccon", v3)
            cmd.Parameters.AddWithValue("?pidcli", v4)
            cmd.Parameters.AddWithValue("?pfecha", v5)
            cmd.Parameters.AddWithValue("?phora", v6)
            cmd.Parameters.AddWithValue("?ptipov", v7)
            cmd.Parameters.AddWithValue("?pcajera", v8)
            cmd.Parameters.AddWithValue("?ptotalc", v9)
            cmd.Parameters.AddWithValue("?pbs", v10)
            cmd.Parameters.AddWithValue("?psus", v11)
            cmd.Parameters.AddWithValue("?pcambio", v12)
            cmd.Parameters.AddWithValue("?pnauto", v13)
            cmd.Parameters.AddWithValue("?psenor", v14)
            cmd.Parameters.AddWithValue("?pidalm", v15)
            cmd.Parameters.AddWithValue("?pdescu", v16)
            cmd.Parameters.AddWithValue("?predon", v17)
            cmd.Parameters.AddWithValue("?pip", v18)
            cmd.Parameters.AddWithValue("?pabonox", v19)
            cmd.Parameters.AddWithValue("?psaldo", v20)
            cmd.Parameters.AddWithValue("?pflim", v21)
            cmd.Parameters.AddWithValue("?pidos", v22)
            cmd.Parameters.AddWithValue("?ptipoc", v23)
            cmd.Parameters.AddWithValue("?pntar", v24)
            cmd.Parameters.AddWithValue("?pvtat", v25)
            cmd.Parameters.AddWithValue("?pentrega", v26)

            cmd.ExecuteNonQuery()
            'XX = cmd.Parameters.Item(2).Value
            XX = Convert.ToInt32(cmd.ExecuteScalar())
            If XX > 0 Then
                Return True
            Else
                Return False
            End If
quia parezca uy primitivo pero ahi el vamos dando duro saludos

Etiquetas: duplicados, registros, siguiente, sql-server, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:39.