• Domingo 22 de Diciembre de 2024, 14:09

Autor Tema:  Problemas para enlazar un textbox con un datagrid  (Leído 6870 veces)

pirlespi

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Problemas para enlazar un textbox con un datagrid
« en: Viernes 12 de Julio de 2013, 13:38 »
0
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!
« última modificación: Viernes 12 de Julio de 2013, 13:40 por pirlespi »

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re:Problemas para enlazar un textbox con un datagrid
« Respuesta #1 en: Viernes 12 de Julio de 2013, 19:24 »
0
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: [Seleccionar]
select * from tabla2
where tabla2.id_tabla1 = id_tabla1;

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

pirlespi

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re:Problemas para enlazar un textbox con un datagrid
« Respuesta #2 en: Lunes 29 de Julio de 2013, 10:15 »
0
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: [Seleccionar]
    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")

Lo he compuesto a partir de lo que he podido averiguar por ahí pero el datagrid aparece vacío en el form.

Gracias

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re:Problemas para enlazar un textbox con un datagrid
« Respuesta #3 en: Martes 30 de Julio de 2013, 18:54 »
0
Siento no ser muy especifico, tampoco es que me entere mucho todavía, la verdad.

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,

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.

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: [Seleccionar]

            OleCommand.CommandText = "SELECT ID_TABLA2, Fecha, OBS FROM TABLA2 WHERE ID_TABLA2=" + ID_TABLA1TextBox.Text;

            OleCommand.ExecuteNonQuery();

            da.Fill(ds, "seguimiento");

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 :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

pirlespi

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re:Problemas para enlazar un textbox con un datagrid
« Respuesta #4 en: Miércoles 31 de Julio de 2013, 12:46 »
0
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: [Seleccionar]
    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

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...

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re:Problemas para enlazar un textbox con un datagrid
« Respuesta #5 en: Miércoles 31 de Julio de 2013, 21:19 »
0
Bueno, si sigues obteniendo un datagridview vacio, me parece que debes tener algun error en tu consulta.

Prueba lo siguiente, primero intenta con una consulta donde obtengas todos los registros para verificar que tu tabla no esta vacia, y descartar un error en otra parte:

Código: [Seleccionar]
        OleComand.CommandText = "SELECT ID_TABLA2, Fecha, OBS FROM TABLA2"

Despues prueba una consulta con una condicion, utilizando un valor que sabes que  se encuentra en la base de datos, suponiendo por ejemplo que tienes un id_tabla 2 con valor de 1, prueba lo siguiente:

Código: [Seleccionar]
        OleComand.CommandText = "SELECT ID_TABLA2, Fecha, OBS FROM TABLA2 WHERE ID_TABLA2 = 1"

Finalmente, utiliza tu intruccion:
Código: [Seleccionar]
        OleComand.CommandText = ("SELECT ID_TABLA2, Fecha, OBS FROM TABLA2 WHERE ID_TABLA2= '" & NumeroTextBox.Text & "'")

Si aun te sale un datagridview vacio, revisa el contenido de NumeroTextBox.Text, verificando que no este en blanco ni nada parecido.

Mira, te dejo un codigo que te ayudxara en la depuracion, utilzas un MessageBox.Show para desplegar el contenido de tu consulta, y utilizas un bloque try..catch..finally para ayudarte a atrapar errores que normalmente no te aparecen, asi podremos ir encontrando la falla.

Código: [Seleccionar]
    Private Sub Form1_Load(sender As System.Object, 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 OleDb.OleDbCommand
        Dim da As New OleDb.OleDbDataAdapter
        da.SelectCommand = OleComand
        da.SelectCommand.Connection = ocom
        OleComand.CommandText = "SELECT ID_TABLA2, Fecha, OBS FROM TABLA2"
        'Con la siguiente instruccion podras ver el contenido de la consulta SQL, para verificar
        'que realmente la estas construyendo adecuadamente
        MessageBox.Show(OleComand.CommandText)

        ' El siguiente codigo te ayudarar a atrapar erroresw, y verlos en un cuadro de una manera mas clara
        Try
            ocom.Open()
            OleComand.ExecuteNonQuery()
            da.Fill(ds, "seguimiento")
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        Finally
            ocom.Close()
        End Try
        DataGridView1.DataSource = ds.Tables("seguimiento")

    End Sub
End Class

Saludos :)
« última modificación: Miércoles 31 de Julio de 2013, 21:36 por ProfesorX »

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re:Problemas para enlazar un textbox con un datagrid
« Respuesta #6 en: Miércoles 31 de Julio de 2013, 21:33 »
0
Hola, al terminar de escribirte mi respuesta, me he dado cuenta de algo, si estas haciendo la consulta al cargar el formulario, el texbox en ese momento estara en blanco, proque aun no has capturado nada en el, por lo tanto la consulta obtenida sera la siguiente:

Código: [Seleccionar]
SELECT ID_TABLA2, Fecha, OBS FROM TABLA2 WHERE ID_TABLA2= ''

Y como la condicion del where esta en blanco, no obtendras ningun registro.

Me parece que debes ejecutar la consulta y llenar el datagridview DESPUES de cargar el formulario, y que hayas puesto un valor en tu textbox, quizas tengas que agregar un control button y ejecutar el comando por medio del evento click de ese button, validando ademas que el textbox no se encuente vacio para que no hagas una consulta con la condicion vacia.

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

pirlespi

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re:Problemas para enlazar un textbox con un datagrid
« Respuesta #7 en: Jueves 1 de Agosto de 2013, 14:05 »
0
Muy buenas otra vez,

Efectivamente, he añadido un control button que llevaba a un nuevo form y ahí ya he podido cargar los datos de la tabla en el datagrid.

Funciona perfectamente.

Mil gracias!