Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

No ingresar daros repetidos acces desde VB

Estas en el tema de No ingresar daros repetidos acces desde VB en el foro de Visual Basic clásico en Foros del Web. Buenos Días!!! Yo siempre buscando respuestas acudo a quienes saben más que yo y responden bien y rápido. Tengo un pequeño problema, en una base ...
  #1 (permalink)  
Antiguo 04/04/2011, 06:54
 
Fecha de Ingreso: marzo-2011
Ubicación: Florida-Uruguay
Mensajes: 74
Antigüedad: 13 años, 8 meses
Puntos: 4
Exclamación No ingresar daros repetidos acces desde VB

Buenos Días!!!
Yo siempre buscando respuestas acudo a quienes saben más que yo y responden bien y rápido. Tengo un pequeño problema, en una base de datos acces que manipulo desde un form desde visual ingreso datos de usuarios a una lista de espera, lo que deseo es que esta en esta lista no se repita en una misma especialidad 2 veces el mismo usuario.
el Codigo que desarrolle es el siguiente:

Private Sub Ingreso_a_Lista_Click()
Dim buscar As String
If rst.BOF = False And rst.EOF = False Then
If buscar = "Especialidad" & "Documento" = True Then
MsgBox "No Se puede Ingresar Dos veces en la misma Lista de Espera a un mismo Usuario"
Else
rst.AddNew
cnn.Execute "INSERT INTO Listadeespera (FechaIngreso,Documento,Especialidad,Medico,Nombre 1,Nombre2,Apellido1,Apellido2,Carne,Vencimiento,Te lefonos,Observaciones) Values('" & _
LabelFechaIngresoLE & "', '" & Text1 & "', '" & Combo1 & "', '" & Combo2 & "', '" & Text2 & "', '" & Text3 & "', '" & Text4 & "', '" & Text5 & "', '" & Text6 & "', '" & Text7 & "', '" & Text8 & " ', '" & Text9 & " ')"
MsgBox "El Usuario ha sido Agregado a la base de datos de manera exitosa!"
rst.Update
'--------------------------------------------------------------------------------------------------------End If
End If
End Sub
Pero me ingresa el usuario igual 2 veces, alguien me puede decir donde está el error u horror? Muchas gracias!!!
  #2 (permalink)  
Antiguo 04/04/2011, 07:09
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 9 meses
Puntos: 89
Respuesta: No ingresar daros repetidos acces desde VB

Lo único que se me ocurre es que estes llamando a ese evento dos veces por alguna causa.

P.D. Supongo que ese es tu unico INSERT y no tengas otro en otra parte del código.
  #3 (permalink)  
Antiguo 04/04/2011, 10:38
 
Fecha de Ingreso: marzo-2011
Ubicación: Florida-Uruguay
Mensajes: 74
Antigüedad: 13 años, 8 meses
Puntos: 4
Respuesta: No ingresar daros repetidos acces desde VB

En el Formulario es el único INSERT INTO, tal vez me exprese mal lo que deseo hacer es que busque en la tabla antes de agregar y si el registro (según el número de documento y especialidad) ya está ingresado, que no lo vuelva a ingresar y me avise con un Msgbox
  #4 (permalink)  
Antiguo 06/04/2011, 07:21
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 9 meses
Puntos: 89
Respuesta: No ingresar daros repetidos acces desde VB

Ok, creia que te estaba insertando doble.

Ese IF no tiene sentido:

If buscar = "Especialidad" & "Documento" = True Then

"Documento" nunca valdrá true.

Lo que tienes que hacer es un SELECT y si te devuelve algún registro no hacer la inserción.
  #5 (permalink)  
Antiguo 08/04/2011, 10:36
 
Fecha de Ingreso: marzo-2011
Ubicación: Florida-Uruguay
Mensajes: 74
Antigüedad: 13 años, 8 meses
Puntos: 4
Respuesta: No ingresar daros repetidos acces desde VB

Me podrías dar una ayuda y decirme como harías tu la sentencia para esto?
Gracias por el apoyo
  #6 (permalink)  
Antiguo 08/04/2011, 14:58
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 15 años, 1 mes
Puntos: 47
Respuesta: No ingresar daros repetidos acces desde VB

Hola!!
Intenta asi:

Código vb:
Ver original
  1. Private Sub Ingreso_a_Lista_Click()
  2. Dim buscar As String
  3. Dim rsConsulta as Adodb.Recordset
  4. Set rsConsulta=new adodb.recodset
  5.  
  6. If rst.BOF = False And rst.EOF = False Then
  7. rsConsulta.Open "SELECT * FROM LISTADEESPERA WHERE ESPECIALIDAD=' " & strVALOR_ESPECIALIDAD  & " ' AND DOCUMENTO=' " & strVALOR_DOCUMENTO  & " ' " , CNN, DYNAMIC, LOCKTYPE ' ---> Completa la sentencia  
  8. If rsConsulta.EOF=FALSE Then
  9. MsgBox "No Se puede Ingresar Dos veces en la misma Lista de Espera a un mismo Usuario"
  10. rsConsulta.Close
  11. Set rsConsulta=nothing
  12. Exit sub
  13. Else
  14. cnn.Execute "INSERT INTO Listadeespera (FechaIngreso,Documento,Especialidad,Medico,Nombre 1,Nombre2,Apellido1,Apellido2,Carne,Vencimiento,Te lefonos,Observaciones) Values('" & _
  15. LabelFechaIngresoLE & "', '" & Text1 & "', '" & Combo1 & "', '" & Combo2 & "', '" & Text2 & "', '" & Text3 & "', '" & Text4 & "', '" & Text5 & "', '" & Text6 & "', '" & Text7 & "', '" & Text8 & " ', '" & Text9 & " ')"
  16. MsgBox "El Usuario ha sido Agregado a la base de datos de manera exitosa!"
  17. End If
  18. End Sub
  #7 (permalink)  
Antiguo 11/04/2011, 05:46
 
Fecha de Ingreso: marzo-2011
Ubicación: Florida-Uruguay
Mensajes: 74
Antigüedad: 13 años, 8 meses
Puntos: 4
Respuesta: No ingresar daros repetidos acces desde VB

Lokoman:
En este caso Dim buscar As String esta de más, verdad?
Por otra parte me da error al completar la sentencia, en mi form Combo1 es donde opto por la especialidad y text1 donde digito el documento por lo cual strVALOR_ESPECIALIDAD debería de ser = a combo1 y strVALOR_DOCUMENTO = a text1, me podrías ayudar a completar la sentencia, porque me da error me dice que los argumentos están fuera de la referencias
Me olvidaba, no debería poner al inicio del Sub Dim strValor As String?

Última edición por jeaguiar25; 11/04/2011 a las 06:04
  #8 (permalink)  
Antiguo 11/04/2011, 12:18
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 15 años, 1 mes
Puntos: 47
Respuesta: No ingresar daros repetidos acces desde VB

El [ Dim buscar As String ] está de mas, ya que no lo uso... !

Verifica y nos cuentas:
Código vb:
Ver original
  1. Private Sub Ingreso_a_Lista_Click()
  2.     Dim strVALOR_ESPECIALIDAD As String
  3.     Dim strVALOR_DOCUMENTO As String
  4.     Dim rsConsulta As ADODB.Recordset
  5.     Set rsConsulta = New ADODB.recodset
  6.  
  7.     strVALOR_ESPECIALIDAD = COMBO1.Text
  8.     strVALOR_DOCUMENTO = TEXT1.Text
  9.    
  10.     If rst.EOF = False Then
  11.         rsConsulta.Open "SELECT * FROM LISTADEESPERA WHERE ESPECIALIDAD=' " & strVALOR_ESPECIALIDAD & " ' AND DOCUMENTO=' " & strVALOR_DOCUMENTO & " ' ", cnn, adOpenDynamic, adLockBatchOptimistic
  12.        
  13.         If rsConsulta.EOF = False Then
  14.             MsgBox "No Se puede Ingresar Dos veces en la misma Lista de Espera a un mismo Usuario"
  15.             rsConsulta.Close
  16.             Set rsConsulta = Nothing
  17.             Exit Sub
  18.         Else
  19.             cnn.Execute "INSERT INTO Listadeespera (FechaIngreso,Documento,Especialidad,Medico,Nombre 1,Nombre2,Apellido1,Apellido2,Carne,Vencimiento,Te lefonos,Observaciones) Values('" & _
  20.                         LabelFechaIngresoLE.CAPTION & "', '" & TEXT1.TEXT & "', '" & COMBO1.TEXT & "', '" & Combo2.TEXT & "', '" & Text2.TEXT & "', '" & Text3.TEXT & "', '" & Text4.TEXT & "', '" & Text5.TEXT & "', '" & Text6.TEXT & "', '" & Text7.TEXT & "', '" & Text8.TEXT & " ', '" & Text9.TEXT & " ')"
  21.             MsgBox "El Usuario ha sido Agregado a la base de datos de manera exitosa!"
  22.         End If
  23.     End If
  24. End Sub
  #9 (permalink)  
Antiguo 11/04/2011, 20:48
 
Fecha de Ingreso: marzo-2011
Ubicación: Florida-Uruguay
Mensajes: 74
Antigüedad: 13 años, 8 meses
Puntos: 4
Respuesta: No ingresar daros repetidos acces desde VB

Sabes que me da un error en la sentencia SELECT, me dice que no coinciden los tipos de datos en la expresión de criterios, sin embargo tanto (strVALOR_ESPECIALIDAD = Combo1 .Text) como (strVALOR_DOCUMENTO = Text1.Text) me figuran como los valores del formulario. En el SELECT cambie el (LISTADEESPERA) por ListadeEspera (que es como figura el nombre de la tabla) y (ESPECIALIDAD) lo cambie por Especialidad (que es como figura el nombre del campo) el cnn me da la ruta correcta, adOpenDynamic es = 2 y adLockBatchOptimistic =4. Tenes idea de que puede fallar?
  #10 (permalink)  
Antiguo 11/04/2011, 21:11
 
Fecha de Ingreso: marzo-2011
Ubicación: Florida-Uruguay
Mensajes: 74
Antigüedad: 13 años, 8 meses
Puntos: 4
Respuesta: No ingresar daros repetidos acces desde VB

Perdon ya lo solucione, cambie el (AND) del select por (&), pero igual me ingresa 2 veces los usuarios en la lista de espera, se te ocurre que más puedo hacer?
  #11 (permalink)  
Antiguo 11/04/2011, 21:41
 
Fecha de Ingreso: marzo-2011
Ubicación: Florida-Uruguay
Mensajes: 74
Antigüedad: 13 años, 8 meses
Puntos: 4
Respuesta: No ingresar daros repetidos acces desde VB

Te dejo el programita por si lo quieres ver
http://www.megaupload.com/?d=F17RQUN6
Saludos
  #12 (permalink)  
Antiguo 12/04/2011, 09:57
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 15 años, 1 mes
Puntos: 47
Respuesta: No ingresar daros repetidos acces desde VB

Justo como está debe de funcionar. El error de que NO COINCIDEN LOS TIPOS, es porque le estamos pasando datos de tipo diferente a como estan declarados en la base de datos...

Si DOCUMENTO es numerico, entonces:
Código vb:
Ver original
  1. rsConsulta.Open "SELECT * FROM LISTADEESPERA WHERE ESPECIALIDAD=' " & strVALOR_ESPECIALIDAD & " ' AND DOCUMENTO= " & strVALOR_DOCUMENTO , cnn, adOpenDynamic, adLockBatchOptimistic

Si especialidad es numerico, entonces:
Código vb:
Ver original
  1. rsConsulta.Open "SELECT * FROM LISTADEESPERA WHERE ESPECIALIDAD= " & strVALOR_ESPECIALIDAD & " AND DOCUMENTO=' " & strVALOR_DOCUMENTO & " ' ", cnn, adOpenDynamic, adLockBatchOptimistic

Si ambos son numericos, entonces:
Código vb:
Ver original
  1. rsConsulta.Open "SELECT * FROM LISTADEESPERA WHERE ESPECIALIDAD= " & strVALOR_ESPECIALIDAD & " AND DOCUMENTO= " & strVALOR_DOCUMENTO , cnn, adOpenDynamic, adLockBatchOptimistic

Si ambos son caracter, entonces:
Código vb:
Ver original
  1. rsConsulta.Open "SELECT * FROM LISTADEESPERA WHERE ESPECIALIDAD=' " & strVALOR_ESPECIALIDAD & " ' AND DOCUMENTO=' " & strVALOR_DOCUMENTO & " ' ", cnn, adOpenDynamic, adLockBatchOptimistic

Como le cambiaste el (AND) por ( & ) el SELECT no es valido, no trae datos y por eso siempre entra en el ELSE que contiene la instruccion del INSERT.

Cuales son los datos que contiene el Combo1.text y el Text1.text?
  #13 (permalink)  
Antiguo 12/04/2011, 12:53
 
Fecha de Ingreso: marzo-2011
Ubicación: Florida-Uruguay
Mensajes: 74
Antigüedad: 13 años, 8 meses
Puntos: 4
Respuesta: No ingresar daros repetidos acces desde VB

El combo1 es caracter y el text1 es númerico volvi a cambiar el (&) por el (AND) en el SELECT pero igual me sigue agregando duplicados. Sigo probando ya que estoy trancado, valoro mucho tu ayuda. Saludos
  #14 (permalink)  
Antiguo 13/04/2011, 12:18
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 15 años, 1 mes
Puntos: 47
Respuesta: No ingresar daros repetidos acces desde VB

Acabo de verificar tu proyecto, aquí está la rutina funcionando:

Código vb:
Ver original
  1. Private Sub Ingreso_a_Lista_Click()
  2.     Dim strVALOR_ESPECIALIDAD As String
  3.     Dim strVALOR_DOCUMENTO As String
  4.     Dim rsConsulta As ADODB.Recordset
  5.     Set rsConsulta = New ADODB.Recordset
  6.  
  7.     strVALOR_ESPECIALIDAD = DataCombo1.Text
  8.     strVALOR_DOCUMENTO = Text1.Text
  9.    
  10.     If rst.EOF = False And rst.BOF = False Then
  11.     rsConsulta.Open "SELECT * FROM ListadeEspera WHERE Especialidad = '" & strVALOR_ESPECIALIDAD & "' and Documento = " & strVALOR_DOCUMENTO, cnn, adOpenDynamic, adLockBatchOptimistic
  12.        
  13.         If rsConsulta.EOF = False Then
  14.             MsgBox "No Se puede Ingresar Dos veces en la misma Lista de Espera a un mismo Usuario"
  15.             rsConsulta.Close
  16.             Set rsConsulta = Nothing
  17.             Exit Sub
  18.         Else
  19.             cnn.Execute "INSERT INTO ListadeEspera (FechaIngreso,Documento,Especialidad,Medico,Nombre1,Nombre2,Apellido1,Apellido2,Carne,Vencimiento,Telefonos,Observaciones) Values('" & _
  20.                         LabelFechaIngresoLE.Caption & "','" & Text1.Text & "','" & DataCombo1.Text & "','" & DataCombo2.Text & "','" & Text2.Text & "','" & Text3.Text & "','" & Text4.Text & "','" & Text5.Text & "','" & Text6.Text & "','" & Text7.Text & "','" & Text8.Text & " ','" & Text9.Text & " ')"
  21.             MsgBox "El Usuario ha sido Agregado a la base de datos de manera exitosa!"
  22.         End If
  23.     End If
  24. End Sub


Nos cuentas!!
  #15 (permalink)  
Antiguo 13/04/2011, 17:15
 
Fecha de Ingreso: marzo-2011
Ubicación: Florida-Uruguay
Mensajes: 74
Antigüedad: 13 años, 8 meses
Puntos: 4
Respuesta: No ingresar daros repetidos acces desde VB

De más Lokoman!!!! Fuiste, como siempre, de gran ayuda. No dudes que en algun momento vuelva a preguntar en el foro, pues siempre hay dudas cuando se intenta aprender. Por otra parte, que te parecio lo que estoy intentando hacer? Ya que al no poder ir a mi trabajo por licencia médica por una hernia de disco, estoy buscando la manera de hacer algo útil.
Nuevamente gracias!!!!!
  #16 (permalink)  
Antiguo 14/04/2011, 06:09
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 15 años, 1 mes
Puntos: 47
Respuesta: No ingresar daros repetidos acces desde VB

Un placer!
Mejórate, nos vemos!!


Etiquetas: ingresar, repetidos, vb
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 16:48.