Buscador visual basic

He tratado de crear un buscador con visual basic pero no he podido hallar.
Quiero que me busque en una base de datos el numero de factura que yo quiera, pero
que me muestre los resultados en campos de textbox, hay muchos ejemplos en internet pero para verlos como tablas, y lo que quiero es volverlo a ver igual al formulario que utilice para guardar la factura,, esto es con el fin de dar una mejor presentación al programa y que si necesito volver a imprimir una factura lo pueda hacer de una manera más fácil..

1 respuesta

Respuesta
1
Puedes crearte un procedimiento que, pasándole el número de factura, rellene los campos que quieras.
Sería algo así (los nombres de campo son inventados):
sub leerDatosFactura(byval numeroFacturaBuscado as long)
    dim rs as recordset
    dim txtSQl as string
    ' Vaciamos los textBox
    formulario.NumeroFactura = ""
    formulario.FechaFactura = ""
    formulario.ImporteFactura = ""
    ' Buscamos la factura
    txtSql = "select * from facturas where numeroFactura = " & numeroFacturaBuscado
    ' Abrimos el recordset
    set rs=baseDeDatos.openrecordset(txtSql)
    if rs.EOF then
        msgbox "Número de factura no existe
      else
        formulario.NumeroFactura = numeroFacturaBuscado
        formulario.FechaFactura = rs!fechaFactura
        formulario.ImporteFactura = rs!importeFactura
    end if
    rs.close
end sub
Gracias amigo, la conexión de visual con la base de datos en donde la pondría
Lo que te he puesto es utilizando DAO. La apertura de la base de datos sería:
dim baseDeDatos as database
set baseDeDatos = opendatabase("nombre de la base de datos",false,true)
Al final, cerrarías la base de datos con: baseDeDatos.close
Si en lugar de DAO quieres utilizar ADO, el procedimiento sería el siguiente:
sub leerDatosFactura(byval numeroFacturaBuscado as long)
    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    dim strConexion as string
    dim txtSQl as string
    ' Vaciamos los textBox
    formulario.NumeroFactura = ""
    formulario.FechaFactura = ""
    formulario.ImporteFactura = ""
    ' Buscamos la factura
    strConexion = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
                  "<nombre de la base de datos>;Persist Security Info=False"
    cn.Open strConexion
    txtSql = "select * from facturas where numeroFactura = " & numeroFacturaBuscado
    ' Abrimos el recordset
    rs.open txtSql, cn
    if rs.EOF then
        msgbox "Número de factura no existe
      else
        formulario.NumeroFactura = numeroFacturaBuscado
        formulario.FechaFactura = rs!fechaFactura
        formulario.ImporteFactura = rs!importeFactura
    end if
    rs.Close
    cn.Close
end sub
Creo que estoy cerca pero necesito otra ayuda,, tengo el campo de búsqueda y como programo el botón buscar para que me ubique los datos y me los ponga en los textbox coresspondientes, y el código de conexión donde iría en un modulo o en el formulario.
El código lo puedes poner en el mismo 'formulario' o, si lo pones en un módulo, tendrás que pasar como parámetro el formulario.
Lo más sencillo: en el código del formulario.
Te creas un botón y en el evento 'al hacer click' pones:
private sub boton_click()
    leerDatosFactura me.numeroFactura
end sub
Disculpe la molestia por alargar tanto el tema pero mis conocimientos son escasos ..
En el código anterior ya esta todo solo que no logro acomodarla a mi necesidad, seria esto.
En el textbox1 dígito el numero de factura a buscar,, un botón que al dar click llene el formulario con los datos que corresponden a esa factura
En el texbox2 fecha de factura
texbox3 datos por de factura
Si pudieras darme esta ultima orientecion ya puedo seguir llenado el resto de datos que quiero ver en la búsqueda.. Y discupe nuevamente por hacer tan largo el tema.
Prueba con el siguiente código. Sería la opción más sencilla.
No olvides cambiar los nombres de los campos (fechaFactura y importeFactura) por los de tus tablas.
private sub nombreDelBoton_click()
    leerDatosFactura me.textbox1.text
end sub
sub leerDatosFactura(byval numeroFacturaBuscado as long)
    dim rs as recordset
    dim txtSQl as string
    ' Vaciamos los textBox
    me.texbox2 = ""
    me.texbox3 = ""
    ' Buscamos la factura
    txtSql = "select * from facturas where numeroFactura = " & numeroFacturaBuscado
    ' Abrimos el recordset
    set rs=currentdb().openrecordset(txtSql)
    if rs.EOF then
        msgbox "Número de factura no existe
      else
        me.texbox2 = rs!fechaFactura
        me.texbox3 = rs!importeFactura
    end if
    rs.close
end sub
Adapte los mi base de datos a los datos anteriores pero me da un error cuando dígito el numero en el textbox1 y doy click. ERROR DE COMPILACIÓN... NO SE ENCONTRÓ EL MÉTODO O EL MIEMBRO DE DATOS,, si le doy aceptar el error me aparece en esta linea.
Private Sub Command1_Click()
leerDatosFactura Me.textbox1.Text
End Sub
el codigo lo adapte de la siguiente manera con la conexion a la base datos
Sub leer(ByVal numeroFacturaBuscado As Long)
    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim strConexion As String
    Dim txtSQl As String
    ' Vaciamos los textBox
    Me.texbox2 = ""
    Me.texbox3 = ""
    ' Buscamos la factura
strConexion = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "c:\salud\MiBase.mdb;Persist Security Info=False"
    cn.Open strConexion
    txtSQl = "select * from facturas where numeroFactura = " & numeroFacturaBuscado
    ' Abrimos el recordset
    Set rs = currentdb().openrecordset(txtSQl)
    If rs.EOF Then
        MsgBox "Número de factura no existe "
      Else
        Me.texbox2 = rs!fechaFactura
        Me.texbox3 = rs!importeFactura
    End If
    rs.Close
End Sub
Agradezco una revisión a ver si estoy haciendo las cosas bien.
Unos detalles. El código está puesto para un número de factura en formato numérico (1, 2, 3, 5847 o cualquier número de hasta 9 dígitos).
Es posible que utilices letras en ese número en cuyo caso, dónde se declara en número de factura 'as long' habría que poner 'as string', y la construcción de la consulta sería:
 txtSQl = "select * from facturas where numeroFactura = '" & numeroFacturaBuscado & "'"
El mensaje de error que comentas parece ser el que da la base de datos cuando se intenta acceder a un campo que no existe. Comprueba si el error es en una de las líneas:
    Me.texbox2 = rs!fechaFactura
    Me.texbox3 = rs!importeFactura
Lo sabrás porque al pinchar en 'depurar' te marca la línea errónea en amarillo.
Si es un error en alguna de esas líneas, comprueba el nombre de los campos. Posiblemente en tu tabla no se llamen exactamente 'fechaFactura' o 'importeFactura'.
Si no es eso, dime exactamente en qué línea da el error y el código y mensaje de error completo.
El error ocurre cuando dígito el numero en el textbox1 y doy click. ERROR DE COMPILACIÓN... NO SE ENCONTRÓ EL MÉTODO O EL MIEMBRO DE DATOS,, si le doy
aceptar el error me aparece en esta linea.
Private Sub Command1_Click()
leerDatosFactura Me.textbox1.Text
End Sub
no se si esque lo esoty ubicando donde no es el resto de codigo osea este.
Pero ya lo puse en el formulario y en un modulo y tampoco me da me sigue el mismo error anterior
Sub leer(ByVal numeroFacturaBuscado As Long)
    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim strConexion As String
    Dim txtSQl As String
    ' Vaciamos los textBox
    Me.texbox2 = ""
    Me.texbox3 = ""
    ' Buscamos la factura
strConexion = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "c:\salud\MiBase.mdb;Persist Security Info=False"
    cn.Open strConexion
    txtSQl = "select * from facturas where numeroFactura = " & numeroFacturaBuscado
    ' Abrimos el recordset
    Set rs = currentdb().openrecordset(txtSQl)
    If rs.EOF Then
        MsgBox "Número de factura no existe "
      Else
        Me.texbox2 = rs!fechaFactura
        Me.texbox3 = rs!importeFactura
    End If
    rs.Close
End Sub
OJO: el procedimiento lo has puesto como 'Sub Leer(...' y luego llamas a 'leerDatosFactura'.
Comprueba a ver si es eso. Pon: "Sub leerDatosFactura(..."
Me da el mismo error
Private Sub Command1_Click()      ' se pone en amarillo
leer Me.textbox1.Text                    'se rasalta textbox1
End Sub
La cuestión es como si hiciera falta realcionar textbox1 con en el procedimiento ya que no lo relaciona y no lo veo tampoco.
Sub leer(ByVal numeroFacturaBuscado As Long)
    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim strConexion As String
    Dim txtSQl As String
    ' Vaciamos los textBox
    Me.texbox2 = ""
    Me.texbox3 = ""
    ' Buscamos la factura
strConexion = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "c:\salud\MiBase.mdb;Persist Security Info=False"
    cn.Open strConexion
    txtSQl = "select * from facturas where numeroFactura = " & numeroFacturaBuscado
    ' Abrimos el recordset
    Set rs = currentdb().openrecordset(txtSQl)
    If rs.EOF Then
        MsgBox "Número de factura no existe "
      Else
        Me.texbox2 = rs!fechaFactura
        Me.texbox3 = rs!importeFactura
    End If
    rs.Close
End Sub
Si se resalta el 'textbox1' es porque en esa palabra está el error.
Comprueba la propiedad 'nombre' del control que contiene el número de factura y pon en la llamada exactamente el mismo nombre.
Si quieres me puedes mandar el programa en un "zip" a [email protected]

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas