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..
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 de santiagomf
1
1
santiagomf, Más de 35 años en la informática y más de 20 trabajando con...
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
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
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
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
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.
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
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.
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.
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
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(..."
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
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]
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]
- Compartir respuesta
- Anónimo
ahora mismo