none
Inserir dados em tres tabelas relacionamento N:N RRS feed

  • Pergunta

  • Conforme figura do form no Visual studio 2012 e diagrama de tabelas abaixo eu preciso inserir registros das tabelas no Banco SQL Server 2012.

    - Tabela: tb_cad_pf (id_pf, nome_completo, Etc)
    - Tabela: tb_cad_endereco (id_cad_endereco, cod_situacao, Etc)
    - Tabela: tb_cad_pf_endereco (cod_pf, cod_cad_endereco)

    Considenrando a relação de N:N entre as tabelas de tb_cad_pf e tb_cad_endereco, sendo id_pf=cod_pf e id_cad_endereco-cod_cad_endereco.

    O que estou pensando é ao clicar no botão inserir eu permito impostar os dados e ao clicar no Botão Gravar eu executo o comando abaixo para inserir dados nas tabelas tb_cad_pf e tb_cad_pf_endereco, porém como popular a tb_cad_pf_endereco?

    Public Sub inserir()
            Dim novo_cad As ClassModel4_pf = New ClassModel4_pf
            Dim aRET1 As ArrayList
            aRET1 = novo_cad.novo_pf_detecao(TextBox12_data_cadastro.Text, TextBox3_nome.Text, TextBox24_mae.Text,         TextBox8_nasc.Text, RadioButtonList6_sexo.SelectedValue)
            If Convert.ToInt32(aRET1(0)) >= 1 Then
            End If

            Dim novo_end As ClassModel3_Endereco = New ClassModel3_Endereco
            Dim aRET2 As ArrayList
            aRET2 = novo_end.novo_endereco_pf_detecao(RadioButtonList1_situacao.Text, RadioButtonList2_tipo.SelectedValue, TextBox5_logradouro.Text, TextBox6_numero.Text, DropDownList1_estado.SelectedValue, DropDownList2_municipio.SelectedValue, TextBox7_telefone.Text)
            If Convert.ToInt32(aRET2(0)) >= 1 Then
            End If

    '....Como resgatar o id_pf e o id_cad_endereco? 
     End Sub

     Public Function novo_endereco_pf_detecao(p_cod_situacao, p_cod_tipo, p_logradouro, p_numero, p_telefone_fixo, p_cod_uf, p_cod_mun) As ArrayList

            Dim aDR As ArrayList = New ArrayList()
            Dim comando As String
            comando = "INSERT INTO (cod_situacao, cod_tipo, logradouro, numero, cod_uf, cod_mun, telefone_fixo)" + _
                                    "VALUES (@Par1, @Par2, @Par3, @Par4, @Par5, @Par6, @Par7)"
            Dim param As ArrayList = New ArrayList()
            param.Add(p_cod_situacao)
            param.Add(p_cod_tipo)
            param.Add(p_logradouro)
            param.Add(p_numero)
            param.Add(p_telefone_fixo)
            param.Add(p_cod_uf)
            param.Add(p_cod_mun)
            aDR = Class2_ExecuteBD.Comando(comando, param)
            Return aDR
        End Function


     Public Function novo_pf_detecao(p_data_cadastro, p_nome_completo, p_nome_mae, p_data_nascimento, p_cod_sexo) As ArrayList
            Dim aDR As ArrayList = New ArrayList()
            Dim comando As String
            comando = "INSERT INTO tb_cad_pf (data_cadastro, nome_completo, nome_mae, data_nascimento, cod_sexo)" + _
                                    "VALUES (@Par1, @Par2, @Par3, @Par4, @Par5)"
            Dim param As ArrayList = New ArrayList()
            param.Add(p_data_cadastro)
            param.Add(p_nome_completo)
            param.Add(p_nome_mae)
            param.Add(p_data_nascimento)
            param.Add(p_cod_sexo)
            aDR = Class2_ExecuteBD.Comando(comando, param)
            Return aDR
        End Function


     
    • Editado Wilson Boris segunda-feira, 24 de junho de 2013 14:28 adequação
    segunda-feira, 24 de junho de 2013 12:25

Todas as Respostas

  • Wilson,

    Você deseja resgatar os IDs que foram geradas após o Insert nas tabelas PF e Endereço?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    terça-feira, 25 de junho de 2013 17:26
  • Exato, pois este é o problema relacionado a integridade relacional comentado em outro post.

    muito obrigado pelo retorno.

    terça-feira, 25 de junho de 2013 17:30
  • A princípio estou com o código abaixo, mas será a melhor prática?

    Public Sub inserir()
            Dim novo_cad As ClassModel4_pf = New ClassModel4_pf
            Dim aRET1 As ArrayList
            aRET1 = novo_cad.novo_pf_detecao(TextBox12_data_cadastro.Text, TextBox3_nome.Text, TextBox24_mae.Text, TextBox8_nasc.Text, RadioButtonList6_sexo.SelectedValue)
            If Convert.ToInt32(aRET1(0)) >= 1 Then
            End If

            Dim novo_end As ClassModel3_Endereco = New ClassModel3_Endereco
            Dim aRET2 As ArrayList
            aRET2 = novo_end.novo_endereco_pf_detecao(RadioButtonList1_situacao.Text, RadioButtonList2_tipo.SelectedValue, TextBox5_logradouro.Text, TextBox6_numero.Text, DropDownList1_estado.SelectedValue, DropDownList2_municipio.SelectedValue, TextBox7_telefone.Text)
            If Convert.ToInt32(aRET2(0)) >= 1 Then
            End If

            Dim u1 As ClassModel4_pf = New ClassModel4_pf()
            Dim retorno1 As Integer = u1.busca_id_pf_detecao(Label1_id_pf.Text)
            If retorno1 = Label1_id_pf.Text Then
            End If

            Dim u2 As ClassModel3_Endereco = New ClassModel3_Endereco()
            Dim retorno2 As Integer = u2.busca_id_endereco_detecao(Label2_id_cad_endereco.Text)
            If retorno2 = Label2_id_cad_endereco.Text Then
            End If


            Dim novo_pf_end As ClassModel5_pf_endereco = New ClassModel5_pf_endereco
            Dim aRET3 As ArrayList
            aRET3 = novo_pf_end.novo_pf_endereco_detecao(Label2_id_cad_endereco.Text, Label1_id_pf.Text)
            If Convert.ToInt32(aRET2(0)) >= 1 Then
                Label1_retorno_CRUD_cad.Text = (String.Format("{0} Registro incluido com sucesso.", Convert.ToString(aRET3(0))))
            End If
    End Sub


        Public Function novo_pf_detecao(p_data_cadastro, p_nome_completo, p_nome_mae, p_data_nascimento, p_cod_sexo) As ArrayList
            Dim aDR As ArrayList = New ArrayList()
            Dim comando As String
            comando = "INSERT INTO tb_cad_pf (data_cadastro, nome_completo, nome_mae, data_nascimento, cod_sexo)" + _
                                    "VALUES (@Par1, @Par2, @Par3, @Par4, @Par5)"
            Dim param As ArrayList = New ArrayList()
            param.Add(p_data_cadastro)
            param.Add(p_nome_completo)
            param.Add(p_nome_mae)
            param.Add(p_data_nascimento)
            param.Add(p_cod_sexo)
            aDR = Class2_ExecuteBD.Comando(comando, param)
            Return aDR
        End Function

    Public Function novo_endereco_pf_detecao(p_cod_situacao, p_cod_tipo, p_logradouro, p_numero, p_telefone_fixo, p_cod_uf, p_cod_mun) As ArrayList
            Dim aDR As ArrayList = New ArrayList()
            Dim comando As String
            comando = "INSERT INTO (cod_situacao, cod_tipo, logradouro, numero, cod_uf, cod_mun, telefone_fixo)" + _
                                    "VALUES (@Par1, @Par2, @Par3, @Par4, @Par5, @Par6, @Par7)"
            Dim param As ArrayList = New ArrayList()
            param.Add(p_cod_situacao)
            param.Add(p_cod_tipo)
            param.Add(p_logradouro)
            param.Add(p_numero)
            param.Add(p_telefone_fixo)
            param.Add(p_cod_uf)
            param.Add(p_cod_mun)
            aDR = Class2_ExecuteBD.Comando(comando, param)
            Return aDR
        End Function


        Public Function busca_id_pf_detecao(ByVal id_pf As Integer) As Integer
            Dim a As Object
            Dim c As SqlCommand = New SqlCommand
            c.CommandText = "SELECT id_pf FROM tb_cad_pf WHERE nome_completo=@nome_completo and nome_mae=@nome_mae and data_nascimento=@data_nascimento"
            c.Parameters.Add("@nome_completo", System.Data.SqlDbType.NChar).Value = nome_completo
            c.Parameters.Add("@nome_mae", System.Data.SqlDbType.NChar).Value = nome_mae
            c.Parameters.Add("@data_nascimento", System.Data.SqlDbType.Date).Value = data_nascimento
            a = ClassData1_SelScalar.sel(c)
            id_pf = Convert.ToInt32(a)
            Return id_pf
       End Function

     Public Function busca_id_endereco_detecao(ByVal id_cad_endereco As Integer) As Integer
            Dim a As Object
            Dim c As SqlCommand = New SqlCommand
            c.CommandText = "SELECT id_cad_endereco FROM tb_cad_endereco WHERE cod_situacao=@cod_situacao and cod_tipo=@cod_tipo and logradouro=@logradouro and numero=@numero"
            c.Parameters.Add("@cod_situacao", System.Data.SqlDbType.Int).Value = cod_situacao
            c.Parameters.Add("@cod_tipo", System.Data.SqlDbType.Int).Value = cod_tipo
            c.Parameters.Add("@logradouro", System.Data.SqlDbType.NChar).Value = logradouro
            c.Parameters.Add("@numero", System.Data.SqlDbType.NChar).Value = numero
            a = ClassData1_SelScalar.sel(c)
            id_cad_endereco = Convert.ToInt32(a)
            Return id_cad_endereco
        End Function


        Public Function novo_pf_endereco_detecao(p_cod_cad_endereco, p_cod_pf) As ArrayList
            Dim aDR As ArrayList = New ArrayList()
            Dim comando As String
            comando = "INSERT INTO tb_cad_pf_endereco (cod_cad_endereco, cod_pf)" + _
                                    "VALUES (@Par1, @Par2)"
            Dim param As ArrayList = New ArrayList()
            param.Add(p_cod_cad_endereco)
            param.Add(p_cod_pf)
            aDR = Class2_ExecuteBD.Comando(comando, param)
            Return aDR
        End Function

    terça-feira, 25 de junho de 2013 21:10