Cómo rellenar cuadro de texto según un combobox
A ver este problemilla...
Tengo un combobox que me muestra una lista de expedientes y quiero que "Después de Actualizar" se rellenen varios cuadros de texto con los datos relacionados con ese expediente.
¿De qué manera puedo hacerlo?
Tengo un combobox que me muestra una lista de expedientes y quiero que "Después de Actualizar" se rellenen varios cuadros de texto con los datos relacionados con ese expediente.
¿De qué manera puedo hacerlo?
Respuesta de desenex41
1
1
desenex41, Programador eventual
Para poder ayudarte quisiera preguntarte algunas cosas, primero tienes un cuadro combinado (ComboBox) que se llena de una tabla o consulta de (Expedientes) es decir la tabla donde están todos los datos del expediente me refiero, si es así te pregunto:
¿Son muchos los campos de la tabla expediente que quieres llevar a los cuadros de texto (TextBox) o son pocos más o menos 3 o 4?.
Tengo un método que puede servirte en el evento AfterUpdate del cuadro combinado (ComboBox) que necesita que la tabla o consulta de (Expedientes) que lo llena contenga los campos que vas llevar a los cuadros de texto (TextBox).
¿Puedes decirme cuantos y cuales son los campos que vas llevar a los textbox? ; Es para diseñarte algo que te sea funcional desde el principio
¿Son muchos los campos de la tabla expediente que quieres llevar a los cuadros de texto (TextBox) o son pocos más o menos 3 o 4?.
Tengo un método que puede servirte en el evento AfterUpdate del cuadro combinado (ComboBox) que necesita que la tabla o consulta de (Expedientes) que lo llena contenga los campos que vas llevar a los cuadros de texto (TextBox).
¿Puedes decirme cuantos y cuales son los campos que vas llevar a los textbox? ; Es para diseñarte algo que te sea funcional desde el principio
Hola,
Gracias por responder tan pronto. Te comento:
El Combobox lo relleno con una consulta SQL.
Y los Textbox a rellenar son como unos 20. Que van desde datos de empresa, fechas e importes referentes a expedientes de Contratación.
Eso sí. Tanto los datos del Combo como con los que quiero rellenar los textbox están en una misma tabla.
Gracias... y espero ansioso tu respuesta ;-)
Gracias por responder tan pronto. Te comento:
El Combobox lo relleno con una consulta SQL.
Y los Textbox a rellenar son como unos 20. Que van desde datos de empresa, fechas e importes referentes a expedientes de Contratación.
Eso sí. Tanto los datos del Combo como con los que quiero rellenar los textbox están en una misma tabla.
Gracias... y espero ansioso tu respuesta ;-)
Bueno el método que tengo solo permite traer 19 campos más el campo llave que en este caso seria (Número de Expediente) supongo.
Para implementarlo debes crear una consulta de la tabla "Expedientes" que contenga el "Numero del Expediente" y 19 campos más (NO PUEDEN SER MÁS 20 CAMPOS EN TOTAL) ya que el cuadro combinado (ComboBox) solo tolera un máximo de 20 campos.
Después de creada la consulta ve al formulario donde quieres mostrar los datos del expediente, inserta un cuadro combinado (ComboBox) del cuadro de herramientas de access, utiliza el asistente (supongo que sabes utilizarlo), selecciona como origen de datos para el cuadro combinado la consulta que creaste primero, luego cuando este seleccionando los campos recuerda solo seleccionar un máximo de 20.
Cuando te muestre la consulta con los datos que aparezca como primer campo el "número de expediente", asegurate que con el ratón vayas cerrando el ancho de las demás columnas correspondientes a los 19 campos restantes es decir cierra todas esas columnas de manera que no sean visibles solo deja el espacio para el primer campo "número de expediente" esto es para que cuando el usuario le haga clic al cuadro combinado (combo box) solo vea el campo "número de expediente".
Asegurate que el campo que se selecciona para el cuadro combinado sea el "número del expediente".
Una vez insertado y listo dale botón derecho del ratón sobre el cuadro combinado y selecciona (Build Event) "Generador de Eventos" y luego selecciona (Code Builder)"Generador de Código"
El cursor aparecerá entre un procedimiento llamado BeforeUpdate()
Private Sub Combo1_BeforeUpdate(Cancel As Integer)
El cursor esta aqui....
End Sub
Estas en el editor de vba arriba están 2 cuadros combinados selecciona el del lado derecho que muestra "before update", sube con el scroll bar y selecciona el evento "after update" el cursor va a parecer entre este procedimiento así:
Private Sub Combo1_AfterUpdate()
El cursor esta aqui..
End Sub
dentro del metodo AfterUpdate() copia este codigo:
Text1 = Me.Combo1.Column(1)
Text2 = Me.Combo1.Column(2)
Text3 = Me.Combo1.Column(3)
Text4 = Me.Combo1.Column(4)
Text5 = Me.Combo1.Column(5)
Text6 = Me.Combo1.Column(6)
Text7 = Me.Combo1.Column(7)
Text8 = Me.Combo1.Column(8)
Text9 = Me.Combo1.Column(9)
Text10 = Me.Combo1.Column(10)
Text11 = Me.Combo1.Column(11)
Text12 = Me.Combo1.Column(12)
Text13 = Me.Combo1.Column(13)
Text14 = Me.Combo1.Column(14)
Text15 = Me.Combo1.Column(15)
Text16 = Me.Combo1.Column(16)
Text17 = Me.Combo1.Column(17)
Text18 = Me.Combo1.Column(18)
Text19 = Me.Combo1.Column(19)
Quedaría así:
Private Sub Combo1_AfterUpdate()
Text1 = Me.Combo1.Column(1)
Text2 = Me.Combo1.Column(2)
Text3 = Me.Combo1.Column(3)
Text4 = Me.Combo1.Column(4)
Text5 = Me.Combo1.Column(5)
Text6 = Me.Combo1.Column(6)
Text7 = Me.Combo1.Column(7)
Text8 = Me.Combo1.Column(8)
Text9 = Me.Combo1.Column(9)
Text10 = Me.Combo1.Column(10)
Text11 = Me.Combo1.Column(11)
Text12 = Me.Combo1.Column(12)
Text13 = Me.Combo1.Column(13)
Text14 = Me.Combo1.Column(14)
Text15 = Me.Combo1.Column(15)
Text16 = Me.Combo1.Column(16)
Text17 = Me.Combo1.Column(17)
Text18 = Me.Combo1.Column(18)
Text19 = Me.Combo1.Column(19)
End Sub
Se supone que ya tienes inertados en el formulario los 19 cuadros de textos (TextBox) con los nombre de Text1, Text2... hasta Text19.
Salva el formulario ciérralo y vuélvelo a abrir selecciona del cuadro combinado (ComboBox) el número de expedientes que quieras y se llenaran los cuadros de texto (TextBox) con los datos correspondientes al expediente seleccionado
Para implementarlo debes crear una consulta de la tabla "Expedientes" que contenga el "Numero del Expediente" y 19 campos más (NO PUEDEN SER MÁS 20 CAMPOS EN TOTAL) ya que el cuadro combinado (ComboBox) solo tolera un máximo de 20 campos.
Después de creada la consulta ve al formulario donde quieres mostrar los datos del expediente, inserta un cuadro combinado (ComboBox) del cuadro de herramientas de access, utiliza el asistente (supongo que sabes utilizarlo), selecciona como origen de datos para el cuadro combinado la consulta que creaste primero, luego cuando este seleccionando los campos recuerda solo seleccionar un máximo de 20.
Cuando te muestre la consulta con los datos que aparezca como primer campo el "número de expediente", asegurate que con el ratón vayas cerrando el ancho de las demás columnas correspondientes a los 19 campos restantes es decir cierra todas esas columnas de manera que no sean visibles solo deja el espacio para el primer campo "número de expediente" esto es para que cuando el usuario le haga clic al cuadro combinado (combo box) solo vea el campo "número de expediente".
Asegurate que el campo que se selecciona para el cuadro combinado sea el "número del expediente".
Una vez insertado y listo dale botón derecho del ratón sobre el cuadro combinado y selecciona (Build Event) "Generador de Eventos" y luego selecciona (Code Builder)"Generador de Código"
El cursor aparecerá entre un procedimiento llamado BeforeUpdate()
Private Sub Combo1_BeforeUpdate(Cancel As Integer)
El cursor esta aqui....
End Sub
Estas en el editor de vba arriba están 2 cuadros combinados selecciona el del lado derecho que muestra "before update", sube con el scroll bar y selecciona el evento "after update" el cursor va a parecer entre este procedimiento así:
Private Sub Combo1_AfterUpdate()
El cursor esta aqui..
End Sub
dentro del metodo AfterUpdate() copia este codigo:
Text1 = Me.Combo1.Column(1)
Text2 = Me.Combo1.Column(2)
Text3 = Me.Combo1.Column(3)
Text4 = Me.Combo1.Column(4)
Text5 = Me.Combo1.Column(5)
Text6 = Me.Combo1.Column(6)
Text7 = Me.Combo1.Column(7)
Text8 = Me.Combo1.Column(8)
Text9 = Me.Combo1.Column(9)
Text10 = Me.Combo1.Column(10)
Text11 = Me.Combo1.Column(11)
Text12 = Me.Combo1.Column(12)
Text13 = Me.Combo1.Column(13)
Text14 = Me.Combo1.Column(14)
Text15 = Me.Combo1.Column(15)
Text16 = Me.Combo1.Column(16)
Text17 = Me.Combo1.Column(17)
Text18 = Me.Combo1.Column(18)
Text19 = Me.Combo1.Column(19)
Quedaría así:
Private Sub Combo1_AfterUpdate()
Text1 = Me.Combo1.Column(1)
Text2 = Me.Combo1.Column(2)
Text3 = Me.Combo1.Column(3)
Text4 = Me.Combo1.Column(4)
Text5 = Me.Combo1.Column(5)
Text6 = Me.Combo1.Column(6)
Text7 = Me.Combo1.Column(7)
Text8 = Me.Combo1.Column(8)
Text9 = Me.Combo1.Column(9)
Text10 = Me.Combo1.Column(10)
Text11 = Me.Combo1.Column(11)
Text12 = Me.Combo1.Column(12)
Text13 = Me.Combo1.Column(13)
Text14 = Me.Combo1.Column(14)
Text15 = Me.Combo1.Column(15)
Text16 = Me.Combo1.Column(16)
Text17 = Me.Combo1.Column(17)
Text18 = Me.Combo1.Column(18)
Text19 = Me.Combo1.Column(19)
End Sub
Se supone que ya tienes inertados en el formulario los 19 cuadros de textos (TextBox) con los nombre de Text1, Text2... hasta Text19.
Salva el formulario ciérralo y vuélvelo a abrir selecciona del cuadro combinado (ComboBox) el número de expedientes que quieras y se llenaran los cuadros de texto (TextBox) con los datos correspondientes al expediente seleccionado
Ummmm...
No me sirve... son más de 20 textbox.
¿No hay alguna forma utilizando el índice de la tabla o algo para extraer el dato del campo y asignarlo al textbox?
No me sirve... son más de 20 textbox.
¿No hay alguna forma utilizando el índice de la tabla o algo para extraer el dato del campo y asignarlo al textbox?
Este es otro método pero mucho más complicado que si funciona para la cantidad de textbox que necesites todo depende de los que tu insertes en el formulario y de la cantidad de campos que tenga la tabla que quieras mostrar.
Verifica en la linea del "rst.Open..." debes colocar
Nota1 = el nombre de tu tabla supongo que se llama Expedientes
Nota2 = el nombre del campo llave supongo que de llama Numero_Expediente
Nota3 = el nombre del cuadro combinado (ComboBox) puede ser Combo2
Queda así
rst.Open "SELECT * FROM [Ve la Nota1] WHERE [Ve la Nota2] = " & Ve la Nota3, Application.CodeProject.Connection, adOpenStatic, adLockOptimistic, adCmdText
Coloca entonces este código en el mismo evento AfterUpdate() del cuadro combinado (ComboBox) que tiene el campo llave "Numero_Expediente", te sugiero que crees otro combo que solo tenga un único campo que sea "Numero_Expediente" y en su evento AfterUpdate coloques este código
Dim rst As New ADODB.Recordset
If Not IsNull(Me.Combo2) Then
rst.Open "SELECT * FROM [Expedientes] WHERE [Numero_Expediente] = " & Combo2, Application.CodeProject.Connection, adOpenStatic, adLockOptimistic, adCmdText
If rst.RecordCount > 0 Then
Text1 = rst![Dato1] 'Datos1, Datos2, Datos3.... son los nombres de los campos
Text2 = rst![Dato2]
Text3 = rst![Dato3]
Text4 = rst![Dato4]
Text5 = rst![Dato5]
Text6 = rst![Dato6]
Text7 = rst![Dato7]
Text8 = rst![Dato8]
Text9 = rst![Dato9]
Text10 = rst![Dato10]
Text11 = rst![Dato11]
Text12 = rst![Dato12]
Text13 = rst![Dato13]
Text14 = rst![Dato14]
Text15 = rst![Dato15]
Text16 = rst![Dato16]
Text17 = rst![Dato17]
Text18 = rst![Dato18]
Text19 = rst![Dato19]
'aquí puedes colocar más cuadros de texto (TextBox) = al rst!["nombre del campo"]
End If
rst.Close
Set rst = Nothing
Else
Text1 = Null
Text2 = Null
Text3 = Null
Text4 = Null
Text5 = Null
Text6 = Null
Text7 = Null
Text8 = Null
Text9 = Null
Text10 = Null
Text11 = Null
Text12 = Null
Text13 = Null
Text14 = Null
Text15 = Null
Text16 = Null
Text17 = Null
Text18 = Null
Text19 = Null
'aqui puedes colocar mas cuadros de texto (TextBox)
End If
queda algo asi:
Private Sub Combo2_AfterUpdate()
Dim rst As New ADODB.Recordset
If Not IsNull(Me.Combo2) Then
rst.Open "SELECT * FROM [Expedientes] WHERE [Numero_Expediente] = " & Combo2, Application.CodeProject.Connection, adOpenStatic, adLockOptimistic, adCmdText
If rst.RecordCount > 0 Then
Me.Text1 = rst![Dato1]
Me.Text2 = rst![Dato2]
Me.Text3 = rst![Dato3]
Me.Text4 = rst![Dato4]
Me.Text5 = rst![Dato5]
Me.Text6 = rst![Dato6]
Me.Text7 = rst![Dato7]
Me.Text8 = rst![Dato8]
Me.Text9 = rst![Dato9]
Me.Text10 = rst![Dato10]
Me.Text11 = rst![Dato11]
Me.Text12 = rst![Dato12]
Me.Text13 = rst![Dato13]
Me.Text14 = rst![Dato14]
Me.Text15 = rst![Dato15]
Me.Text16 = rst![Dato16]
Me.Text17 = rst![Dato17]
Me.Text18 = rst![Dato18]
Me.Text19 = rst![Dato19]
End If
rst.Close
Set rst = Nothing
Else
Me.Text1 = Null
Me.Text2 = Null
Me.Text3 = Null
Me.Text4 = Null
Me.Text5 = Null
Me.Text6 = Null
Me.Text7 = Null
Me.Text8 = Null
Me.Text9 = Null
Me.Text10 = Null
Me.Text11 = Null
Me.Text12 = Null
Me.Text13 = Null
Me.Text14 = Null
Me.Text15 = Null
Me.Text16 = Null
Me.Text17 = Null
Me.Text18 = Null
Me.Text19 = Null
End If
End Sub
Verifica en la linea del "rst.Open..." debes colocar
Nota1 = el nombre de tu tabla supongo que se llama Expedientes
Nota2 = el nombre del campo llave supongo que de llama Numero_Expediente
Nota3 = el nombre del cuadro combinado (ComboBox) puede ser Combo2
Queda así
rst.Open "SELECT * FROM [Ve la Nota1] WHERE [Ve la Nota2] = " & Ve la Nota3, Application.CodeProject.Connection, adOpenStatic, adLockOptimistic, adCmdText
Coloca entonces este código en el mismo evento AfterUpdate() del cuadro combinado (ComboBox) que tiene el campo llave "Numero_Expediente", te sugiero que crees otro combo que solo tenga un único campo que sea "Numero_Expediente" y en su evento AfterUpdate coloques este código
Dim rst As New ADODB.Recordset
If Not IsNull(Me.Combo2) Then
rst.Open "SELECT * FROM [Expedientes] WHERE [Numero_Expediente] = " & Combo2, Application.CodeProject.Connection, adOpenStatic, adLockOptimistic, adCmdText
If rst.RecordCount > 0 Then
Text1 = rst![Dato1] 'Datos1, Datos2, Datos3.... son los nombres de los campos
Text2 = rst![Dato2]
Text3 = rst![Dato3]
Text4 = rst![Dato4]
Text5 = rst![Dato5]
Text6 = rst![Dato6]
Text7 = rst![Dato7]
Text8 = rst![Dato8]
Text9 = rst![Dato9]
Text10 = rst![Dato10]
Text11 = rst![Dato11]
Text12 = rst![Dato12]
Text13 = rst![Dato13]
Text14 = rst![Dato14]
Text15 = rst![Dato15]
Text16 = rst![Dato16]
Text17 = rst![Dato17]
Text18 = rst![Dato18]
Text19 = rst![Dato19]
'aquí puedes colocar más cuadros de texto (TextBox) = al rst!["nombre del campo"]
End If
rst.Close
Set rst = Nothing
Else
Text1 = Null
Text2 = Null
Text3 = Null
Text4 = Null
Text5 = Null
Text6 = Null
Text7 = Null
Text8 = Null
Text9 = Null
Text10 = Null
Text11 = Null
Text12 = Null
Text13 = Null
Text14 = Null
Text15 = Null
Text16 = Null
Text17 = Null
Text18 = Null
Text19 = Null
'aqui puedes colocar mas cuadros de texto (TextBox)
End If
queda algo asi:
Private Sub Combo2_AfterUpdate()
Dim rst As New ADODB.Recordset
If Not IsNull(Me.Combo2) Then
rst.Open "SELECT * FROM [Expedientes] WHERE [Numero_Expediente] = " & Combo2, Application.CodeProject.Connection, adOpenStatic, adLockOptimistic, adCmdText
If rst.RecordCount > 0 Then
Me.Text1 = rst![Dato1]
Me.Text2 = rst![Dato2]
Me.Text3 = rst![Dato3]
Me.Text4 = rst![Dato4]
Me.Text5 = rst![Dato5]
Me.Text6 = rst![Dato6]
Me.Text7 = rst![Dato7]
Me.Text8 = rst![Dato8]
Me.Text9 = rst![Dato9]
Me.Text10 = rst![Dato10]
Me.Text11 = rst![Dato11]
Me.Text12 = rst![Dato12]
Me.Text13 = rst![Dato13]
Me.Text14 = rst![Dato14]
Me.Text15 = rst![Dato15]
Me.Text16 = rst![Dato16]
Me.Text17 = rst![Dato17]
Me.Text18 = rst![Dato18]
Me.Text19 = rst![Dato19]
End If
rst.Close
Set rst = Nothing
Else
Me.Text1 = Null
Me.Text2 = Null
Me.Text3 = Null
Me.Text4 = Null
Me.Text5 = Null
Me.Text6 = Null
Me.Text7 = Null
Me.Text8 = Null
Me.Text9 = Null
Me.Text10 = Null
Me.Text11 = Null
Me.Text12 = Null
Me.Text13 = Null
Me.Text14 = Null
Me.Text15 = Null
Me.Text16 = Null
Me.Text17 = Null
Me.Text18 = Null
Me.Text19 = Null
End If
End Sub
- Compartir respuesta
- Anónimo
ahora mismo