Percorrer valor do campo auto-numérico depois de inserir em ASP

Ao fazer uma inserção de um registro em uma tabela, se o identificador for auto-numérico, geralmente não sabemos qual terá sido. Aqui ensinamos a obter o identificador depois da inserção.

Por Carlos Cuenca Díaz


Publicado em: 04/11/07
Valorize este artigo:
Quando em um banco de dados temos duas tabelas relacionadas com uma relação um a vários, a chave primária da tabela com cardinalidade 1 se encontra na tabela com cardinalidade n como chave forasteira. Normalmente as chaves primárias costumam utilizar campos de tipo auto-incremento.

O presente artigo detalha como averiguar o valor que se atribui à chave primária em uma operação de inserção, para desta maneira poder introduzir registros na tabela relacionada que conta com a chave forasteira.

Para o exemplo, utilizaremos as seguintes tabelas:

Tabelas utilizadas no exercício


À princípio vamos supor que temos um novo pedido para o qual temos que adicionar vários detalhes. Neste suposto, necessitamos inserir primeiro o pedido, recolher o valor que o banco de dados lhe atribuiu ao campo IdPedido, e a seguir inserir os diferentes detalhes com esse valor de IdPedido.

Para fazer isto, vamos utilizar um objeto recordset:

Dim rspedidos
Set rspedidos=Server.CreateObject("ADODB.Recordset")


A seguir abrimos o Recordset:

With rspedidos
    .open "Pedidos" ,adOpenDynamic, AdLockOptimistic,adCmdTableDirect


adOpenDynamic: Cursor que não tem um conjunto único de registros, e no que as mudanças serão visíveis no recordset.
AdLockOptimistic: O registro não se bloqueia até que não se inseriram os dados
adCmdTableDirect: serve para indicar o nome da tabela

A combinação de cursor, tipo de bloqueio e se o campo estiver indexado ou não faz com que possamos percorrer o campo ID, outras combinações podem não funcionar.

A seguir, criamos um novo registro, e inserimos nos valores dos campos:

    .AddNew
       .Fields("idcliente")=16
       .Fields("cargo")=500
       .Fields("destinatario")="pepe"


Uma vez introduzidos todos os valores dos campos, se atualiza o recordset.

    .update

E a seguir, tiramos o ID que o banco de dados lhe atribuiu:

    MiID= .Fields("IdPedido")
End With


Agora contamos com uma variável meuID que nos permite fazer os inserts correspondentes no banco de dados, assim como recordsets ou com sentenças sql do tipo Insert Into.

Nota: Vimos como inserir registros em ASP, porém até agora sempre havíamos explicado outro método, consistente em construir a sentença SQL para a inserção e ejecutando-a por meio do método execute() do objeto connection. Podemos ver esse tipo de inserções no artigo Creação de um novo registro

Código completo:

Dim rspedidos
Set rspedidos=Server.CreateObject("ADODB.Recordset")
With rspedidos
    .open "Pedidos" ,adOpenDynamic, AdLockOptimistic,adCmdTableDirect
    .AddNew
       .Fields("idcliente")=16
       .Fields("cargo")=500
       .Fields("destinatario")="pepe"
   .update
    MiID= .Fields("IdPedido")
End With

Nota: Pode ser que nosso sistema não tenha declaradas as variáveis do sistema do tipo adOpenDynamic, AdLockOptimistic ou adCmdTableDirect. Para que fiquem definidas devemos incluir o arquivo "adovbs.inc".






Usuários :    login / registro

Manuais relacionados
Categorias relacionadas
O autor
Carlos Cuenca Díaz
Consultoria Informática

Home | Sobre nós | Copyright | Anuncie | Entrar em contato