Programación General > Visual Basic 6.0 e inferiores
Problemas para enlazar un textbox con un datagrid
pirlespi:
Buenas a todos,
Acabo de empezar con esto de la programación y me encuentro estresado con este tema.
Tengo una BBDD en Access con dos tablas relacionadas por un campo común, un ID. Una de ellas contiene datos generales, mientras que la otra contiene fechas y observaciones de cada uno de los registros anteriores,
En el formulario que realicé se muestra el ID de la primera tabla y quiero que debajo se muestre un datagrid con las fechas y observaciones de la segunda tabla, pero solo cuando ID sea el mismo mostrado en el textbox del formulario.
Por mas que lo intento el datagrid muestra todos los registros de la segunda tabla.
Espero que me puedan ayudar.
Gracias!
ProfesorX:
Hola pirlespi, bienvenido al foro.
Bueno, este es un foro de programacion y codigo (por algo se llama solo codigo), asi que valga la redundancia, si no publicas que codigo estas utilizando, es dificil darte ayuda, aun no tenemos dotes de adivinacion.
Bueno, lo mas que te podria sugerir, dado que no se como lo estas haciendo sin el codigo, es que utilices una consulta SQL limitada por medio de where, para llenar el datagrid. Ejemplo:
--- Código: ---select * from tabla2
where tabla2.id_tabla1 = id_tabla1;
--- Fin del código ---
Saludos :)
pirlespi:
Muy buenas ProfesorX,
Siento no ser muy especifico, tampoco es que me entere mucho todavía, la verdad.
La cosa es que no tengo el código, lo único que hice fue incluir un dataGridview con los datos de la tabla2 en el formulario que contiene los datos de la tabla1 esperando que solo mostrara los registros cuyo ID coincidiera en ambas ya que en la BBDD de Access existe una relación entre ellas.
He probado lo siguiente:
--- Código: --- Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs)
Dim connectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=NOMBRE BBDD"
Dim ocom As New OleDb.OleDbConnection(connectionString)
Dim ds As New DataSet
Dim OleComand As New OleDbCommand
Dim da As New OleDbDataAdapter
da.SelectCommand = OleComand
da.SelectCommand.Connection = ocom
'--------------------
OleComand.CommandText = "SELECT ID_TABLA2, Fecha, OBS FROM TABLA2 WHERE ID_TABLA2=" & ID_TABLA1TextBox.Text
da.Fill(ds, "seguimiento")
DataGridView1.DataSource = ds.Tables("seguimiento")
--- Fin del código ---
Lo he compuesto a partir de lo que he podido averiguar por ahí pero el datagrid aparece vacío en el form.
Gracias
ProfesorX:
--- Cita de: pirlespi en Lunes 29 de Julio de 2013, 10:15 ---Siento no ser muy especifico, tampoco es que me entere mucho todavía, la verdad.
--- Fin de la cita ---
Si no entiendes mucho de Visual Basic, quizas seria bueno que buscaras un tutorial mas basico, y no comenzaras todavia con bases de datos hasta que tengas mas conocimientos del lenguaje.
--- Citar ---La cosa es que no tengo el código,
--- Fin de la cita ---
Como que no tienes codigo? aun si usaste el asistente, claro que debe haber codigo, solo revisa bien los archivos de tu proyecto, el codigo generado automaticamente debe de estar ahi.
--- Citar ---lo único que hice fue incluir un dataGridview con los datos de la tabla2 en el formulario que contiene los datos de la tabla1 esperando que solo mostrara los registros cuyo ID coincidiera en ambas ya que en la BBDD de Access existe una relación entre ellas.
--- Fin de la cita ---
Bueno, el que tengas una relacion definida en tu base de datos no significa que automaticamente te dara los registros relacionados. Las relaciones solamente sirve para garantizar lo que se llama "integridad referencial", que basicamente significa que el motor de base de datos de acces te marcara error si tratas de insertar un registro en una tabla que no se relaciona con un registro de otra tabla. Pero aun debes, valga la redundancia, "seleccionar" los registros que deseas mostrar por medio de select.
http://es.wikipedia.org/wiki/Integridad_referencial
Ahora en el codigo que publicaste, aunque tienes los comandos, y la consulta, no veo la linea en donde ejecutas esa consulta, si no ejecutas la consulta, es obvio que no tendras registros, y por lo tanto el datagrid estara vacio.
Falta ejecutar la consulta, entre la definicion del comando y el llenaddo del dataadapter:
--- Código: ---
OleCommand.CommandText = "SELECT ID_TABLA2, Fecha, OBS FROM TABLA2 WHERE ID_TABLA2=" + ID_TABLA1TextBox.Text;
OleCommand.ExecuteNonQuery();
da.Fill(ds, "seguimiento");
--- Fin del código ---
Aun asi, te recomiendo que busques un tutorial para realizar conecciones a bases de datos sin utilizar asistentes, de esa forma podras entender mejor cuales son los pasos necesarios para conectarte a bases de datos, y comprenderas mejor el codigo de los asistentes.
Saludos :)
pirlespi:
El tema del tutorial ya estoy en ello, pero esto es una cosa que necesito, pese a sobrepasarme en conocimientos, de ahí mi petición de ayuda.
Voy a intentar ser mas correcto.
veamos...
He incluido la línea que me comentaste, y he puesto todo en el evento load del form ya que lo que quiero es que el datagrid se visualice al abrirlo, quedando de la siguiente forma:
--- Código: --- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim connectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=BBDD.mdb; User Id=admin;Password=;"
Dim ocom As New OleDb.OleDbConnection(connectionString)
Dim ds As New DataSet
Dim OleComand As New OleDbCommand
Dim da As New OleDbDataAdapter
da.SelectCommand = OleComand
da.SelectCommand.Connection = ocom
OleComand.CommandText = ("SELECT ID_TABLA2, Fecha, OBS FROM TABLA2 WHERE ID_TABLA2= '" & NumeroTextBox.Text & "'")
ocom.Open()
OleComand.ExecuteNonQuery()
da.Fill(ds, "seguimiento")
DataGridView2.DataSource = ds.Tables("seguimiento")
End Sub
--- Fin del código ---
he añadido también ocom.open porque sin el devolvía lo siguiente:
ExecuteNonQuery requiere una Connection abierta y disponible. El estado actual de la conexión es cerrada.
La cosa es que el Grid sigue sin mostrar resultados...
Navegación
[#] Página Siguiente
Ir a la versión completa