Ir para conteúdo

POWERED BY:

Arquivado

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

SID_SILVA

[Resolvido] Pegar ID de Campo. logo apos a gravacao.

Recommended Posts

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

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 Try
Ate 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

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

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

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

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

×

Informação importante

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