Jump to content
Parcker

Saber ID adicionado automáticamente

Recommended Posts

Parcker

Eu precisava de saber qual o id que foi adicionado há coluna da tabela. O id é gerado automaticamente. Está como Identity Colum. Há alguma maneira de saber qual o id gerado? Não estou a usar dataset's

Share this post


Link to post
Share on other sites
Andrepereira9

Depois de inserires os dados, fazes

SELECT MAX(ID) FROM nomedatabela


A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

Share this post


Link to post
Share on other sites
Caça

Basta colocares isto depois da instrução insert

SELECT @@IDENTITY

e em vez de utilizares o ExecuteNonQuery, executas o ExecuteScalar


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Parcker

Basta colocares isto depois da instrução insert

SELECT @@IDENTITY

e em vez de utilizares o ExecuteNonQuery, executas o ExecuteScalar

Não tou a ver como utilizar isso...

Tentei assim e deu erro:

Sub calcular()


        Dim ligacao As SqlConnection = New SqlConnection(Module1.Caminho)
        Dim comandosql As String = "SELECT MAX(ID) FROM Aluguer"
        Dim comando As New SqlCommand(comandosql, ligacao)
        ligacao.Open()
        Dim DR1 As SqlDataReader
        DR1 = comando.ExecuteReader
        If DR1.HasRows Then
            DR1.Read()
            Module1.ID_Aluguer = DR1.GetSqlInt32(DR1.GetOrdinal("ID")).ToString
            
        Else
            MsgBox("O aluguer não consta na base de dados!", MsgBoxStyle.Critical, Me.Text)
            Module1.ID_Aluguer = Nothing
        End If
        ligacao.Close()
        

    End Sub

Erro: IdexOutOfRageException was  unhandled

        ID

Alguma sugestão?

Share this post


Link to post
Share on other sites
Caça

Isto é aquilo que supostamente tens

INSERT INTO TABELA (DESCR) VALUES ('TESTE')

basta colocar a frente

INSERT INTO TABELA (DESCR) VALUES ('TESTE') SELECT @@IDENTITY

automaticamente é devolvido o ultimo ID


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Parcker

É devolvido para onde?

O que eu tenho é isto:

 cmd.CommandText = "INSERT INTO Aluguer (Carro, Titular, BI, Contribuinte, Carta, Idade, Nascimento, Saida) VALUES ('" & Matricula & "','" & TextBox1.Text & "','" & TextBox2.Text & "','" & TextBox3.Text & "','" & TextBox8.Text & "','" & TextBox7.Text & "','" & MaskedTextBox1.Text & "','" & MaskedTextBox2.Text & "')"

Com aquilo que meto á frente vai devolver o ID para a variavel cmd.CommandText, é isso?

Share this post


Link to post
Share on other sites
MSOlhao

Viva,

Esse valor é devolvido para o DataReader se executares a query assim

cmd.CommandText = "INSERT INTO Aluguer (Carro, Titular, BI, Contribuinte, Carta, Idade, Nascimento, Saida) VALUES ('" & Matricula & "',
'" & TextBox1.Text & "','" & TextBox2.Text & "','" & TextBox3.Text & "','" & TextBox8.Text & "','" & TextBox7.Text & "',
'" & MaskedTextBox1.Text & "','" & MaskedTextBox2.Text & "') SELECT @@IDENTITY"

dr1 = cmd.ExecuteScalar()

Depois para leres o id que queres basta fazer isto

dr1.Item(0)

Share this post


Link to post
Share on other sites
bioshock

É preferível usar o @@SCOPE_IDENTITY. Este apanha o último registo adicionado à base de dados. Aconselho-vos a ler isto.

Parcker, tens três opções:

[*]Crias uma função/sub para obter o último registo e chamas essa função/sub logo após a inserção dos registos

[*]Logo após a inserção do registo, alteras o commandText para chamar a função @@SCOPE_IDENTITY

[*]Por último, na query de inserção chamas a função

Share this post


Link to post
Share on other sites
Parcker

Ao meter

cmd.CommandText = "INSERT INTO Aluguer (Carro, Titular, BI, Contribuinte, Carta, Idade, Nascimento, Saida) VALUES ('" & Matricula & "','" & TextBox1.Text & "','" & TextBox2.Text & "','" & TextBox3.Text & "','" & TextBox8.Text & "','" & TextBox7.Text & "','" & MaskedTextBox1.Text & "','" & MaskedTextBox2.Text & "')" SELECT @@INDENTITY

Dá o erro: End of statement expected.

A ultima parte do SELECT @@INDENTITY é que faz este erro :S

Share this post


Link to post
Share on other sites
Caça

Tens que meter dentro da instrução SQL


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Parcker

Tou com uns certos problemas em conseguir resolver isto. Vou deixar a sub de introdução. Podiam por o que é preciso no sitio certo sff... Sé não, não me safo..  ;)

O ID pode depois ser enviado pa uma msgbox ou assim... Só pa eu ver como se tira ca para fora...

Aqui fica:

    Sub Inserir()

        Dim Matricula As String
        Matricula = TextBox4.Text & "-" & TextBox5.Text & "-" & TextBox6.Text
        If Validar_dados() = False Then Exit Sub
        Dim sqlConnection1 As New System.Data.SqlClient.SqlConnection(Module1.Caminho)
        Dim cmd As New System.Data.SqlClient.SqlCommand
        cmd.CommandType = System.Data.CommandType.Text
        cmd.CommandText = "INSERT INTO Aluguer (Carro, Titular, BI, Contribuinte, Carta, Idade, Nascimento, Saida) VALUES ('" & Matricula & "','" & TextBox1.Text & "','" & TextBox2.Text & "','" & TextBox3.Text & "','" & TextBox8.Text & "','" & TextBox7.Text & "','" & MaskedTextBox1.Text & "','" & MaskedTextBox2.Text & "')"
        cmd.Connection = sqlConnection1
        sqlConnection1.Open()
        cmd.ExecuteNonQuery()
        sqlConnection1.Close()
        MsgBox("Aluguer bem sucedido!", _
        MsgBoxStyle.Information, Me.Text)
        
    End Sub

EDIT:

Agradecia muito ajuda. Obrigado...

Share this post


Link to post
Share on other sites
Caça
    Sub Inserir()

        Dim Matricula As String
        Matricula = TextBox4.Text & "-" & TextBox5.Text & "-" & TextBox6.Text
        If Validar_dados() = False Then Exit Sub
        Dim sqlConnection1 As New System.Data.SqlClient.SqlConnection(Module1.Caminho)
        Dim cmd As New System.Data.SqlClient.SqlCommand
        cmd.CommandType = System.Data.CommandType.Text
        cmd.CommandText = "INSERT INTO Aluguer (Carro, Titular, BI, Contribuinte, Carta, Idade, Nascimento, Saida) VALUES ('" & Matricula & "','" & TextBox1.Text & "','" & TextBox2.Text & "','" & TextBox3.Text & "','" & TextBox8.Text & "','" & TextBox7.Text & "','" & MaskedTextBox1.Text & "','" & MaskedTextBox2.Text & "') SELECT @@INDENTITY "
        cmd.Connection = sqlConnection1
        sqlConnection1.Open()
        MessageBox.Show(cmd.ExecuteScalar)
        sqlConnection1.Close()
        MsgBox("Aluguer bem sucedido!", _
        MsgBoxStyle.Information, Me.Text)
       
    End Sub


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Parcker

Com esse código deu-me o seguinte erro:

errolc.jpg

Desde já agradeço toda a ajuda. Se souberem reparar este erro, também agradecia...

Share this post


Link to post
Share on other sites
bioshock

Pá óh Parcker, tem lá paciência, mas o ser preguiçoso têm limites. 😡

Estamos fartos de dizer @@IDENTITY ou @@SCOPE_IDENTITY. Ele enganou-se e colocou @@Indentity, é difícil de apanhar o erro?

Não queres ter o mínimo dos trabalhos, até se copiasses isso para o google ele corrigia-te. Enfim...

Share this post


Link to post
Share on other sites
Parcker

Pá óh Parcker, tem lá paciência, mas o ser preguiçoso têm limites. 😡

Estamos fartos de dizer @@IDENTITY ou @@SCOPE_IDENTITY. Ele enganou-se e colocou @@Indentity, é difícil de apanhar o erro?

Não queres ter o mínimo dos trabalhos, até se copiasses isso para o google ele corrigia-te. Enfim...

Eu sei, tens razão. Mas não é ser preguiçoso. Já estou há horas de volta disto. Ainda por cima nunca usei este código que me forneceram agora. Já nem vejo bem o ecran quanto mais os erros...

Resultou.  :cheesygrin:

UM MUITO OBRIGADO A TODOS. ESPECIALMENTE AO CAÇA...    ;)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.