PEGAR ID DE REGISTRO ANTES DE GRAVAR NO BANCO
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:
Como fazer isso com OLEDB em um banco Access?
Desde já grato!
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!
rapaizzzz....isso trabalhando em rede dá pau de duplicate Key....
Procure ler um pouco sobre relacionamentos entre tabelas.
Pesquise,depois....ai vai começar a entender.
Pesquise,depois....ai vai começar a entender.
[ô]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())
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.
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...)
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...)
Amigo, conforme resposta acima o
@@IDENTITY
garante isso que você quer!
@@IDENTITY
garante isso que você quer!
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.
Obrigado a todos que me ajudaram aqui!
JABA, perfeito! Obrigado!
JABA, perfeito! Obrigado!
Tópico encerrado , respostas não são mais permitidas