SID_SILVA 0 Denunciar post Postado Agosto 6, 2008 Boa Noite Amigos Estou usando o ASP.NET 2.0 e tenho uma tabela de Pedidos (de um cliente) e outra de ItensPedidos(Itens comprados pelo cliente).Nessa segunda tabela eu preciso gravar o ID do pedido para que eu possa saber a quais pedidos determinados itens se referem. No momento da gravacao eu gravo primeiro os dados do pedido em uma tabela onde o ID do pedido e incremental e tambem e a chave primaria e depois eu gravo os itens do pedido. Pois bem, eu gostaria de saber se existe algum comando ou maneira simples que me permita pegar esse ID do pedido a fim de gravalo na tabela de Itens do Pedido. Essa duvida surgiu porque eu nao tenho diretamente o numero do ID do pedido quando ele e gravado, ja que e incremental. Sera que isso e facil? Muito Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Lab Design 0 Denunciar post Postado Agosto 6, 2008 SELECT @@identity AS lastID por exemplo Compartilhar este post Link para o post Compartilhar em outros sites
SID_SILVA 0 Denunciar post Postado Agosto 7, 2008 Ola novamente amigos. Segui sua sugestao Lab e fiz o seguinte: Aproveitando a conexao ainda aberta. Try 'Determine a query que seleciona o identificador do registro inserido cmd = New SqlCommand("SELECT @@IDENTITY", conexao) cmd.CommandType = CommandType.Text 'obtem o codigo do pedido que foi incluido na tabela Pedidos IdProjeto = cmd.ExecuteScalar() Catch ex As Exception 'lblMensagem.Text = "Erro ao acessar os dados : " & vbCrLf & ex.Message & vbCrLf & ex.InnerException.ToString Finally conexao.Close() End TryAte que funcionou sem erros, porem me retornou o ID=2,sendo que eu ja tenho 23 registros na minha tabela, logo deveria ter retornado o ID=24, uma que o campo ID da tabela e incremental. Um Abraco Compartilhar este post Link para o post Compartilhar em outros sites
Jeferson Raupp - RS 0 Denunciar post Postado Agosto 7, 2008 E ai SID, beleza? Cara tu tentou após o SELECT colocar a ordenação decrescente com o comando ORDER BY ID DESC? É isso ai, Abração! _________________________ -xX[Jeferson Raupp]Xx- Compartilhar este post Link para o post Compartilhar em outros sites
SID_SILVA 0 Denunciar post Postado Agosto 7, 2008 Obrigado por sua ajuda Jefferson Na verdade eu nao mandei ordenar e ai me vem a seguinte duvida. Se a criacao do ID e incremental, entao o ultimo ID gravado, deveria ter sempre o maior valor, logo seria sempre o ultimo, certo? Mandei ordenar e agora o ID e ID=0 E agora? Um Abraco Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Agosto 7, 2008 Deve ter feito algo errado para ter retornado 0, poste ae como você fez. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
SID_SILVA 0 Denunciar post Postado Agosto 7, 2008 Obrigado mais uma vez por sua ajuda QuinteLab. Analizando novamente a rotina resolvi mudar a ordem da rotina que pegava o ID desejado.Tenho duas tabelas uma de Pedidos e outra de Itens do Pedido.Eu havia mandado pegar o ID da tabela de pedidos apos mandar gravar os dados da tabela de Itens do Pedido, bastou colocar o comando para pegar o ID dos pedidos logo apos a gravacao dos dados dessa tabela que o problema aparentemente foi resolvido. Se bem que eu ainda tenho que observar melhor o funcionamento dessa rotina mas aqui estao os comandos que usei. Sql = "INSERT INTO PROJETOS PROJE_DESCRICAO,PROJE_HORASPREVISTAS,PROJE_FORMATO,PROJE_DOCUMENTO,ESPEC_ID ,PROJ E_PREVINI,PROJE_PREVFIM,PROJE_HORASCONSUMIDAS,GESTOR_ID,USER_ID,COLABOR_ID) " Sql = Sql & "VALUES ('" & TxtDescr.Text.Trim() & "','" Sql = Sql & TxtHorasPrevistas.Text.Trim() & "','" Sql = Sql & DropFormato.SelectedItem.Value & "','" Sql = Sql & TxtDocumento.Text.Trim() & "','" Sql = Sql & DropEspecialidade.SelectedItem.Value & "','" Sql = Sql & CDate(TxtInicioPrevisto.Text) & "','" Sql = Sql & CDate(TxtTerminoPrevisto.Text) & "','" Sql = Sql & TxtHorasConsumidas.Text & "','" Sql = Sql & DropNomeProjeto.SelectedItem.Value & "','" Sql = Sql & Session("User_ID") & "','" Sql = Sql & DropColaborador.SelectedItem.Value & "')" conexao.Open() cmd = New SqlCommand(Sql, conexao) cmd.ExecuteScalar() Try 'Determine a query que seleciona o identificador do registro inserido cmd = New SqlCommand("SELECT @@IDENTITY", conexao) cmd.CommandType = CommandType.Text 'obtem o codigo do pedido que foi incluido na tabela Pedidos IdProjeto = cmd.ExecuteScalar() Catch ex As Exception 'lblMensagem.Text = "Erro ao acessar os dados : " & vbCrLf & ex.Message & vbCrLf & ex.InnerException.ToString Finally conexao.Close() End Try Sql = "INSERT INTO REL_PROJETOS (PROJE_ID,USER_ID) " Sql = Sql & "VALUES ('" & DropNomeProjeto.SelectedItem.Value & "','" Sql = Sql & DropEspecialidade.SelectedItem.Value & "')" cmdRel = New SqlCommand(Sql, conexao) cmdRel.ExecuteNonQuery() Obrigado e um Abraco conexao.Close() Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Agosto 7, 2008 Resolvido então?? Compartilhar este post Link para o post Compartilhar em outros sites
Lab Design 0 Denunciar post Postado Agosto 7, 2008 SId olha o exemplo abaixo: Esse metodo eu uso num class em C# mas o conceito para Vb ou outra linguagem é o mesmo. public static int InsertFinanceiro(int idCongresso, string uf, string profissao) { int cCusto = 1; if (uf == "SP") cCusto = 4; else if (uf == "MG") cCusto = 3; else if (uf == "BA") cCusto = 2; decimal taxa = 100; if (profissao == "ESTUDANTE") taxa = taxa / 2; DateTime hoje = DateTime.Now; DateTime vcto = hoje.AddDays(4); DateTime validade = hoje.AddDays(365); // numdoc=id do associado + ano da validade string strVcto = String.Format("{0:MM.dd.yyyy}", vcto); string numdoc = idCongresso.ToString().PadLeft(5, '0') + String.Format("{0:yyyy}", validade); //Initialize command string sql1; string sql2; sql1 = "INSERT INTO associados(idCongresso, status, dataReg, validade) " + "VALUES(" + idCongresso + ", 0, getdate(), getdate())"; sql2 = "INSERT INTO financeiro(idCongresso, dataLct, numDoc, tipoDoc, conta, historico, valor, vcto, total, formaPgto, boleto, status, idCentroCusto, dataReg) " + "VALUES(" + idCongresso + ", getDate(), '" + numdoc + "', 2, 41101001, 'Taxa de Associado', " + taxa + ", '" + strVcto + "', " + taxa + ", 3, '" + numdoc + "', 2, " + cCusto + ", getDate())"; SqlConnection con = new SqlConnection(_connectionString); SqlCommand cmd = new SqlCommand(sql1, con); cmd.CommandType = CommandType.Text; using (con) { con.Open(); cmd.ExecuteNonQuery(); // grava o primeiro registro na tabela de associados cmd.CommandText = sql2; // atribui nova query cmd.ExecuteNonQuery(); // grava registro de tabela financeiro em contas a receber cmd.CommandText = "SELECT @@IDENTITY"; // nova query int idBoleto = Convert.ToInt32(cmd.ExecuteScalar().ToString()); // recupera o Id do boleto para montar o link para o usuario. return idBoleto; } } Compartilhar este post Link para o post Compartilhar em outros sites
SID_SILVA 0 Denunciar post Postado Agosto 8, 2008 Sim, funcionou Lab Design e muito obrigado novamente por ajuda. Vou analizar o seu exemplo para entender melhor desse assunto, pois eu acho que a minha solucao tem comandos demais. Obrigado novamente, um abraco e ate a proxima duvida que nao demorara muito para chegar. Compartilhar este post Link para o post Compartilhar em outros sites