none
Consulta em duas tabelas vb.net RRS feed

  • Pergunta

  • Boa noite,

    Estou aprendendo a programar e estou desenvolvendo uma aplicação para talvez usar no meu trabalho, porém estou com um problema.

    Tenho um textbox no qual digito o código de um produto (primary key na tabela 1) e em outros dois textbox retorna os valores referentes na mesma tabela.

    Para segunda consulta criei um modulo onde utilizo o mesmo textbox com o código do produto  para retornar informações da tabela 2 (não é primary ou foreing key) em outro texbox.

    Quando executo aparece o seguinte erro "A coluna 'inc_hlg_num_homologa' não pertence a tabela cad_material(tabela1).

    Fico grato por qualquer orientação.

    Obrigado.

    Segue os código.

    Obs.

    Private Sub Txb_IncLau_CodMat_Leave(sender As Object, e As EventArgs) Handles Txb_IncLau_CodMat.Leave
            Txb_IncLau_CodMat.BackColor = Color.White
            CodMat()
    
        End Sub
    
    
    Public Sub CodMat()
    
            Try
                sql = "select * from cad_material where cad_mat_codigo="
                sql += "'" & Txb_IncLau_CodMat.Text & "'"
                conectar.Open()
                adaptar = New SqlDataAdapter(sql, conectar)
                conectar.Close()
                local = New DataSet
                adaptar.Fill(local, "cad_material")
                resultado = local.Tables("cad_material").Rows.Count
                If resultado > 0 Then
                    registro = local.Tables("cad_material").Rows(0)
                    Txb_IncLau_DescMat.Text = registro("cad_mat_descricao")
                    Txb_IncLau_Espec.Text = registro("cad_mat_especificacao")
                    'Txb_IncLau_Lote.Focus()
                    Call VerificaHomologa()
                Else
                    MsgBox("Registro não encotrado.")
                    Txb_IncLau_CodMat.Text = ""
                    Txb_IncLau_DescMat.Text = ""
                    Txb_IncLau_Espec.Text = ""
                    Exit Sub
                End If
                conectar.Open()
                comando = New SqlCommand(sql)
                comando.Connection = conectar
                comando.ExecuteNonQuery()
            Catch ex As Exception
                conectar.Close()
                MessageBox.Show("Erro de gravação de dados!" & vbCrLf & ex.Message, "ERRO", MessageBoxButtons.OK, MessageBoxIcon.Error)
    
            End Try
        End Sub
    Imports System.Data.SqlClient
    Module Mod_Homologa
        Public Sub VerificaHomologa()
    
            conectar = New SqlConnection
            conectar.ConnectionString = cnn
    
    
            If Frm_Inc_Laudo.Txb_IncLau_CodMat.Text <> "" Then
                Try
                    sql = "select * from inc_homologa where inc_hlg_cod_forn="
                    sql += "'" & Frm_Inc_Laudo.Txb_IncLau_CodForn.Text & "' And inc_hlg_cod_mat="
                    sql += "'" & Frm_Inc_Laudo.Txb_IncLau_CodMat.Text & "'"
    
                    conectar.Open()
                    adaptar = New SqlDataAdapter(sql, conectar)
                    conectar.Close()
                    dt = New DataSet
                    adaptar.Fill(dt, "inc_homologa")
                    resultado = dt.Tables("inc_homologa").Rows.Count
                    If resultado > 0 Then
                        Frm_Inc_Laudo.Txb_IncLau_Homologa.Text = registro("inc_hlg_num_homologa")
    
                        If Frm_Inc_Laudo.Txb_IncLau_Homologa.Text = "" Then
                            Frm_Inc_Laudo.Btn_IncLau_Sair.Focus()
                            Exit Sub
                        End If
                    Else
                        MsgBox("Material não homologado para o fornecedor informado.
    Procure o administrador.")
                    End If
                Catch ex As Exception
                    MessageBox.Show("Erro de gravação de dados!" & vbCrLf & ex.Message, "ERRO", MessageBoxButtons.OK, MessageBoxIcon.Error)
                End Try
            End If
        End Sub
    End Module


    • Editado Cleber Brandão sexta-feira, 17 de fevereiro de 2017 01:21 complemento explicação.
    sexta-feira, 17 de fevereiro de 2017 01:20

Respostas

  • Olá, Cleber! Está faltando você atribuir o resultado da segunda consulta à variável registro:

    Private Sub Txb_IncLau_CodMat_Leave(sender As Object, e As EventArgs) Handles Txb_IncLau_CodMat.Leave
            Txb_IncLau_CodMat.BackColor = Color.White
            CodMat()
    
        End Sub
    
    
    Public Sub CodMat()
    
            Try
                sql = "select * from cad_material where cad_mat_codigo="
                sql += "'" & Txb_IncLau_CodMat.Text & "'"
                conectar.Open()
                adaptar = New SqlDataAdapter(sql, conectar)
                conectar.Close()
                local = New DataSet
                adaptar.Fill(local, "cad_material")
                resultado = local.Tables("cad_material").Rows.Count
                If resultado > 0 Then
                    registro = local.Tables("cad_material").Rows(0)
                    Txb_IncLau_DescMat.Text = registro("cad_mat_descricao")
                    Txb_IncLau_Espec.Text = registro("cad_mat_especificacao")
                    'Txb_IncLau_Lote.Focus()
                    Call VerificaHomologa()
                Else
                    MsgBox("Registro não encotrado.")
                    Txb_IncLau_CodMat.Text = ""
                    Txb_IncLau_DescMat.Text = ""
                    Txb_IncLau_Espec.Text = ""
                    Exit Sub
                End If
                conectar.Open()
                comando = New SqlCommand(sql)
                comando.Connection = conectar
                comando.ExecuteNonQuery()
            Catch ex As Exception
                conectar.Close()
                MessageBox.Show("Erro de gravação de dados!" & vbCrLf & ex.Message, "ERRO", MessageBoxButtons.OK, MessageBoxIcon.Error)
    
            End Try
        End Sub
    Imports System.Data.SqlClient
    Module Mod_Homologa
        Public Sub VerificaHomologa()
    
            conectar = New SqlConnection
            conectar.ConnectionString = cnn
    
    
            If Frm_Inc_Laudo.Txb_IncLau_CodMat.Text <> "" Then
                Try
                    sql = "select * from inc_homologa where inc_hlg_cod_forn="
                    sql += "'" & Frm_Inc_Laudo.Txb_IncLau_CodForn.Text & "' And inc_hlg_cod_mat="
                    sql += "'" & Frm_Inc_Laudo.Txb_IncLau_CodMat.Text & "'"
    
                    conectar.Open()
                    adaptar = New SqlDataAdapter(sql, conectar)
                    conectar.Close()
                    dt = New DataSet
                    adaptar.Fill(dt, "inc_homologa")
                    resultado = dt.Tables("inc_homologa").Rows.Count
                    If resultado > 0 Then
    					registro = dt.Tables("inc_homologa").Rows(0) /* ACREDITO QUE FALTA ESTA LINHA */
                        Frm_Inc_Laudo.Txb_IncLau_Homologa.Text = registro("inc_hlg_num_homologa")
    
                        If Frm_Inc_Laudo.Txb_IncLau_Homologa.Text = "" Then
                            Frm_Inc_Laudo.Btn_IncLau_Sair.Focus()
                            Exit Sub
                        End If
                    Else
                        MsgBox("Material não homologado para o fornecedor informado.
    Procure o administrador.")
                    End If
                Catch ex As Exception
                    MessageBox.Show("Erro de gravação de dados!" & vbCrLf & ex.Message, "ERRO", MessageBoxButtons.OK, MessageBoxIcon.Error)
                End Try
            End If
        End Sub
    End Module
    Bom trabalho!

    • Marcado como Resposta Cleber Brandão sexta-feira, 17 de fevereiro de 2017 21:05
    sexta-feira, 17 de fevereiro de 2017 10:25

Todas as Respostas

  • Olá, Cleber! Está faltando você atribuir o resultado da segunda consulta à variável registro:

    Private Sub Txb_IncLau_CodMat_Leave(sender As Object, e As EventArgs) Handles Txb_IncLau_CodMat.Leave
            Txb_IncLau_CodMat.BackColor = Color.White
            CodMat()
    
        End Sub
    
    
    Public Sub CodMat()
    
            Try
                sql = "select * from cad_material where cad_mat_codigo="
                sql += "'" & Txb_IncLau_CodMat.Text & "'"
                conectar.Open()
                adaptar = New SqlDataAdapter(sql, conectar)
                conectar.Close()
                local = New DataSet
                adaptar.Fill(local, "cad_material")
                resultado = local.Tables("cad_material").Rows.Count
                If resultado > 0 Then
                    registro = local.Tables("cad_material").Rows(0)
                    Txb_IncLau_DescMat.Text = registro("cad_mat_descricao")
                    Txb_IncLau_Espec.Text = registro("cad_mat_especificacao")
                    'Txb_IncLau_Lote.Focus()
                    Call VerificaHomologa()
                Else
                    MsgBox("Registro não encotrado.")
                    Txb_IncLau_CodMat.Text = ""
                    Txb_IncLau_DescMat.Text = ""
                    Txb_IncLau_Espec.Text = ""
                    Exit Sub
                End If
                conectar.Open()
                comando = New SqlCommand(sql)
                comando.Connection = conectar
                comando.ExecuteNonQuery()
            Catch ex As Exception
                conectar.Close()
                MessageBox.Show("Erro de gravação de dados!" & vbCrLf & ex.Message, "ERRO", MessageBoxButtons.OK, MessageBoxIcon.Error)
    
            End Try
        End Sub
    Imports System.Data.SqlClient
    Module Mod_Homologa
        Public Sub VerificaHomologa()
    
            conectar = New SqlConnection
            conectar.ConnectionString = cnn
    
    
            If Frm_Inc_Laudo.Txb_IncLau_CodMat.Text <> "" Then
                Try
                    sql = "select * from inc_homologa where inc_hlg_cod_forn="
                    sql += "'" & Frm_Inc_Laudo.Txb_IncLau_CodForn.Text & "' And inc_hlg_cod_mat="
                    sql += "'" & Frm_Inc_Laudo.Txb_IncLau_CodMat.Text & "'"
    
                    conectar.Open()
                    adaptar = New SqlDataAdapter(sql, conectar)
                    conectar.Close()
                    dt = New DataSet
                    adaptar.Fill(dt, "inc_homologa")
                    resultado = dt.Tables("inc_homologa").Rows.Count
                    If resultado > 0 Then
    					registro = dt.Tables("inc_homologa").Rows(0) /* ACREDITO QUE FALTA ESTA LINHA */
                        Frm_Inc_Laudo.Txb_IncLau_Homologa.Text = registro("inc_hlg_num_homologa")
    
                        If Frm_Inc_Laudo.Txb_IncLau_Homologa.Text = "" Then
                            Frm_Inc_Laudo.Btn_IncLau_Sair.Focus()
                            Exit Sub
                        End If
                    Else
                        MsgBox("Material não homologado para o fornecedor informado.
    Procure o administrador.")
                    End If
                Catch ex As Exception
                    MessageBox.Show("Erro de gravação de dados!" & vbCrLf & ex.Message, "ERRO", MessageBoxButtons.OK, MessageBoxIcon.Error)
                End Try
            End If
        End Sub
    End Module
    Bom trabalho!

    • Marcado como Resposta Cleber Brandão sexta-feira, 17 de fevereiro de 2017 21:05
    sexta-feira, 17 de fevereiro de 2017 10:25
  • Olá Rodrigo, 

    Obrigado pela agilidade na resposta, funcionou perfeitamente.

    Caso tenha alguma observação de boa pratica no código, agradeceria também os comentários.

    Abraço.

    sexta-feira, 17 de fevereiro de 2017 21:07