none
Como realizar una búsqueda en dos tablas de access RRS feed

  • Pregunta

  •  Buenas noches, un saludo, estoy utilizando este código para la búsqueda en la tabla tblformulas, pero no quiero que mi data grip se llene con información de esta tabla sino de la tabla tbldetalleformula estas dos tablas están relacionadas en tblformulas por el campo codfor y en la tabla tbldetalleformula con el campo codform, de que manera podría hacer esta búsqueda?


    Private Sub cmdbuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdbuscar.Click
            Dim consultar As String
            Dim lista As Byte
            If txtcodformula.Text <> "" Then
                consultar = "SELECT * From tblformulas where codfor ='" & txtcodformula.Text & "'"
                adaptador = New OleDbDataAdapter(consultar, conexion)
                registros = New DataSet
                adaptador.Fill(registros, "tblformulas")
                lista = registros.Tables("tblformulas").Rows.Count
                If lista <> 0 Then
                    dgvformulas.DataSource = registros
                    dgvformulas.DataMember = "tblformulas"

                    txtaprobada.Text = registros.Tables("tblformulas").Rows(0).Item("aprobado")
                    txtcodformula.Text = registros.Tables("tblformulas").Rows(0).Item("codfor")
                    txtcreado.Text = registros.Tables("tblformulas").Rows(0).Item("creado")
                    txtestatus.Text = registros.Tables("tblformulas").Rows(0).Item("status")
                    txtfcreacion.Text = registros.Tables("tblformulas").Rows(0).Item("fechacrea")
                    txtfultrevision.Text = registros.Tables("tblformulas").Rows(0).Item("fecharev")
                    txtmodificado.Text = registros.Tables("tblformulas").Rows(0).Item("modificado")
                    txtnombrepro.Text = registros.Tables("tblformulas").Rows(0).Item("nombrepro")
                    txtobservacion.Text = registros.Tables("tblformulas").Rows(0).Item("observacion")


                    cmdguardar.Enabled = False
                    cmdactualizar.Enabled = False
                    cmdmodificar.Enabled = True
                    cmdnuevo.Enabled = False
                    cmdcancelar.Enabled = True
                Else

                    If txtcodformula.Text <> "" Then
                        consultar = "SELECT * From tblformulas where tipomp ='" & txtcodformula.Text & "'"
                        adaptador = New OleDbDataAdapter(consultar, conexion)
                        registros = New DataSet
                        adaptador.Fill(registros, "tblformulas")
                        lista = registros.Tables("tblformulas").Rows.Count
                    End If
                    If lista <> 0 Then
                        dgvformulas.DataSource = registros
                        dgvformulas.DataMember = "tblformulas"

                        txtaprobada.Text = registros.Tables("tblformulas").Rows(0).Item("aprobado")
                        txtcodformula.Text = registros.Tables("tblformulas").Rows(0).Item("codfor")
                        txtcreado.Text = registros.Tables("tblformulas").Rows(0).Item("creado")
                        txtestatus.Text = registros.Tables("tblformulas").Rows(0).Item("status")
                        txtfcreacion.Text = registros.Tables("tblformulas").Rows(0).Item("fechacrea")
                        txtfultrevision.Text = registros.Tables("tblformulas").Rows(0).Item("fecharev")
                        txtmodificado.Text = registros.Tables("tblformulas").Rows(0).Item("modificado")
                        txtnombrepro.Text = registros.Tables("tblformulas").Rows(0).Item("nombrepro")
                        txtobservacion.Text = registros.Tables("tblformulas").Rows(0).Item("observacion")

                        cmdguardar.Enabled = False
                        cmdactualizar.Enabled = False
                        cmdmodificar.Enabled = True
                        cmdnuevo.Enabled = False
                        cmdcancelar.Enabled = True
                    Else
                        MsgBox("Registro no encontrado", vbCritical, "Atención!")
                        txtcodformula.Clear()
                        txtcodformula.Clear()
                        txtcodformula.Focus()
                        dgvformulas.Columns.Clear()

                    End If
                End If
            End If

        End Sub


    domingo, 18 de octubre de 2015 5:42

Respuestas

  • "jesus g b m" preguntó:

    > ... no quiero que mi data grip se llene con información de esta tabla sino
    > de la tabla tbldetalleformula estas dos tablas están relacionadas en
    > tblformulas por el campo codfor y en la tabla tbldetalleformula con el campo
    > codform, de que manera podría hacer esta búsqueda?

    Hola, Jesús:

    Tienes que ejecutar una consulta de selección combinada INNER JOIN, por lo que en la variable consultar tendrías que escribir una sintaxis parecida a la siguiente:

        consultar =
           "SELECT detalle.Campo1, detalle.Campo2, detalle.Campo3, detalle.CampoN " &
           "FROM tblformulas AS formulas INNER JOIN tbldetalleformula AS detalle " &
           "ON detalle.codform = formulas.codfor " &
           "WHERE formulas.codfor = '" & txtcodformula.Text & "'"

    Ni que decir tiene que deberás sustituir los nombres Campo1, Campo2, Campo3, CampoN por los nombres de aquellos campos de la tabla tbldetalleformula que deseas seleccionar.

    Un saludo


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    domingo, 18 de octubre de 2015 7:57
    Moderador
  • "jesus g b m" escribió:

    > el problema es que ademas también traigo información de la tabla tblformulas
    > para que se vea en las cajas de texto y al hacer este filtro dichas cajas me
    > quedan en blanco si comento y si no comento me da este error, Anexo imagen
    >
    > La columna 'aprobado' no pertenece a la tabla tblformulas.
    >

    Y en la consulta SQL de selección INNER JOIN que estás ejecutando, y que NO HAS PUBLICADO, o al menos yo no la veo en la imagen que has adjuntado, ¿aparece seleccionado el campo 'aprobado' de la tabla tblformulas? Si se te ha olvidado incluirlo en la lista de campos de la consulta SELECT, es correcto y normal que obtengas ese mensaje de error.


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    martes, 20 de octubre de 2015 6:00
    Moderador

Todas las respuestas

  • "jesus g b m" preguntó:

    > ... no quiero que mi data grip se llene con información de esta tabla sino
    > de la tabla tbldetalleformula estas dos tablas están relacionadas en
    > tblformulas por el campo codfor y en la tabla tbldetalleformula con el campo
    > codform, de que manera podría hacer esta búsqueda?

    Hola, Jesús:

    Tienes que ejecutar una consulta de selección combinada INNER JOIN, por lo que en la variable consultar tendrías que escribir una sintaxis parecida a la siguiente:

        consultar =
           "SELECT detalle.Campo1, detalle.Campo2, detalle.Campo3, detalle.CampoN " &
           "FROM tblformulas AS formulas INNER JOIN tbldetalleformula AS detalle " &
           "ON detalle.codform = formulas.codfor " &
           "WHERE formulas.codfor = '" & txtcodformula.Text & "'"

    Ni que decir tiene que deberás sustituir los nombres Campo1, Campo2, Campo3, CampoN por los nombres de aquellos campos de la tabla tbldetalleformula que deseas seleccionar.

    Un saludo


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    domingo, 18 de octubre de 2015 7:57
    Moderador
  • Me sirvió de mucho el query GRACIAS ya que mi datagrip tiene la información que necesito, el problema es que ademas también traigo información de la tabla tblformulas para que se vea en las cajas de texto y al hacer este filtro dichas cajas me quedan en blanco si comento y si no comento me da este error, Anexo imagen
    martes, 20 de octubre de 2015 3:18
  • "jesus g b m" escribió:

    > el problema es que ademas también traigo información de la tabla tblformulas
    > para que se vea en las cajas de texto y al hacer este filtro dichas cajas me
    > quedan en blanco si comento y si no comento me da este error, Anexo imagen
    >
    > La columna 'aprobado' no pertenece a la tabla tblformulas.
    >

    Y en la consulta SQL de selección INNER JOIN que estás ejecutando, y que NO HAS PUBLICADO, o al menos yo no la veo en la imagen que has adjuntado, ¿aparece seleccionado el campo 'aprobado' de la tabla tblformulas? Si se te ha olvidado incluirlo en la lista de campos de la consulta SELECT, es correcto y normal que obtengas ese mensaje de error.


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    martes, 20 de octubre de 2015 6:00
    Moderador
  • encontré este video y me funcionó de maravilla y permite descargar el codigo: https://www.youtube.com/watch?v=0A1gq-erBxI espero les sirva
    martes, 22 de diciembre de 2020 5:13