none
Duvida com insert RRS feed

  • Pergunta

  • Possuo algumas tabelas como podem ver no link abaixo.

    https://www.filepicker.io/api/file/o37GZITmQYiQfemHeZWK

    Preciso inserir dados na TB_Paciente pegar a PK que esta como identidade automatica e referencia lá na TB_Telefone mais não estou conseguindo efetuar esta operação peço a ajuda de vocês segue o código do insert.

    Comando.CommandText = "insert into TB_PACIENTE (nome_Pac, endereco_Pac, sexo_Pac,rg_Pac,cpf_Pac, data_Nasc_Pac)values
             (@nome, @endereco, @sexo ,@Rg,@Cpf,@DataNasc)
            
             insert into TB_TELEFONE (idTB_Paciente, idTB_Funcionario, fixo_Tel, cel_Tel )
             select idTB_Paciente,idTB_Funcionario, @telefone, @celular
             from TB_PACIENTE, TB_FUNCIONARIO"
    
            Dim parNome As SqlParameter = New SqlParameter("@nome", txtNome.Text)
            Dim parEndereco As SqlParameter = New SqlParameter("@endereco", txtEndereco.Text)
            Dim parSexo As SqlParameter = New SqlParameter("@sexo", rdoFeminino.Text)
            Dim parRg As SqlParameter = New SqlParameter("@Rg", txtRG.Text)
            Dim parCpf As SqlParameter = New SqlParameter("@Cpf", mskCPF.Text)
            Dim parData_Nasc As SqlParameter = New SqlParameter("@DataNasc", mskDataN.Text)
            Dim parTelefone As SqlParameter = New SqlParameter("@telefone", mskTelefone.Text)
            Dim parCelular As SqlParameter = New SqlParameter("@celular", mskCelular.Text)
    
            Comando.Parameters.Add(parNome)
            Comando.Parameters.Add(parEndereco)
            Comando.Parameters.Add(parSexo)
            Comando.Parameters.Add(parRg)
            Comando.Parameters.Add(parCpf)
            Comando.Parameters.Add(parData_Nasc)
            Comando.Parameters.Add(parTelefone)
            Comando.Parameters.Add(parCelular)
    
    
            MsgBox("Paciente salvo com sucesso")
            txtNome.Text = ""
            txtEndereco.Text = ""
            txtRG.Text = ""
            mskCPF.Text = ""
            mskDataN.Text = ""
            mskTelefone.Text = ""
            mskCelular.Text = ""
    
            Comando.ExecuteNonQuery()
    

    quarta-feira, 12 de agosto de 2015 19:53

Respostas

  • Boa tarde Swartelejonata,

    Basicamente o que você precisa ter em mente é que no momento em que você faz a inserção em uma tabela, você logo em seguida pode fazer uma query pegando o último resultado com a seguinte query:

      cmdGetIdentity = New OleDbCommand()
      cmdGetIdentity.CommandText = "SELECT @@IDENTITY"
      cmdGetIdentity.Connection = cnJetDB

    E com isso, pegando a propriedade id e populando na outra tabela, esse método é claro seria se você não usasse entityframwork.

    Se você utiliza, basta criar os atributos de forma correta que ele faz a inserção correta pra você. (Obs: Você pode usar o primeiro método para qualquer cenário, mesmo com o entity).

    Atenciosamente, Roberto Alves

    • Marcado como Resposta Marcos SJ quinta-feira, 13 de agosto de 2015 17:14
    quinta-feira, 13 de agosto de 2015 17:11

Todas as Respostas

  • Olá swartelejonata,

    Tudo bem?

    Então você precisa popular a TB_Paciente e  criar uma FK na TB_Telefone que na verdade seria a PK da TB_Paciente. É isso?

    Atenciosamente


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 13 de agosto de 2015 16:32
  • Boa tarde Swartelejonata,

    Basicamente o que você precisa ter em mente é que no momento em que você faz a inserção em uma tabela, você logo em seguida pode fazer uma query pegando o último resultado com a seguinte query:

      cmdGetIdentity = New OleDbCommand()
      cmdGetIdentity.CommandText = "SELECT @@IDENTITY"
      cmdGetIdentity.Connection = cnJetDB

    E com isso, pegando a propriedade id e populando na outra tabela, esse método é claro seria se você não usasse entityframwork.

    Se você utiliza, basta criar os atributos de forma correta que ele faz a inserção correta pra você. (Obs: Você pode usar o primeiro método para qualquer cenário, mesmo com o entity).

    Atenciosamente, Roberto Alves

    • Marcado como Resposta Marcos SJ quinta-feira, 13 de agosto de 2015 17:14
    quinta-feira, 13 de agosto de 2015 17:11
  • Sim é isso mesmo é a PK da tb Paciente está como auto increment
    quinta-feira, 13 de agosto de 2015 19:57
  • Boa tarde Roberto,

    Me perdoe pela minha ignorância e falta de conheciemnto mais toda vez que executo o projeto gera este erro:(Additional information: Falha ao converter o varchar valor 'SELECT @@IDENTITY' para o tipo de dados int.) Terei de fazer uma procedure no meu banco de dados ? 

    Veja como esta o código abaixo.

       Private Sub btnSalvar_Click(sender As Object, e As EventArgs) Handles btnSalvar.Click
            'conectar.Open()
            cmd = New SqlCommand
            cmd.Connection = conectar
    
            Dim x As New frmCadPaciente
    
            If txtNome.Text = "" Or txtEndereco.Text = "" Or mskCPF.Text = "" Or mskCelular.Text = "" Then
                MsgBox("Campos Obrigatorios não preenchidos")
                Exit Sub
            End If
            'PRIMEIRO INSERT
    
            ' cmd.CommandText = "insert into TB_PACIENTE (nome_Pac, endereco_Pac, sexo_Pac,rg_Pac,cpf_Pac, data_Nasc_Pac)values
            '('" & txtNome.Text & "','" & txtEndereco.Text & "', '" & sexo & "' ,'" & txtRG.Text & "','" & mskCPF.Text & "','" & mskDataN.Text & "')"
    
    
            'SEGUNDO INSERT
            Dim query2 As String = "SELECT @@IDENTITY"
            Dim ID As Integer
            cmd.CommandText = "insert into TB_TELEFONE (idTB_Paciente,idTB_FUncionario,fixo_Tel, cel_Tel) 
            values ('" & query2 & "', null, '" & mskTelefone.Text & "' , '" & mskCelular.Text & "' )"
    
    
            'cmd.Connection = conectar
            MsgBox("Paciente salvo com sucesso")
            txtNome.Text = ""
            txtEndereco.Text = ""
            txtRG.Text = ""
            mskCPF.Text = ""
            mskDataN.Text = ""
            mskTelefone.Text = ""
            mskCelular.Text = ""
    
            cmd.ExecuteNonQuery()
            cmd.CommandText = query2
            ID = cmd.ExecuteScalar(query2)
            conectar.Close()
    
        End Sub


    quinta-feira, 13 de agosto de 2015 20:54
  • Bom dia swartelejonata,

    Caso a sua dúvida inicial tenha sido sanada e você tenha uma nova pergunta, eu sugiro que você abra uma nova thread. A não ser que sua pergunta seja apenas um mero detalhe em relação a resposta dada, neste caso não há a necessidade de abrir uma nova thread.

    Atenciosamente<abbr class="affil"></abbr>


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 14 de agosto de 2015 12:37