Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

wren

Chave Primária Controlada

Recommended Posts

Eu estava diante de um problema no qual eu imaginei que teria que controlar as chaves primárias, tipo, eu tenho uma tabela de produto e outra de fotos. Mas eu queria um formulário de insert no banco e que ao mesmo tempo me desse opção de inserir as fotos na outra tabela.

 

Mas e como que eu saberia o ID do produto pra inserir na outra tabela? Eu pensei, repensei, pesquisei e concluí: Tenho que dar uma chave primária na hora que o cara vai inserir o produto, e não quero emporcalhar o meu código ASP. Só devo usar PROCEDURES e nem quero criar 2 procedures (select & insert) pra fazer isso.

 

Daí imaginei:

-Tenho que pesquisar o ultimo produto inserido

 

-Atribuir o valor em uma variável

 

-Somar mais '1' nessa variável

 

-Inserir a variável na tabela de produtos

 

-Devolver ela pra página ASP.

 

E lá na página eu uso ela como querystring pra alimentar as outras tabelas que dependem dela.

 

Aí segue o código da procedure que criei:

 

CREATE PROCEDURE SP_IDASDECLARE @valor INTDECLARE @resultado INTSELECT TOP 1 @valor = des_id from tab_destino ORDER BY des_id DESCSET @resultado = @valor + '1'SELECT @resultado des_idINSERT tab_destino(des_id)VALUES(@resultado)
E daí toda vez que o cara abrir o formulário pra inserir um produto, eu chamo ela. Se ele cancelar, eu deleto o registro da base!

 

Espero ter ajudado e se já postaram, foi mal.

 

E aos mais experiêntes, se eu fiz cagada, ou se dava pra fazer de outra maneira, me digam.

 

Fui

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não acho que você fez cagada, ficou bem legal, mas acho que seria mais interessante o campo CODIGO da tabela fotos ser autoincremento, tendo em vista que você sempre esta pegando o maior código e inserindo mais um.e outro, o TOP, não funciona no ORACLE, poderia ser feito usando a função max(codigo_foto)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Colega.

Desculpa, mas essa não é a melhor forma. Ainda mais usando uma aplicação com recordset sem componentes COM+.

 

Pois é possível que dois usuário tentem incluir ao mesmo tempo um registro, o que poderá tornar a aplicação falha.

 

Veja o código abaixo, é bem simples

 

Set ObjConn = Server.CreateObject("ADODB.Connection")Set ObjRs = Server.CreateObject("ADODB.Recordset")ObjConn.Open "String de Conexão"ObjRs.Open "tb_usuario",ObjConn,1,3,2ObjRs.AddNewObjRs("NomeUsuario") = NomeUsuarioObjRs.Update '==============================='Neste momento o autoincremento do banco será ativado e o valor recordset atualizado.'===============================cd_usuario = ObjRs("cd_usuario")ObjRs.CloseObjConn.CloseSet ObjConn = nothing

Daí em diante, basta você trabalhar com variavel cd_usuario, sem precisar fazer qualquer pesquisa, já que estamos trabalhando com recordset "Optmistisc", ou seja, que "enxerga" as alterações efetuadas no banco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.