PEGAR ID DE REGISTRO ANTES DE GRAVAR NO BANCO

MARCELODAVID 10/07/2015 14:11:18
#448668
Bom dia amigos!
Continuando com as minhas [Ô]noobices[Ô] no VB.NET, vamos a mais uma dúvida...

Como pegar a chave primária de um registro antes do registro ser gravado?

Por exemplo: se precisarmos gravar informações em duas tabelas ao mesmo tempo, onde um registro
precise da chave primária do outro...

Usando recordset no DAO/ADO em vb6 isso é moleza, basta fazer isso:


rs.AddNew [txt-color=#007100][ô]rs é um recordset qualquer[/txt-color]
rs!Cliente = txtCliente.Text
intId = rs!IdCliente [txt-color=#007100][ô]intId uma variavel integer qualquer. Aqui, já tenho a minha disposição a chave primária, mesmo antes do update[/txt-color]
rs.Update [ô]Grava as informações


Como fazer isso com OLEDB em um banco Access?

Desde já grato!
F001E 10/07/2015 15:35:58
#448673
rapaizzzz....isso trabalhando em rede dá pau de duplicate Key....
OMAR2011 10/07/2015 16:01:18
#448674
Procure ler um pouco sobre relacionamentos entre tabelas.
Pesquise,depois....ai vai começar a entender.
JABA 10/07/2015 16:14:04
#448676
Resposta escolhida
[ô]Instancie a conexão
OleDbConnection _connection = new OleDbConnection(_connectionString);

[ô]Instancie o objeto DbCommand passando como parâmetro a query de insert e o objeto de conexão
OleDbCommand _command = new OleDbCommand(_queryInsert.ToString(),_connection);

[ô]Abra a conexão e execute o comando de insert
_connection.Open();
_command.ExecuteNonQuery();

[ô]Determine a query que seleciona o identificador do registro inserido
_command.CommandText = [Ô]SELECT @@IDENTITY[Ô]; [ô]Aqui é onde pega o ID

MsgBox([Ô]O id após a inserção é: [Ô] & _command.ExecuteScalar().ToString())


KERPLUNK 10/07/2015 19:31:35
#448682
Bem, até é possível fazer algo parecido com isso no .NET. A pergunta é: Porque? A primeira impressão que se tem do .NET quando se vem do VB6 é que tudo é mais trabalhoso, tudo tem mais código. Bem, sim e não. Veja bem esse caso que você apresentou. Com VB6, 2 ou 3 comandos e pronto o que você queria fazer está feito. Com .NET isso teria que ter alguns comandos a mais, alguns objetos a mais para se ter o mesmo efeito. O fato é que a forte orientação à objeto faz com que tudo fique muito mais específico, justamente para poder ter maior reaproveitamento de código. Acredite, você pode fazer classes representativas de seus objetos(tabelas), que chamamos entidade, à qual herda uma única outra classe e TODAS as funcionalidades básicas de inserção, deleção, atualização e consulta estarão disponíveis. Então com isso, você vai ter que daí em diante fazer somente as classes entidades herdando essa classe genérica de CRUD e pronto, você não precisa fazer mais nada. E mais, essa classe genérica pode ser adaptável para múltiplos bancos de dados e com detecção automática, facilitando ainda mais. Depois disso, suas entidades podem ser estendidas e inclusive isso pode ser reaproveitado.
MARCELODAVID 10/07/2015 22:38:42
#448683
Obrigado a todos que estão me respondendo...
Sobre relação entre tabelas isso é tranquilo pra mim...

Imaginemos o senário:

Tenho uma tabela qualquer...
Preciso que ao inserir um novo registro,
o id (auto-incremento) do registro criado
seja exibido, informando que aquele novo
registro recebeu o id...

Mas se tivermos dois usuários inserindo dados
ao mesmo tempo, pode ser um usuário pegue o id
do outro... E isso irá causar o que o F001E disse...

Preciso garantir que o id exibido seja o id do registro inserido
pelo seu respetivo usuário.

JABA, já vou testar seu código. Mas por desencargo de consciência,
seu exemplo faz isso que mencionei?

Grato meus amigos!

(Estou vindo do Access/VBA - VB6, por isso tanta dúvida...)
JESUEL.OLIVEIRA 11/07/2015 12:04:47
#448688
Amigo, conforme resposta acima o

@@IDENTITY

garante isso que você quer!
JABA 11/07/2015 15:35:36
#448691
Citação:

JABA, já vou testar seu código. Mas por desencargo de consciência,
seu exemplo faz isso que mencionei?



Sim MARCELODAVID, é exatamente o que você precisa.
MARCELODAVID 11/07/2015 22:40:07
#448699
Obrigado a todos que me ajudaram aqui!

JABA, perfeito! Obrigado!
Tópico encerrado , respostas não são mais permitidas