Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
Como Puedo Evitar Duplicar Datos En Mi Base
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Como Puedo Evitar Duplicar Datos En Mi Base 
 
Buenas tardes estoy haciendo un programa para gestionar un inventario y tengo algunas
dudas, ya visité el sitio y recogí los requerimientos y siguiendo un consejo que vi aquí
mismo construí mi base de datos la cual explico a continuación:

nombre: sistcontpro

tabla: insumo
campos: id_insumo
    categoria
    descripcion
    empaque
    cantidad
    nota_entrega
    fecha_despacho
    fecha_llegada
    fecha_vencimiento    
    proveedor
    lote

tabla: usuario
campos: id_usuario
    nombre_usuario
    clave_usuario
    tipo_usuario

tabla: pedido
campos: id_pedido
    insumo
    cantidad
    fecha_pedido
    destino_pedido

no he relacionado las tablas ya que desconozco el proceso, este programa gestionará el
inventario de un ambulatorio los insumos son médicos, las categorías son medicamentos,
médico-quirúrgico, insumos de limpieza e insumos de oficina

en la tabla insumo me han dicho que necesitan registrar todos esos datos y al registrar que haga un reporte de la
llegada de esos insumos con todos los datos, hice un formulario con todo lo que me piden y logré registrar
en la base de datos, pero al registrar el mismo insumo me lo agrega a la base de datos, pensé en hacer otro
formulario para actualizar la cantidad y otros datos y de hecho creo que lo necesitaré, pero los demas datos son importantes para el reporte quisiera alguna sugerencia de que hacer, porque si llegan mas insumos que ya estén
en la base de datos voy a tener muchas veces el mismo insumo y la base crecería con muchos datos duplicados,
esta es una de las muchas preguntas pero voy a ir paso a paso, estoy usando gambas 3.8.4 en ubuntu 12.04
con apache, sistema manejador mysql y el entorno gráfico phpmyadmin pensé en usar sqlite pero creo que la base de datos
va a crecer mucho y a lo mejor no es el sistema indicado

este es mi código

gambas class file

  Private hresul As Result
  Private editando As Boolean
  
  
  Public Sub runedit(data As Result)
  
    If Not data.Available Then
      Print "data(Result) es nulo"
      Return
    Endif
  
  editando = True
  hresul = data
  
    txtId_Insumos.Text = hresul["id"]
    cbxCategoria.Text = hresul["categoria"]
    txtDescripcion.Text = hresul["descripcion"]
    txtEmpaque.Text = hresul["empaque"]
    vbxCantidad.Value = hresul["cantidad"]
    txtNotaEntrega.Text = hresul["notaentrega"]
    datebxDespacho.Value = hresul["fechadespacho"]
    datebxLlegada.Value = hresul["fechallegada"]
    datebxVencimiento = hresul["fechavencimiento"]
    txtProveedor.Text = hresul["proveedor"]
    txtLote.Text = hresul["lote"]
  
End


Public Sub btnCerrar_Click()

  
  Me.close  'instruccion para cerrar el formulario activo

End

Public Sub btnRegistrar_Click()
  
    'Dim agregar As Result
    ModuloConexion.moduloconexion
    
    
    If IsNull(cbxCategoria.Text) Then
      Message.Warning("Debe escoger una opción")
      cbxCategoria.SetFocus
      Return
      Else
        If IsNull(txtDescripcion.Text) Then
          Message("Debe llenar éste campo")
          txtDescripcion.SetFocus
          Return
          Else
            If IsNull(txtEmpaque.Text) Then
              Message("Debe llenar éste campo")
              txtEmpaque.SetFocus
              Return
              Else
                If vbxCantidad.Value = 0 Then
                  Message("Debe llenar éste campo")
                  vbxCantidad.SetFocus
                  Return
                  Else
                    If IsNull(txtNotaEntrega.Text) Then
                      Message("Debe llenar éste campo")
                      txtNotaEntrega.SetFocus
                      Return  
                      Else                  
                        If IsNull(datebxDespacho.Value) Then
                      Message("Debe llenar éste campo")
                      datebxDespacho.SetFocus
                      Return
                        Else
                          If IsNull(datebxLlegada.Value) Then
                          Message("Debe llenar éste campo")
                          datebxLlegada.SetFocus
                          Return
                            Else
                              If IsNull(datebxVencimiento.Value) Then
                              Message("Debe llenar éste campo")
                              datebxVencimiento.SetFocus
                              Return
                              Else
                                If IsNull(txtProveedor.Text) Then
                                  Message("Debe llenar éste campo")
                                  txtProveedor.SetFocus
                                  Return
                                  Else
                                    If IsNull(txtLote.Text) Then
                                      Message("Debe llenar éste campo")
                                      txtLote.SetFocus
                                      Return
                                    Endif                                
                                Endif                            
                            Endif
                        Endif
                    Endif
                  Endif
                Endif
            Endif
        Endif    
    Endif
    
      If editando Then
        Try hresul["id_insumos"] = txtId_Insumos.Text
        Try hresul["categoria"] = cbxCategoria.Text
        Try hresul["descripcion"] = txtDescripcion.Text
        Try hresul["empaque"] = txtEmpaque.Text
        Try hresul["cantidad"] = vbxCantidad.Value
        Try hresul["notaentrega"] = txtNotaEntrega.Text
        Try hresul["fechadespacho"] = datebxDespacho.Value
        Try hresul["fechallegada"] = datebxLlegada.Value
        Try hresul["fechavencimiento"] = datebxVencimiento.Value
        Try hresul["proveedor"] = txtProveedor.Text
        Try hresul["lote"] = txtLote.Text
      Endif
    
    ModuloConexion.$conexion.Exec("insert into insumos (id_insumos,categoria,descripcion,empaque,cantidad,notaentrega,fechadespacho,fechallegada,fechavencimiento,proveedor,lote) values (&1,&2,&3,&4,&5,&6,&7,&8,&9,&{10},&{11})", Null,
    cbxCategoria.Text, txtDescripcion.Text, txtEmpaque.Text, vbxCantidad.Value, txtNotaEntrega.Text, datebxDespacho.Value, datebxLlegada.Value, datebxVencimiento.Value, txtProveedor.Text, txtLote.Text)
    
    Message("Registro guardado")
    limpiar
    ModuloConexion.$conexion.Close
    
    

End

Public Sub txtCantidad_KeyPress() 'este código está comentado para que no se me olvide si lo llegara a necesitar
      
      'este trozo de codigo me permite que solo reciba números la caja de texto pero también
      'con un mensaje de advertencia si se pulsan teclas que no sean numéricas
      'pero para datos enteros usé un valuebox
     '  Select Case Key.Code
     '    
     '    Case 48 To 57 'código ascii de los números
     '      Case Key.BackSpace 'permite la tecla de retroceso
     '      Case Key.Delete 'permite la tecla borrado (supr)
     '      Case Key.Tab 'permite la tecla tabulador
     '    Case Else
     '      Message.Warning("¡Disculpe, ingresar solo números")
     '   Stop Event
     ' End Select

End

Public Sub Form_Open()

  

End

Sub limpiar()
  
    cbxCategoria.Text = ""
    txtDescripcion.Clear
    txtEmpaque.Text = Null
    vbxCantidad.Value = Null
    txtNotaEntrega.Text = Null
    datebxDespacho.Value = ""
    datebxLlegada.Value = Null
    datebxVencimiento.Value = Null
    txtProveedor.Text = Null
    txtLote.Text = Null
End


Public Sub btnLimpiar_Click()

  limpiar
  'null es para limpiar las cajas de texto tambien se usan las comillas dobles ("") o
    '.clear aquí las usé todas para ver si alguna daba problemas
    cbxCategoria.Text = ""
    txtDescripcion.Clear
    txtEmpaque.Text = Null
    vbxCantidad.Value = Null
    txtNotaEntrega.Text = Null
    datebxDespacho.Value = ""
    datebxLlegada.Value = Null
    datebxVencimiento.Value = Null
    txtProveedor.Text = Null
    txtLote.Text = Null

End

Gracias
Willian Suárez Venezuela
 



 
willyanjose - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Puedo Evitar Duplicar Datos En Mi Base 
 
txtId_Insumos.Text = hresul["id"]
    cbxCategoria.Text = hresul["categoria"]
    txtDescripcion.Text = hresul["descripcion"]

'tambien puedes usarlo asi que es mas comodo de escribir
 txtId_Insumos.Text = hresul!id
    cbxCategoria.Text = hresul!categoria
    txtDescripcion.Text = hresul!descripcion

 




===================
Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
 
v3ctor - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Puedo Evitar Duplicar Datos En Mi Base 
 
Se te duplica todo porque no distingues entre una edición y una Adición.

vengan los datos desde donde vengan haces un

  
ModuloConexion.$conexion.Exec("insert into insumos (id_insumos,categoria,descripcion,empaque,cantidad,notaentrega,fechadespacho,fechallegada,fechavencimiento,proveedor,lote) values (&1,&2,&3,&4,&5,&6,&7,&8,&9,&{10},&{11})", Null,
    cbxCategoria.Text, txtDescripcion.Text, txtEmpaque.Text, vbxCantidad.Value, txtNotaEntrega.Text, datebxDespacho.Value, datebxLlegada.Value, datebxVencimiento.Value, txtProveedor.Text, txtLote.Text)
 


Debes distinguir (basta con una variable lógica recibida) entre altas y actualizaciones. Para ello, en el formulario de datos creas un botón de "Actualizar" y otro de "Nuevo" El evento Click de cada botón es igual salvo que envías una variable más a la función runedit
Publis sub botonEdit_Click()

runedit(miresult,false) 'para la actualización

end


y

Publis sub botonAdd_Click()

runedit(miresult,True) 'para la adición de nuevos registros

end


Luego, en el código de runedit:

private $nuevo as boolean

Public Sub runedit(data As Result, nuevo as boolean)

$nuevo = nuevo
.....
.....

 


Luego, cuando vas a grabar:

if $nuevo then
      ModuloConexion.$conexion.Exec("insert into insumos (id_insumos,categoria,descripcion,empaque,cantidad,notaentrega,fechadespacho,fechallegada,fechavencimiento,proveedor,lote) values (&1,&2,&3,&4,&5,&6,&7,&8,&9,&{10},&{11})", Null,
cbxCategoria.Text, txtDescripcion.Text, txtEmpaque.Text, vbxCantidad.Value, txtNotaEntrega.Text, datebxDespacho.Value, datebxLlegada.Value, datebxVencimiento.Value, txtProveedor.Text, txtLote.Text)
else
    ModuloConexion.$conexion.Exec("update insumos set id_insumos = &1,categoria =&2,descripcion=&3...etc, etc.", id_insumos.text, cbxCategoria.Text, txtDescripcion.Text, etc.etc.)
endif

 

Ten en cuenta que la sintaxis SQL puede ser distinta para SQLite y MySQL y ya lo tienes.
Con esto no se te duplicarán si tú no quieres.

Saludos.
 




===================
No podemos regresar
 
última edición por shordi el Martes, 17 May 2016, 09:14; editado 1 vez 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Puedo Evitar Duplicar Datos En Mi Base 
 
Buenos días
Gracias por la respuesta voy a implementar lo que me dicen
¿quiere decir que cuando actualice en vez de un nuevo registro los datos antiguos se perderán
y lo que me quedará como soporte será el reporte que haya hecho cuando hayan llegado los insumos?
disculpa tanta pregunta estoy algo enredado con eso porque los datos de nota de entrega lote y las fechas son
importantes para ellos

Gracias
Willian Suárez Venezuela
 



 
willyanjose - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Puedo Evitar Duplicar Datos En Mi Base 
 
willyanjose escribió: [Ver mensaje]
Buenos días
Gracias por la respuesta voy a implementar lo que me dicen
¿quiere decir que cuando actualice en vez de un nuevo registro los datos antiguos se perderán
y lo que me quedará como soporte será el reporte que haya hecho cuando hayan llegado los insumos?
disculpa tanta pregunta estoy algo enredado con eso porque los datos de nota de entrega lote y las fechas son
importantes para ellos

Gracias
Willian Suárez Venezuela


Wilian
Te he explicado cómo añadir o actualizar registros cuando tú decidas. Te he dado un mecanismo para "Evitar duplicar datos en mi base" que es lo que pedías. Ahora no sé que es lo que preguntas.

Tienes que sistematizar tu lenguaje.
 
Partiendo de estas definiciones:

Actualizar = Modificar los datos existentes en la base de datos
Registro = Conjunto de datos relacionados entre sí, que constituyen una unidad de información en una base de datos
Soporte = Dispositivo de almacenamiento (un CD, un disco duro)
Reporte = Listado, impreso o en pantalla, de los datos de la base de datos
Insumo = Conjunto de elementos que toman parte en la producción de otros bienes

Ahora intenta entender tu pregunta: "¿quiere decir que cuando actualice en vez de un nuevo registro los datos antiguos se perderán
y lo que me quedará como soporte será el reporte que haya hecho cuando hayan llegado los insumos?"

Yo no la entiendo.
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Puedo Evitar Duplicar Datos En Mi Base 
 
usando "unique" ?
 




===================
Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
 
v3ctor - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Puedo Evitar Duplicar Datos En Mi Base 
 
Buenas tardes

Revisando lo que escribí tienes razón pido disculpas por la mala redacción
veamos los datos

1-tengo mi base y ya recibe los datos de los nuevos productos (insumos) desde un formulario
2-si llega el mismo producto (insumo) y lo inserto en la base de datos me lo acepta y tendría el producto (insumo)duplicado
salvo algunos datos como la fecha y el lote

solución
un botón actualizar que me permitirá actualizar el producto (insumo) llegado que ya exista en la base de datos
y ya tengo el de nuevo producto (insumo) por si acaso no está registrado.

esa solución la voy a poner en práctica ya que tienes razón en lo de actualizar,
mi preocupación es que una vez que actualice, los datos anteriores como el lote y la nota de entrega
se perderían porque tendría que actualizar esos datos también entonces la solución pienso yo
es que haga un reporte de las entradas de productos, (insumos) que de hecho me lo piden, con todos los datos para
tener un respaldo de lo que llegó y poder consultar ése reporte en algún momento que se necesite
 
Espero haberme hecho entender, todavía tengo que mejorar muchas cosas (incluido mi vocabulario).
Pido disculpas de nuevo por no haberme sabido explicar es mi proyecto de graduación
y reconozco que me faltan conocimientos quisiera enviarte lo que he hecho hasta el momento
y cuando esté terminado ponerlo a disposición para su libre descarga

Gracias

Willian Suárez Venezuela
 



 
willyanjose - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Puedo Evitar Duplicar Datos En Mi Base 
 
Citar:
Tabla: insumo
campos: id_insumo
    categoria
    descripcion
    empaque
    cantidad
    nota_entrega
    fecha_despacho
    fecha_llegada
    fecha_vencimiento    
    proveedor
    lote

Tu problema es que esta tabla no es una tabla, son dos. Por un lado tienes la tabla insumo en sí mismo con
id_insumo
categoria  (necesitas una tabla de categorias)
descripción
empaque

y por otro tienes la tabla de entregas que debería tener
id_entrega
id_insumo
nota_entrega
fecha_despacho
fecha_llegada
fecha_vencimiento
proveedor  (necesitas una tabla de proveedores también)
lote

Cada entrega genera una entrada en la tabla de entradas y tiene una referencia a la tabla de insumos. Con eso no hay duplicidad ninguna. Aprende a relacionar las tablas y, además, tu programa será infinitamente más sólido, más sencillo y más fácil de mantener.

Por supuesto necesitarás un formulario para mantenimiento de la tabla de insumos, otro para las entradas y salidas, otro para los pedidos, otro para los proveedores, otro para las categorías y, al menos, un reporte para su impresión.
Si, además, necesitas control de usuarios, necesitas otro formulario para la tabla de usuarios y dos campos extras al final de todas y cada una de las tablas: usuario que modifica/crea el registro y fechayhora en que lo hace. Si no es así el control de usuarios es algo inútil pues nunca sabrás quién ha hecho qué.

Suena complicado, lo sé... pero nadie dijo que esto de programar fuese sencillo      
 




===================
No podemos regresar
 
última edición por shordi el Miercoles, 18 May 2016, 00:25; editado 4 veces 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Puedo Evitar Duplicar Datos En Mi Base 
 
Buenas tardes gracias por la respuesta, ya lo que me dices de la base de datos y las tablas
lo pensé porque la tabla de insumos está como con muchos campos voy a reconstruir la base de datos
teniendo en cuenta lo que me dices, otra cosa mi interfaz gráfica tiene todo lo que me comentas, control de usuario,
reportes, consulta, búsqueda, y otras cosas más, muy agradecido por la respuesta, voy a ponerme manos a la obra
ya que solo me quedan 3 meses para entregar el programa.

Nota: me gustaría que vieras mi interfaz gráfica, si no es molestia claro sólo dime como enviarlo

Willian Suárez Venezuela
 



 
willyanjose - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Puedo Evitar Duplicar Datos En Mi Base 
 
Vamos a ver si gano el quesito del trivial....

Usando InnoDB ? y sus relaciones?
 



 
arubioc - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes No Puedo Añadir A La Base De Datos techm3 Bases de Datos 15 Jueves, 05 Agosto 2010, 03:03 Ver último mensaje
techm3
No hay nuevos mensajes No Puedo Crear Una Base De Datos JosueCR Bases de Datos 3 Lunes, 09 Agosto 2010, 05:50 Ver último mensaje
JosueCR
No hay nuevos mensajes Como Puedo Modificar Datos De La Base De D... metalgearxd General 2 Viernes, 01 Marzo 2013, 13:40 Ver último mensaje
metalgearxd
No hay nuevos mensajes Como Puedo Proteger Mi Base Da Datos SqLite Ricardo Prieto General 1 Viernes, 01 Julio 2016, 17:23 Ver último mensaje
shordi
 

Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron