evertonviana Postado Março 4, 2010 Denunciar Share Postado Março 4, 2010 Galera, Mais uma vez eu perturbando... Situação: Usuário acaba de inserir um registro no BD, que gerou uma nova entrada (ID) é redirecionado para uma tela de informação "Registro Inserido". A Idéia é após "Registro Inserido", aparecer o numero de Identificação desse registro. Como faz? Link para o comentário Compartilhar em outros sites More sharing options...
0 Leandro_SM Postado Março 4, 2010 Denunciar Share Postado Março 4, 2010 Ai você terá que fazer uma leitura normal mesmo, porem organizando o id em ordem decrecente, mais ou menos assim:'selecionando apenas 1 registro na ordem decrecente, que logicamente é o ultimo id cadastrado.'você pode fazer isso logo que acabar de gravar os dados do usuario.sql = "Select TOP 1 * from USUARIOS order by ID_USUARIO desc" set rs = conexao.execute(sql)ultimo_id = RS("id_usuario")estou imaginando que você já tenha a conexao com o banco criada...Abração! Link para o comentário Compartilhar em outros sites More sharing options...
0 fercosmig Postado Março 4, 2010 Denunciar Share Postado Março 4, 2010 que bd você usa?olha um exemplo com SQL server:CREATE PROCEDURE dbo.PRC_INSERE_TESTE @campo1 as blá blá blá, @campo2 as blá blá blá, @campo3 as blá blá blá, @int_Identity INT OUTPUT AS INSERT INTO dbo.TABELA ( campo1, campo2, campo3 ) VALUES ( @campo1, @campo2, @campo3 ) SET @int_Identity = (SELECT @@IDENTITY) RETURN no exemplo acima a tabela tem um campo auto increment (identity). ná página vSql = "dbo.PRC_INSERE_TESTE" Set cmd = Server.CreateObject("ADODB.Command") With cmd .ActiveConnection = objConn .Commandtext = vSql .CommandType = 4 .Parameters.Append .CreateParameter("@campo1", 9, 9, 9, var1) 'onde está 9 você deve colocar os paremetros de acordo com sua tabela .Parameters.Append .CreateParameter("@campo2", 9, 9, 9, var2) .Parameters.Append .CreateParameter("@campo3", 9, 9, 9, var3) .Parameters.Append .CreateParameter("@Id", 9, 9, 9) .Execute retCount = .Parameters("@Id") End with Response.Write("Id gerado no DB = " & retCount)relação de parametros Link para o comentário Compartilhar em outros sites More sharing options...
0 .Andreia. Postado Março 4, 2010 Denunciar Share Postado Março 4, 2010 Se for SQL SERVER, te indico o SCOPE_IDENTITY() que é mais seguro.@@IDENTITY= retorna o último valor identity inserido em qualquer tabela desde que seja na sessão corrente.IDENT_CURRENT() = retorna o último valor identity inserido em uma determinada tabela em qualquer sessão ou escopo.SCOPE_IDENTITY() = limitado a um escopo e com isso retornará o último valor identity inserido dentro do escopo de um determinado batch.Fonte: http://www.mcdbabrasil.com.br/modules.php?...icle&sid=59 Link para o comentário Compartilhar em outros sites More sharing options...
0 evertonviana Postado Março 5, 2010 Autor Denunciar Share Postado Março 5, 2010 Ai você terá que fazer uma leitura normal mesmo, porem organizando o id em ordem decrecente, mais ou menos assim:'selecionando apenas 1 registro na ordem decrecente, que logicamente é o ultimo id cadastrado.'você pode fazer isso logo que acabar de gravar os dados do usuario.sql = "Select TOP 1 * from USUARIOS order by ID_USUARIO desc" set rs = conexao.execute(sql)ultimo_id = RS("id_usuario")estou imaginando que você já tenha a conexao com o banco criada...Abração!Leandro_SM:Sim pensei fazer dessa maneira, mas imaginei a aplicação funcionando e varias pessoas realizando inserções no BD ao mesmo tempo, se eu inserir uma entrada junto com você será que não daria algum tipo de conflito, na hora de recuperar esse registro para mostrar na tela?Fercosmig:Estou usando um MDB até terminar a criação da aplicação, posteriormente outra pessoa fará a conversão para SQL(não domino)... Como você sugere em MDB? Link para o comentário Compartilhar em outros sites More sharing options...
0 bareta Postado Março 5, 2010 Denunciar Share Postado Março 5, 2010 quanto a inserção ao mesmo tempo, use o aplicattion lock e unlock.mysqlEsqueça MAX() +1 , ORDER BY chave DESC LIMIT 1, SHOW TABLE STATUS, entre outros… Segue abaixo uma das melhores formas para se fazer isso: 1 INSERT INTO tabela (chave_primaria, coluna1, coluna2) VALUES (null, ‘aaa‘, ‘bbb‘); 2 SELECT LAST_INSERT_ID() INTO @ID; 3 INSERT INTO outratabela (chave_estrangeira, coluna3, coluna4) VALUES (@id, ‘xxx‘, ‘yyy‘); 4 INSERT INTO outratabela (chave_estrangeira, coluna3, coluna4) VALUES (@id, ‘www‘, ‘zzz‘); 5 INSERT INTO outratabela (chave_estrangeira, coluna3, coluna4) VALUES (@id, ‘uuu‘, ‘iiii‘); Desta forma você tem 100% de eficiência na recuperação do ID, não tendo problemas em capturar um ID recém-inserido por outro usuário. Com LAST_INSERT_ID() você estará recuperando sempre o último ID gerado pela sua sessão. Se você estiver usando INNODB engine, ainda pode trabalhar com transações adicionando os comandos START TRANSACTION e COMMIT para ter total integridade dos dados. access <!--#include file=adovbs.inc --> <% Set objConn = CreateObject("ADODB.Connection") Set objRS = CreateObject("ADODB.Recordset") objConn.Open "DSN=advworks;" 'Access does not support a cursor engine so a client cursor must be used objRS.CursorLocation = adUseClient objRS.Open "SELECT * FROM Customers", objConn, adOpenStatic, adLockOptimistic ' when you invoke the method AddNew it adds a new record to the end of ' your current recordset and places your cursor on that record. objRS.AddNew objRS("CompanyName") = "Microsoft" objRS("ContactFirstName") = "Bob" objRS("ContactLastName") = "Smith" objRS.Update ' when you invoke the method Update, it updates the database with the ' values of the new record that we just created. To retrieve the ' value of the Autonumber field we need to update the ADO recordset that ' currently have. ' When you do a Requery on your recordset, you lose your cursor. So ' we need to store the location before we do the Requery, then reset ' it after the Requery. 'before the requery, the Autonumber field shows as 0 Response.Write "<br>ID before Requery = " & objRS("CustomerID") bookmark = objRS.absolutePosition ' First, store the location of you cursor objRS.Requery ' Next, update your recordset with the data from the database 'after the requery, the absolutePosition is the first record of the recordset Response.Write "<br>ID before setting absolutePosition = " & objRS("CustomerID") objRS.absolutePosition = bookmark ' Finally, change your cursor back 'now we have the Autonumber value Response.Write "<P>Added ID = " & objRS("CustomerID") objRS.Close objConn.Close set objConn = nothing set objRS = nothing %> Link para o comentário Compartilhar em outros sites More sharing options...
0 evertonviana Postado Março 8, 2010 Autor Denunciar Share Postado Março 8, 2010 Bareta,Mas utilizando o Application Lock eu estaria "travando" essa opção de inserção, para evitar simultaniedade? Estou me baseado nessa explicação: http://imasters.uol.com.br/artigo/1749/asp...to_application/ Caso sim, não seria muito legal, pois os usuário teriam de esperar um outro operador terminar de cadastrar, para poder ai então voltar a cadastrar. certo?Teria alguma outra maneira? Link para o comentário Compartilhar em outros sites More sharing options...
0 bareta Postado Março 8, 2010 Denunciar Share Postado Março 8, 2010 exatamente isso. Link para o comentário Compartilhar em outros sites More sharing options...
0 evertonviana Postado Março 8, 2010 Autor Denunciar Share Postado Março 8, 2010 exatamente isso.alguém tem outra sugestão? Link para o comentário Compartilhar em outros sites More sharing options...
0 bareta Postado Março 8, 2010 Denunciar Share Postado Março 8, 2010 veja que essa espera não é da forma que você pensa...locksql="insert ...."unlock Link para o comentário Compartilhar em outros sites More sharing options...
0 evertonviana Postado Abril 8, 2010 Autor Denunciar Share Postado Abril 8, 2010 veja que essa espera não é da forma que você pensa...locksql="insert ...."unlockbareta,Desculpe minha enorme ignoracia, mas não consegui operar da maneira acima, como ficaria esse código:'Trava ação para que não haja colisao lock sql = "select TOP 1 * from atendimento order by codigo_atend desc" Set mostra = Server.CreateObject("ADODB.Recordset") mostra.open sql, conex, 3,3 'Destrava ação para uso de outro usuario unlock Link para o comentário Compartilhar em outros sites More sharing options...
0 bareta Postado Abril 9, 2010 Denunciar Share Postado Abril 9, 2010 http://pt.how-to.mobi/index.php?id=170458basicamente isso...eu tinha visto em alguns casos aqui.... bom não sei se vai resolve... mais é uma ideia.... pois na verdade me enganei um pouco. Link para o comentário Compartilhar em outros sites More sharing options...
0 evertonviana Postado Abril 20, 2010 Autor Denunciar Share Postado Abril 20, 2010 É não funciona como eu precisaria...Mas se alguém souber de outra maneira, ainda preciso!Obrigado! Link para o comentário Compartilhar em outros sites More sharing options...
0 bareta Postado Abril 20, 2010 Denunciar Share Postado Abril 20, 2010 creio que seja isto:http://databases.aspfaq.com/general/how-do...i-inserted.htmlbom não testei mais aparentemente deve funcionar. Link para o comentário Compartilhar em outros sites More sharing options...
0 evertonviana Postado Julho 23, 2010 Autor Denunciar Share Postado Julho 23, 2010 Bem, só para fechar, acabei fazendo como o Leandro SM sugeriu!Abraços! Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
evertonviana
Galera,
Mais uma vez eu perturbando...
Situação:
Usuário acaba de inserir um registro no BD, que gerou uma nova entrada (ID) é redirecionado para uma tela de
informação "Registro Inserido".
A Idéia é após "Registro Inserido", aparecer o numero de Identificação desse registro.
Como faz?
Link para o comentário
Compartilhar em outros sites
14 respostass a esta questão
Posts Recomendados