¿Cómo vincular mi folio con el nombre?

Necesito de favor vincular un textbox con mi base de datos que al insertar
el folio en un textbox en otro aparezca el nombre del articulo
mi base de datos tiene estos campos
folio Nombre
123 Pedro
Que al escribir 123 automáticamente me ponga el nombre en otro textbox o en
un label
uso ado y no uso data
por favor me urge
se muy explicito por que soy muy muy principiante
gracias
Mi código
Public rs As New ADODB.Recordset
Private Sub Form_Load()
Medico
cedula
laboratorio
antibióticos
Set GrillaBus.DataSource = RsAntibioticos
With RsMedico
    Do Until .EOF
        comboMed.AddItem .Fields(0)
        .MoveNext
    Loop
End With
With RsCedula
    Do Until .EOF
        comboCed.AddItem .Fields(0)
        .MoveNext
    Loop
End With
With RsLaboratorio
    Do Until .EOF
        comboLab.AddItem .Fields(0)
        .MoveNext
    Loop
End With
End Sub
Private Sub Command1_Click()
With RsAntibioticos
    .Requery
    .AddNew
        !Folio = txtFolio.Text
        !Nombre = txtNombre.Text
        !Cantidad = txtCantidad.Text
        !laboratorio = comboLab.Text
        !medico = comboMed.Text
        !cedula = comboCed.Text
        !Retiene = txtRetiene.Text
    .Update
    .Requery
    Limpiar
End With
End Sub
Private Sub cmdMedico_Click()
With RsMedico
    .Requery
    .AddNew
        !Nombre = txtMed.Text
        .Update
    .Requery
End With
End Sub
Private Sub cmdCedula_Click()
With RsCedula
    .Requery
    .AddNew
        !cedula = txtCed.Text
        .Update
    .Requery
End With
End Sub
Private Sub cmdLaboratorio_Click()
With RsLaboratorio
    .Requery
    .AddNew
        !laboratorio = txtLab.Text
        .Update
    .Requery
End With
End Sub
Private Sub comboMed_Click()
If comboMed.Text = "Viridiana" Then
    comboCed.Text = "01234567"
End If
End Sub
Private Sub comboOp_Click()
Dim X As Integer
X = 1
If comboOp.Text = "Si" Then
    txtRetiene.Text = X
End If
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Val(txtFolio.Text) = 1 Then
txtNombre.Text = "Acido"
End If
If Val(txtFolio.Text) = 2 Then
txtNombre.Text = "Acido2"
End If
If Val(txtFolio.Text) = 3 Then
txtNombre.Text = "Acido3"
End If
End Sub
Sub Limpiar()
txtFolio.Text = ""
txtNombre.Text = ""
txtCantidad.Text = ""
comboLab.Text = ""
comboMed.Text = ""
comboCed.Text = ""
txtRetiene.Text = ""
txtFolio.SetFocus
End Sub
'Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
'    Dim cBuscar As String
 '   Dim cbuscar2 As String
  '  cbuscar2 = Text2.Text
  '  If KeyCode = 13 Then
   ' If Text1.Text = "" Then Exit Sub
  ' cBuscar = "Nombre like '" & Text1.Text & "*'"
  '  RsAntibioticos.MoveFirst
  '  RsAntibioticos.Find (cBuscar)
   '
   ' If RsAntibioticos.EOF Then
    '  MsgBox ("No se encuentra este dato.")
'
 '   End If
'End If
'End Sub
Public rs As New ADODB.Recordset
Private Sub Form_Load()medicocedulalaboratorioantibioticosSet GrillaBus.DataSource = RsAntibioticosWith RsMedico    Do Until .EOF        comboMed.AddItem .Fields(0)        .MoveNext    LoopEnd WithWith RsCedula    Do Until .EOF        comboCed.AddItem .Fields(0)        .MoveNext    LoopEnd WithWith RsLaboratorio    Do Until .EOF        comboLab.AddItem .Fields(0)        .MoveNext    LoopEnd WithEnd SubPrivate Sub Command1_Click()
With RsAntibioticos    .Requery    .AddNew        !Folio = txtFolio.Text        !Nombre = txtNombre.Text        !Cantidad = txtCantidad.Text        !laboratorio = comboLab.Text        !medico = comboMed.Text        !cedula = comboCed.Text        !Retiene = txtRetiene.Text    .Update    .Requery    LimpiarEnd WithEnd SubPrivate Sub cmdMedico_Click()With RsMedico    .Requery    .AddNew        !Nombre = txtMed.Text        .Update    .RequeryEnd WithEnd SubPrivate Sub cmdCedula_Click()With RsCedula    .Requery    .AddNew        !cedula = txtCed.Text        .Update    .RequeryEnd WithEnd Sub
Private Sub cmdLaboratorio_Click()With RsLaboratorio    .Requery    .AddNew        !laboratorio = txtLab.Text        .Update    .RequeryEnd WithEnd Sub
Private Sub comboMed_Click()If comboMed.Text = "Viridiana" Then    comboCed.Text = "01234567"End IfEnd Sub
Private Sub comboOp_Click()Dim X As IntegerX = 1If comboOp.Text = "Si" Then    txtRetiene.Text = XEnd IfEnd Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)If Val(txtFolio.Text) = 1 ThentxtNombre.Text = "Acido"End IfIf Val(txtFolio.Text) = 2 ThentxtNombre.Text = "Acido2"End IfIf Val(txtFolio.Text) = 3 ThentxtNombre.Text = "Acido3"End IfEnd Sub
Sub Limpiar()txtFolio.Text = ""txtNombre.Text = ""txtCantidad.Text = ""comboLab.Text = ""comboMed.Text = ""comboCed.Text = ""txtRetiene.Text = ""txtFolio.SetFocusEnd Sub
'Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)'    Dim cBuscar As String '   Dim cbuscar2 As String  '  cbuscar2 = Text2.Text  '  If KeyCode = 13 Then   ' If Text1.Text = "" Then Exit Sub  ' cBuscar = "Nombre like '" & Text1.Text &...

6 respuestas

Respuesta
1
No se como manejas los recordset porque si ves el código que me pasaste es una locura tratar de seguir eso. Vamos al problema directo.
Mira primero tienes que programar el textbox en el evento keypress que es la tecla enter, es más delicado si se trabaja así.
codigo que va en el evento keypress del textbox
if keyascii = 13 then 'preguntas si la tecla apretada es el enter
keyascii=0 'evitas el bip innecesario del enter
haces la consulta a la base de datos
select nombre_articulo from articulos where folio = text1.text 'obviamente tenes que poner todas las comillas que van en el where y demas cosas.
te conectas al recordset como lo haces
if rs.eof then 'pregunta si el recordset no viene vacio
textnombrearticulo = rsarticulo!nombre_articulo
else
msgbox "No existe ningún articulo con ese nro de folio" 'advertis que no existe el nro de folio
end if
rsarticulo.close
set rsarticulo = nothing
no te olvides nunca de cerrarlos
saludos
Leandro
Hola
Podrías pasarme tu messenger para expilcarte bien o
en su defecto poner el código exactamente te paso los
datos:
Nombre de la tabla: Antibióticos
El campo se llama Folio el que voy a escribir
El campo Nombre es el que me va a aparecer automáticamente
Si puedes proporcionarme el código con comas comillas y todo
por favor
o dame tu correo y te adjunto mi programa
gracias
Daniel
if keyascii = 13 then 'preguntas si la tecla apretada es el enter
keyascii=0 'evitas el bip innecesario del enter
'haces la conexion y el seteo del recordeset para la consulta a la base de datos
"select nombre from antibioticos where folio = & " text1.text
te conectas al recordset como lo haces
if rs.eof then 'pregunta si el recordset no viene vacio
textnombrearticulo = rsarticulo!nombre
else
msgbox "No existe ningún articulo con ese nro de folio" 'advertis que no existe el nro de folio
end if
rsarticulo.close
set rsarticulo = nothing
la conexion es la que utilizas vos, despues estaría todo. no uses nombre tan genericos como nombre para una tabla agregale algo mas que haga referencia.
Tengo esto
Que me falta me marca error en el datasource:
Private Sub txtFolio_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then
Set GrillaBus.DataSource = RsAntibioticos
RsProductos.RecordSource = "Select * from Antibioticos where Folio like '%" & txtFolio.Text & "%'"
RsProductos.Refresh
If RsProductos.Recordset.EOF Then
 MsgBox "No se encontraron coincidencias"
Else
 Label1.Caption = RsProductos.Recordset("Nombre")
End If
End Sub
¿Lograste conectarte y usar algún recordset con este método que estas usando?
El error es porque nunca seteas el recordset, ni te conectas.
Te paso un ejemplo sencillo
Public Const strConnect = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User;Initial Catalog=CruzRoja;Data Source=xxxxx-C7A03134\SQLEXPRESS"
'"driver=" & strDriver & ";" & "server=" & strServer & ";" & "uid=" & strUsuario & ";" & "pwd=" & strPassward & ";" & "database=" & dbsR
Public rstDadores As New ADODB.Recordset
Public rstVoluntarios As New ADODB.Recordset
Public Base As New ADODB.Connection
Public Sub AbrirBase()
    Set Base = New ADODB.Connection
    Base.ConnectionString = strConnect
    Base.CursorLocation = adUseClient
    Base.ConnectionTimeout = 30
    Base.Open
End Sub
Formulario alta voluntarios
Dim rstVoluntarios As ADODB.Recordset
Private Sub cmdGuardar_Click()
Dim ConsultaSql As String
    Set Base = New ADODB.Connection
    AbrirBase
    Set rstVoluntarios = New ADODB.Recordset
    ConsultaSql = ""Select * from Antibioticos where Folio like '%" & txtFolio.Text & "%'"
    Base.Execute (ConsultaSql)
    Base.Close   
     cmdGuardar.Enabled = False
End Sub
Antes de seguir fíjate como haces la conexión a la base, si te responde, y usa un recordset, después seguimos con la ayuda de este problema.
No uso SQL
Uso access
Gracias
Es lo mismo, solo tienes que cambiar la conexión, los demás nombres de recordset son genéricos, yo necesito saber
Si ya pudiste conectarte y que algún recordset te devolvió datos.
Así te puedo ayudar desde la base
Respuesta
1
En el evento lostfocus del textbox colocas el código para realiozar una búsqueda en la base de datos de acuerdo al código digitado en el textbox.
Respuesta
1
Ok si seria bueno que me pases el proyecto y me indiques donde es el problema.
[email protected], me conecto todos los días a partir de las 8.30 pm. Cuando me encuentres en linea me mencionas el asunto de tu pregunta para saber quien eres y mientras tanto enviame tu proyecto.
Respuesta
1
Ok mira este código te puede ayudar mucho, lo que busca es una coincidencia con lo que quieres buscar
Adodc1.RecordSource = "Select * from TABLA where CAMPO like '%" & TEXTBOX & "%'"
Adodc1. Refresh
Esta consulta te entregara todas las coincidencias de lo que ingreses, como en tu ejemplo te dará todos los que contengan 123.
En caso de que no quieras una coincidencia y que la búsqueda sea exacta solamente quita el LIKE quedando así
Adodc1.RecordSource = "Select * from TABLA where FOLIO = '" & TEXTBOX.TEXT & "'"
Adodc1.Refresh
if adodc1.recordset.eof then
 Msgbox"No se encontraron coincidencias"
else
 LABEL1.CAPTION=adodc1.recordset("NOMBRE")
end if
'''''''''''''''''''''''''''''''''''''''
Puedes poner el Código en el evento LostFocus o en KeyPress de la caja de texto que estés usando para colocar el Folio
Suerte
Lo puse así pero que me falta
Private Sub txtFolio_LostFocus()
RsAntibioticos.RecordSource = "Select * from Antibioticos where Folio like '%" & txtFolio.Text & "%'"
RsAntibioticos.Refresh
If RsAntibioticos.Recordset.EOF Then
 MsgBox "No se encontraron coincidencias"
Else
 Label1.Caption = RsAntibioticos.Recordset("Nombre")
End If
End Sub
Private Sub txtFolio_LostFocus()RsAntibioticos.RecordSource = "Select * from Antibioticos where Folio like '%" & txtFolio.Text & "%'"RsAntibioticos.RefreshIf RsAntibioticos.Recordset.EOF Then MsgBox "No se encontraron coincidencias"Else Label1.Caption = RsAntibioticos.Recordset("Nombre")End IfEnd Sub
El LIKE te puede funcionar mejor en el evento CHANGE de tu texbox por que buscara coincidencias con lo que vayas escribiendo, mientras más exacto es lo que vas introduciendo te acercara más rapido al resultado. En tu caso quieres que al cambiar el foco del TEXBOX se ejecute la consulta para ello no es necesario usar el LIKE, tu código esta bien nada más que no uses el like en el evento LostFocus y quita los %. El código quedaría así
Private Sub TxtFolio_LostFocus()
RsAntibioticos.RecordSource = "Select * from Antibioticos Where FOLIO='" & TxtFolio.Text & "'"
RsAntibioticos.Refresh
If RsAntibioticos.Recordset.EOF Then
 MsgBox "No se encontraron coincidencias"
 Label1.Caption = ""
Else
 Label1.Caption = RsAntibioticos.Recordset("Nombre")
End If
End Sub
Respuesta
1
Para el ejemplo he utilizado una base de datos en D:\ llamada a.mdb
La cual tiene una tabla llamada Tabla1, que tiene un campo folio y otro nombre.
Crea un form con 2 textbox (Text1 y Text2)
Cuando escribes en Text1 y coincide con un registro existente de FOLIO se llena el Text2 con los datos de NOMBRE
Mira este código:
Option Explicit
Dim miDB As Database
Dim miRS As Recordset
Dim cadena As String
Private Sub Form_Load()
    Set miDB = OpenDatabase("d:\a.mdb")
    Set miRS = miDB.OpenRecordset("Tabla1", dbOpenDynaset)
End Sub
Private Sub Form_Unload(Cancel As Integer)
    Set miDB = Nothing
    Set miRS = Nothing
End Sub
Private Sub Text1_Change()
    Dim SQL As String
    SQL = "Select * from tabla1 where folio = '" & Text1 & "'"
    cadena = "folio = '" & Text1 & "'"
    miRS.MoveLast
    miRS.FindFirst cadena
    If miRS.NoMatch Then
            Text2 = ""
         Else
            Text2 = miRS!nombre
     End If
End Sub
Respuesta
1
Lo que debes hacer en primera instancia es crear una variable de tipo adodb. Recordset para poder alojar allí los datos de una consulta. Esta consulta la puedes colocar en un botón buscar o en el eventon LastFocus del textbox donde se ingresa el folio (por dar unos ejemplos. Una vez realizada la búsqueda asignas el valor del campo nombre del recorset al textbox que quieres que lo muestre.
Un ejemplo de esto seria:
Private Sub txtFolio_LostFocus()
Dim rRec As ADODB.Recordset
   Set rRec = mCon.Execute("Select Nombre FROM Articulos WHERE Folio = & txtFolio ")
   txtNombre = rRec!nombre
   rRec.Close
   Set rRec = Nothing
End Sub
La variable mCon es del tipo ADODB. Connection que es la que tiene la conexión a la base de datos esa parte no la incluí por que supongo ya lo tendrás hecho en otro lado.
Ok
Cree esto:
Sub Conectar()
    Set cn = New ADODB.Connection
    Set rs = New ADODB.Recordset
    rs.CursorLocation = adUseClient
    cn.CursorLocation = adUseClient
    cn.Open "DRIVER={Microsoft Access Driver (*.mdb)};dbq=" & App.Path & "\BaseDeDatos.mdb", , "Productos"
End Sub
Private Sub txtFolio_LostFocus()
Dim rRec As ADODB.Recordset
   Set rRec = cn.Execute("Select Nombre FROM Productos WHERE Folio = & txtFolio ")
   txtNombre = rRec!Nombre
   rRec.Close
   Set rRec = Nothing
End Sub
Y me marca error en la letra negrita
Claro, lo escribí mal. Intenta con este código
Sub Conectar() 
    Set cn = New ADODB.Connection 
    cn.CursorLocation = adUseClient 
    cn.Open "DRIVER={Microsoft Access Driver (*.mdb)};dbq=" & App.Path & "\BaseDeDatos.mdb"
End Sub 
Private Sub txtFolio_LostFocus() 
Dim rRec As ADODB.Recordset 
   Set rRec = cn.Execute("Select Nombre FROM Productos WHERE Folio = " & txtFolio) 
   txtNombre = rRec!Nombre 
   rRec.Close 
   Set rRec = Nothing 
End Sub
Recuerda que txtFolio y txtNombre son nombres que yo les asigne a los textbox y que debes reemplazar por el que tu uses.
Amigo eres verdaderamente un chingonsisimo
Te agradezco todo el esfuerzo y la paciencia
Eres la neta carnal
Hasta te besaría
Muchas gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas