Usuário com melhor resposta
Como obter valor do campo chave (auto incremento) ?

Pergunta
-
Olá, estou utilizando o banco MySQL
e quando vou inserir um registro em uma tabela, quero obter o codigo que é a chave primária da tabela, que é do tipo AUTO_INC;
estou utilizando Server.CreateObject("ADODB.Recordset"), através do método rs.Addnew e depois de definir os valores dos campo faço:
rs.update
cli_codigo = rs.Fields("cli_codigo")
porém vem nulo...
o que preciso fazer ?
estou defininfo da seguinte maneira:
rs.CursorType = 1
rs.LockType = 3
qdo crio a conexão...
Aguardo e obrigado !
Respostas
-
Olá Eli, fiz uns testes aqui e consegui fazer o que vc queria, mas de uma maneira um pouco diferente:
Code Snippetset conn = server.CreateObject("ADODB.Connection")
conn.open "driver=MySQL ODBC 3.51 Driver;database=teste;server=localhost;uid=root;password=123"
sql = "insert into teste(campo1, campo2) values('Meu Nome', 70)"
set rs = conn.execute(sql)
sql = "select last_insert_id()"
set id = conn.execute(sql)
sql = "select * from teste where id=" & id(0)
set rs = conn.execute(sql)
response.Write("<p>Meu nome é: <b>" & rs("campo1") & "</b> - e minha idade é: <b>" & rs("campo2") & "</b></p>")
No caso eu criei uma tabela com um campo id (auto numeração).
Utilizei uma função própria do MySQL chamada "last_insert_id()", que "Retorna o ID gerado para uma colunaAUTO_INCREMENT
pela consulta anterior".
Como é uma função própria do MySQL ela deve ser feita via uma consulta SQL ao banco.
Interessante é que o retorno de "last_insert_id()" é um array, por isso o "id(0)" para acessar o valor retornado.
Espero que te ajude.
[]'s
Todas as Respostas
-
Olá Eli, fiz uns testes aqui e consegui fazer o que vc queria, mas de uma maneira um pouco diferente:
Code Snippetset conn = server.CreateObject("ADODB.Connection")
conn.open "driver=MySQL ODBC 3.51 Driver;database=teste;server=localhost;uid=root;password=123"
sql = "insert into teste(campo1, campo2) values('Meu Nome', 70)"
set rs = conn.execute(sql)
sql = "select last_insert_id()"
set id = conn.execute(sql)
sql = "select * from teste where id=" & id(0)
set rs = conn.execute(sql)
response.Write("<p>Meu nome é: <b>" & rs("campo1") & "</b> - e minha idade é: <b>" & rs("campo2") & "</b></p>")
No caso eu criei uma tabela com um campo id (auto numeração).
Utilizei uma função própria do MySQL chamada "last_insert_id()", que "Retorna o ID gerado para uma colunaAUTO_INCREMENT
pela consulta anterior".
Como é uma função própria do MySQL ela deve ser feita via uma consulta SQL ao banco.
Interessante é que o retorno de "last_insert_id()" é um array, por isso o "id(0)" para acessar o valor retornado.
Espero que te ajude.
[]'s -
Olá Sidney, obrigado !!!
Então, já fiz isso no SQL Server mas a função era:
Code Snippetselect IDENT_CURRENT('nomedatabela');irei usar a que você me passou, o único detalhe é que terei que executar dois comandos SQL no banco, via web, um para o insert e o outro para o retorno do id, como o volume de acesso em meu site não será grande acho que não terei problemas, o detahe é quando se tem muitos acessos ao mesmo tempo...
Obrigado pela ajuda !