none
Como obter valor do campo chave (auto incremento) ? RRS feed

  • 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 !

    quarta-feira, 23 de janeiro de 2008 02:43

Respostas

  • Olá Eli, fiz uns testes aqui e consegui fazer o que vc queria, mas de uma maneira um pouco diferente:

     
    Code Snippet

    set 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 coluna AUTO_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
    quarta-feira, 23 de janeiro de 2008 15:57

Todas as Respostas

  • Olá Eli, fiz uns testes aqui e consegui fazer o que vc queria, mas de uma maneira um pouco diferente:

     
    Code Snippet

    set 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 coluna AUTO_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
    quarta-feira, 23 de janeiro de 2008 15:57
  •  

    Olá Sidney, obrigado !!!

     

    Então, já fiz isso no SQL Server mas a função era:

     

    Code Snippet
    select 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 !

     

    quarta-feira, 23 de janeiro de 2008 16:23