Llenar Datacombo con parámetros buscados en tabla
Tengo en vb 6.0 dos tablas relacionadas una con nombres y otra con datos por cada nombre, primero lleno un data combo con los nombres de las personas y la pregunta es : ¿Cómo puedo llenar el segundo datacombo sólo con los valores que pertenecen al nombre seleccionado en el data combo primero.
Esperando respuesta y dando las gracias de antemano un saludo Fernando.
1 Respuesta
[Hola
No comentas si usas ADO, DAO o si enlazas los controles a través de sus propiedades o un Datacontrol y/o similar. Además ¿qué base de datos usas?
Abraham Valencia
Sigues sin dar suficientes detalles, pero espero que esto se entienda:
Dim sql As String sql = "Select * from nombresegundatabla Where Id='" & Combo1 & "'" Adodc1.CommandType = adCmdText Adodc1.RecordSource = sql Adodc1. Refresh Do Combo2. AddItem Adodc1. Recordset. Fields("Elcampoquedesees") Adodc1. Recordset. MoveNext Loop Until Adodc1.Recordset.EOF = True
Comentas
Abraham Valencia
Buenos días Abraham primero perdona por mi bajo conocimiento y voy a relatar la pregunta lo mejor que se.
Tengo dos tablas relacionadas una tablaclientes: con campos idcliente, nombrecliente etc y una segunda tabla tablaequipo: con campos idequipo , id cliente ,imei etc, la relación es de los campos en la primera idcliente autonnumérico y en la segunda idcliente níumerico y en un formulario pongo un Datacombo don detengo esto para cargarlo''llenar datacombo
Set DTCcliente.RowSource = Rstablaclientes
DTCcliente.BoundColumn = "nombre_cliente"
DTCcliente.ListField = "nombre_cliente"
y otro Datacombo asi para cargarlo
Set Dtcimei.RowSource = RstablaEQUIPO
Dtcimei.BoundColumn = "imei"
Dtcimei.ListField = "imei"
la conexión con la tabla la tengo así:
Primer Módulo
Global Rstablaclientes As New ADODB.Recordset
global Rstabla equipo As New ADODB.Recordset
Segundo Módulo
Sub usuarios() 'sub para abrir la tabla usuarios
With Rstablaclientes
If .State = 1 Then .Close 'si la tabla está abierta que la ciere
.Open "select * from tablaclientes", base, adOpenStatic, adLockOptimistic 'necesario para la conexión a la tabla
End With
End Sub
'sub para abrir la tabla equipo
Sub equipos()
With RstablaEQUIPO
If .State = 1 Then .Close
.Open "select * from tablaequipo", base, adOpenStatic, adLockOptimistic
End With
End Sub
y la pregunta es : cuando selecciono un cliente en datacombo uno, me aparezcan en el combo 2 los registros que pertenecen sólo a ese cliente no todos que son los que aparecen.
Perdona por la extensión y espero haberme expliacado bien . Un saludo Fernando
[Hola nuevamente
Usas ADO, que es distinto a usar un Control ADOdc. El "truco" está en las sentencias SQL:
https://drive.google.com/file/d/1Vp4bBf0DlciEfmGda8WzIgCoJAH3ymSj/view?usp=sharing
Abraham Valencia
Hola Abraham estoy estudiando tu ejemplo efectivamente eso es lo que nec esito pero veo que en tu ejemplo las tablas no están relacionadas ascees no presenta relación.
No hay diferencia en realidad cuando se usa ADO y sentencias SQL. Si deseas, para que no te quedes con la duda, activa la relación entre los campos ID y verás.
Abraham Valencia
Abraham sería muco pedir que me explicaras esta sub
Private Sub Combo1_Click()
Dim MiID As String
Call Conexion
sql = "Select Id From TablaClientes Where Nombre ='" & Combo1 & "'"
Call MiRst
Let MiID = rst.Fields!Id
0
Set rst = Nothing
sql = "Select Imei From TablaEquipos Where Id=" & MiID
Call MiRst
Combo2.Clear
Do
Combo2.AddItem rst.Fields!Imei
rst.MoveNext
Loop Until rst.EOF
Call Desconexion
End Sub
Dim MiID As String
Call Conexion lo cambio por usuarios ' que abre la tabla clientes en el modulo vale así?
'sql = "Select Id From TablaClientes Where Nombre ='" & Combo1 & "'"
esto lo cambio asi sql " select id from tablaclientes where nombre = '" & dtccliente.text & "'"
Call MiRst ( usuarios sub que abre la tabla en módulo )
Let MiID = rst.Fields!Id ( esto lo entiendo así sea miid = el campo id de la tabla clientes ?)
0
Set rst = Nothing
sql = "Select Imei From TablaEquipos Where Id=" & MiID ( esta la entiendo
Call MiRst
Combo2.Clear
Do
Combo2.AddItem rst.Fields!Imei
rst.MoveNext
Loop Until rst.EOF
Call Desconexion
End Sub
Abraham perdona estoy pasando el ejemplo y en la sub combo1 click()
al poner
Do
dtcequipo.additem ( no me da esta opción)
me parece que es por que yo utilizo un data combo y no un combobox debo cambiar el datacombo por un combobox ?
Abraham voy a probar otra cosa me emperre en un datacombo y me parece que usando datagillas y cargándola buscando por id me va a funcionr bien, cuando lo pruebe y me funcione te lo comunicare ya que no logro adaptar tu ejemplo que funciona y es lo que busco pero no logro adaptarlo a mi proyecto. Te comentare si lo logro.
[Hola nuevamente
Te comento que no uso VB 6.0 hace muchos años, más de 10 incluso, aunque reconozco que era mi programa "engreído" en su momento. Los Datacombo, uf, deben ser 20 años que dejé de usarlos pero en todo caso, dale, intenta con otra cosa y comentas, e igual insisto, en las sentencias SQL está la cosa. Trata de leer sobre ellas, es más, no solo te servirá para Access sino también para SQL Server, MySQl, etc.
Abraham Valencia
- Compartir respuesta