Necesito hacer una busqueda en un textbox que tenga un codigo de barras

Publicado en 'Programación' por bupa56, 11 Jul 2007.





  1. bupa56

    bupa56 Miembro nuevo

    Registro:
    27 May 2007
    Mensajes:
    7
    Likes:
    0




    Pues resulta deque, tengo este codigo para hacer una busqueda y me va perfecto cuando me busca el Nmbre o Telefono o Movil pero cuando le doy a buscar un codigo de barras, no me encuentra el codigo.
    Los codigos que se tienen que buscar tienen tanto letras numeros como el signo este - el de menos.

    Este es el Codigo.
    Private Sub Buscar(Optional ByVal Siguiente As Boolean = False)
    ' Procedimiento para buscar el dato indicado (18/Ene/01)
    ' Si Siguiente = True, se busca a partir del registro activo
    Dim nReg As Long
    Dim vBookmark As Variant ' En ADO debe ser Variant, no vale un String
    Dim sADOBuscar As String
    '
    ' Iniciamos la detección de errores
    On Error Resume Next
    '
    ' Buscar la primera coincidencia en el recordset del Data1
    If Option1.Value Then
    ' en el campo Nombre

    sADOBuscar = "Nombre Like '*" & Busqueda & "*'"
    End If
    'Si está seleccionado el Option2 esta
    If Option2.Value Then
    ' Convertir el contenido de TextBox en un número
    nReg = val(Busqueda)
    ' en el campo telefono
    sADOBuscar = "Telefono = " & nReg
    End If
    'Si está seleccionado el Option3 se ejecuta esta otra
    If Option3.Value Then
    ' Convertir el contenido de TextBox en un número
    nReg = val(Busqueda)
    ' en el campo movil
    sADOBuscar = "movil = " & nReg
    End If
    'Si está seleccionado el Option4 esta
    If Option4.Value Then
    ' Convertir el contenido de TextBox en un número
    nReg = val(Busqueda)
    ' en el campo Nombre
    sADOBuscar = "CodigoBarras = " & nReg
    End If
    ' Guardar la posición anterior, por si no se halla lo buscado...
    vBookmark = Adodc1.Recordset.Bookmark
    '
    If Siguiente = False Then
    ' Buscar desde el principio
    Adodc1.Recordset.MoveFirst
    Adodc1.Recordset.Find sADOBuscar
    Else
    ' Busca a partir del registro actual
    Adodc1.Recordset.Find sADOBuscar, 1
    End If
    ' Devolverá un error si no se halla lo buscado
    ' aunque no siempre es así...
    If Err.Number Or Adodc1.Recordset.BOF Or Adodc1.Recordset.EOF Then
    Err.Clear
    Call MsgBox("No existe el dato buscado o ya no hay más datos que mostrar. ", vbOKOnly + vbInformation + vbApplicationModal + vbDefaultButton1, "Buscar Siguiente")
    ' Posicionar el recordset en la posición guardada
    Adodc1.Recordset.Bookmark = vBookmark
    End If
    End Sub



    La que me falla es la cuarta Opcion la del codigo de barras, os agradeceria me ayudaseis.
     


  2. Snoopy

    Snoopy Suspendido

    Registro:
    5 Nov 2006
    Mensajes:
    173
    Likes:
    0
    if el Campo de codigo de barras NO es de tipo Numerico, no debes hacer lo que haces

    If Option4.Value Then
    ' Convertir el contenido de TextBox en un número
    nReg = val(Busqueda)
    ' en el campo Nombre
    sADOBuscar = "CodigoBarras = " & nReg
    End If

    ---------------------------
    Tienes que tratarlo como texto

    sADOBuscar = "Nombre = '*" & Busqueda & "*'"

    Ahora, veo que has cometido un error en los campos Telefono y demas, deberias guardarlo como String en la Tabla porque no vas a Operar, dar formato, sumar, etc.


    PD: prueba ingresar el nombre: D'onofrio en tus registros, y luego busca esa palabra.
     
    Última edición: 11 Jul 2007
  3. bupa56

    bupa56 Miembro nuevo

    Registro:
    27 May 2007
    Mensajes:
    7
    Likes:
    0
    En la base de datos que tengo creada, quiero realizar la busqueda en cuatro campos distintos, uno es en el Campo "Nombre" otro en el campo "Telefono" otro en el Campo "Movil" y el cuarto es el de "CodigoBarras".
    Bueno pues la busqueda me la hace perfecta cuando busco un Nombre un Telefono o un Movil, pero en el campo codigobarras, me busca pero cuando es un numero corto creo no mas de 12 numeros como se pase ya no me busca y si tambien coincide de que aparte llebe letras y numero auque sea corto tampoco me lo busca.
    He leido y buscado por inifnidad de sitios pero no doy con la solucion.
    Antes estaba escrito mal es asi.

    'Si está seleccionado el Option4 esta
    If Option4.Value Then
    ' Convertir el contenido de TextBox en un número
    nReg = val(Busqueda)
    ' en el campo codigobarras
    sADOBuscar = "CodigoBarras = " & nReg
    End If
    ___________
    Lo de convertir las letras en numeros lo ley en la ayuda del GUILLE.
    Pero lo mimo entendi mal, y como llebo muy poquito tiempo en el tema de programacion me cuesta pillar aun las cosas.
    Gracias.

    Tienes Razón he ingresado en el registro Nombre el nombre de D'onofrio y luego he echo la busueda y no me la ha encontrado, me podiras decir de que manera podria dar solucion a la busqueda, te lo agradeceria, ya que llebo creando este programa 2 meses y es solo para guardar registros de consolas reparadas, en la cual va tanto datos de la consola como del cliente ese es el unico detalle, creo por el momento, hasta que no trabaje bien con ella, y vea si ni me da ningun error mas.
    De nuevo Muchas Gracias
     
    Última edición: 11 Jul 2007
  4. Snoopy

    Snoopy Suspendido

    Registro:
    5 Nov 2006
    Mensajes:
    173
    Likes:
    0
    Vamos por partes (como dijo Jack en Destripador)

    Por lo que veo tu campo CodigoBarras en tu Tabla debe estar como tipo numerico, es por eso que la busqueda te funciona con numero que no sobrepases ciertos digitos (el tipo entero es entre -2.147.483.648 y 2.147.483.647)

    Estoy seguro que tu programa no graba codigos de barras que no sean numericos (fijate en un Base de datos si existe algun Codigo de Barras con letras), intenta grabar un valor como 333r2, tu programa no te da error porque usas el On Error resumen next que significa: si encuentras un error en una linea de codigo, ignoralo y pasa a la siguiente.

    La Solucion que te doy:

    1.- Ve a tu Base de Datos y cambie el Campo CodigoBarras de Numerico a Texto

    2.- En tu Codigo Cambia esa linea

    sADOBuscar = "CodigoBarras = " & nReg

    por

    sADOBuscar = "CodigoBarras Like '*" & Busqueda & "*'" o

    sADOBuscar = "CodigoBarras = '" & Busqueda & "'"

    3.- A Partir de ahora trata en tu programa a CodigoBarras igual que como tratas a Nombre

    Te recomiendo que aún no uses el On Error Resumen Next, como eres un programador principiante no daras cuenta de tus errores, ademas esa linea se usa esn casos especificos en los que no importa si se realizan o no alguna lineas, pero tu codigo SI debe realizar todos las lineas correctamente para funcionar bien.

    Prueba con este Codigo:

    Private Sub Prueba()
    On Error GoTo Er:
    'Linea de Codigo 1
    'Linea de Codigo 2
    'Linea de Codigo 3
    'Linea de Codigo 4
    'Linea de Codigo 5
    'Linea de Codigo 6
    'etc
    Err:
    MsgBox "Ocurrio un Error " & Err.Description
    Exit Sub
    End Sub

    Con este codigo si ocurre un error, se ira desde la linea de Error hasta el final y te mostrara el error con un mensaje, te recomiendo que lo uses en vez del On Error Resumen Next

    Espero que se solucione tu Problema.

    Saludos