CADASTRO NOVO PUXAR O ID DO BANCO DE DADOS
Bom Dia Pessoal, Olha eu de volta.
Bom meu problema é o seguinte tenho um sistema que estou terminando com banco de dados em access e conexão ADO.
eu queria saber como faço para quando abro o meu form de cadastro como novo usuário ele apareça na minha textbox ID o id do banco de dados automático.
Pois só funciona quando vou alterar alguém ai sim quando pesquiso e puxo o cadastro de volta para o form ai vem o numero do ID.
Muito obrigado pela ajuda pessoal
Bom meu problema é o seguinte tenho um sistema que estou terminando com banco de dados em access e conexão ADO.
eu queria saber como faço para quando abro o meu form de cadastro como novo usuário ele apareça na minha textbox ID o id do banco de dados automático.
Pois só funciona quando vou alterar alguém ai sim quando pesquiso e puxo o cadastro de volta para o form ai vem o numero do ID.
Muito obrigado pela ajuda pessoal
O problema está na consulta que tu faz.
Ai é onde vai retornar todos os dados
da consulta.
Pode olhar está na sua pesquisa sql.
é bem simples.
[txt-color=#e80000]Max(Id)[/txt-color] traz o último registro.
Ai é onde vai retornar todos os dados
da consulta.
Pode olhar está na sua pesquisa sql.
é bem simples.
[txt-color=#e80000]Max(Id)[/txt-color] traz o último registro.
FEEHPEREZ,
Quando o usuário abre um novo registro, mas NÃO gravou ainda, e já tem o novo ID lá no form ...
... okay ...
... mas o que acontece se o usuário desistir de gerar um novo cadastro? O [Ô]ID[Ô] é perdido ou reaproveitado?
Tipo ... você pode fazer de duas (ou mais) formas:
1 - Colocar o campo com [Ô]autonumber[Ô] e salvar o registro [Ô]em branco[Ô], daà você coloca uma flag tipo caractere de 1 com os valores discretos. Exemplo:
[Ô]C[Ô] - Confirmar que o ID foi realmente utilizado e está em uso.
[Ô]B[Ô] - Está em branco e pode ser usado por qualquer pessoa.
[Ô]R[Ô] - Acabou de ser reservado e não pode ser utilizado (porém ainda está em branco) ... caso o usuário desista de usar, precisa voltar para o estado [Ô]B[Ô];
[Ô]D[Ô] - Registro DELETADO, só é mantido no banco para preservar a compatibilidade, mas não deve aparecer na tela e nem nos relatórios. Somente aparece em relatórios especÃficos.
2 - Gerenciar o número do ID, mostrando ao usuário os números disponÃveis. Caso dois usuários peguem o mesmo número ao mesmo tempo é preciso ver quem reservou primeiro e pedir ao segundo uma nova escolha.
Mas para facilitar:
- Você não pode mostrar para o usuário o ID somente depois dele ter confirmado a gravação no banco de dados?
[][ô]s,
Tunusat.
Quando o usuário abre um novo registro, mas NÃO gravou ainda, e já tem o novo ID lá no form ...
... okay ...
... mas o que acontece se o usuário desistir de gerar um novo cadastro? O [Ô]ID[Ô] é perdido ou reaproveitado?
Tipo ... você pode fazer de duas (ou mais) formas:
1 - Colocar o campo com [Ô]autonumber[Ô] e salvar o registro [Ô]em branco[Ô], daà você coloca uma flag tipo caractere de 1 com os valores discretos. Exemplo:
[Ô]C[Ô] - Confirmar que o ID foi realmente utilizado e está em uso.
[Ô]B[Ô] - Está em branco e pode ser usado por qualquer pessoa.
[Ô]R[Ô] - Acabou de ser reservado e não pode ser utilizado (porém ainda está em branco) ... caso o usuário desista de usar, precisa voltar para o estado [Ô]B[Ô];
[Ô]D[Ô] - Registro DELETADO, só é mantido no banco para preservar a compatibilidade, mas não deve aparecer na tela e nem nos relatórios. Somente aparece em relatórios especÃficos.
2 - Gerenciar o número do ID, mostrando ao usuário os números disponÃveis. Caso dois usuários peguem o mesmo número ao mesmo tempo é preciso ver quem reservou primeiro e pedir ao segundo uma nova escolha.
Mas para facilitar:
- Você não pode mostrar para o usuário o ID somente depois dele ter confirmado a gravação no banco de dados?
[][ô]s,
Tunusat.
TUNUSAT.
Sim seria muito melhor se o ID aparecesse apenas depois de clicar no cmdgravar, pois ai viria a impressão onde preciso desse numero na folha.
como posso fazer isso?
Sim seria muito melhor se o ID aparecesse apenas depois de clicar no cmdgravar, pois ai viria a impressão onde preciso desse numero na folha.
como posso fazer isso?
Eu vou tentar explicar de forma mais simples, quando o campo é autonumeração ele não gera o ID ao se abrir a planilha, e somente quando esta é salva, como dito pelo colega tunusat, isso é para evitar que dois usuários usem o mesmo ID.
Bom uma vez quando precisei disto e para evitar erros procedi da seguinte forma:
* O campo ID criei como numero, e não autonumeração;
* ao abrir o formulario, eu pegava o ultimo ID + 1 para gerar o proximo ID (ex: select max(ID) + 1 As proxnum from tabela)
* de imediato salvava na tabela somente este ID, os demais campos ficavam em branco;
* o numero do ID gerado e ja salvo na tela era usado para atualizar aquele id, então o botão salvar era um update.
da maneria descrita acima o codigo funcionava bem ou seja se você abrir o formulário por exemplo aparecerá no campo ID o numero do seu ID ex: (03) e se outro funcionario abrir este formulario em outro computador pra ele vai aparecer 04, pois o 03 ja ficou para seu uso.
veja só isso não é regra foi apenas uma maneira de acertar a programação, na época eu achava que precisava saber o id, hoje não uso mais isso todos meus códigos possuem um campo autonumeração, que não é exibido.
Bom uma vez quando precisei disto e para evitar erros procedi da seguinte forma:
* O campo ID criei como numero, e não autonumeração;
* ao abrir o formulario, eu pegava o ultimo ID + 1 para gerar o proximo ID (ex: select max(ID) + 1 As proxnum from tabela)
* de imediato salvava na tabela somente este ID, os demais campos ficavam em branco;
* o numero do ID gerado e ja salvo na tela era usado para atualizar aquele id, então o botão salvar era um update.
da maneria descrita acima o codigo funcionava bem ou seja se você abrir o formulário por exemplo aparecerá no campo ID o numero do seu ID ex: (03) e se outro funcionario abrir este formulario em outro computador pra ele vai aparecer 04, pois o 03 ja ficou para seu uso.
veja só isso não é regra foi apenas uma maneira de acertar a programação, na época eu achava que precisava saber o id, hoje não uso mais isso todos meus códigos possuem um campo autonumeração, que não é exibido.
FEEHPEREZ,
Se você quiser usar o [Ô]autonumber[Ô], você grava o registro e depois precisa lê-lo novamente em seguida. Então de qualquer maneira você precisa de uma chave primária, pois precisa recuperar EXATAMENTE o registro que acabou de salvar. Isto é complicado, pois se dois usuários em máquinas diferentes clicarem no botão [Ô]salvar[Ô] ao mesmo tempo, o [Ô]autonumber[Ô] fará o trabalho dele NÃO deixando de forma alguma que o número de ID seja igual, mas como recuperar a informação? Daà você precisa de algo como um [Ô]RG[Ô], um [Ô]CPF[Ô] ou uma data+hora+minuto+ segundo da gravação gravado em algum registro da tabela do banco de dados. Se você conseguir ter uma chave primária para sua tabela nem precisa de um [Ô]autonumber[Ô].
Detalhe: Não dá para reaproveitar numeração no [Ô]autonumber[Ô].
http://info.abril.com.br/forum/viewtopic.php?p=22234
O tipo Autonumeração é consecutivo, embora, quando for excluÃdo um registro o mesmo não será reutilizado.
Os campos AutoNumeração não podem ser atualizados. O que é possÃvel é reiniciar o valor de um campo autonumeração após inserir e excluir todos os registros de uma tabela.
Se não havia registros na tabela quando compactar o banco de dados, o valor de AutoNumeração do próximo registro adicionado será redefinido como 1.
[][ô]s,
Tunusat.
Se você quiser usar o [Ô]autonumber[Ô], você grava o registro e depois precisa lê-lo novamente em seguida. Então de qualquer maneira você precisa de uma chave primária, pois precisa recuperar EXATAMENTE o registro que acabou de salvar. Isto é complicado, pois se dois usuários em máquinas diferentes clicarem no botão [Ô]salvar[Ô] ao mesmo tempo, o [Ô]autonumber[Ô] fará o trabalho dele NÃO deixando de forma alguma que o número de ID seja igual, mas como recuperar a informação? Daà você precisa de algo como um [Ô]RG[Ô], um [Ô]CPF[Ô] ou uma data+hora+minuto+ segundo da gravação gravado em algum registro da tabela do banco de dados. Se você conseguir ter uma chave primária para sua tabela nem precisa de um [Ô]autonumber[Ô].
Detalhe: Não dá para reaproveitar numeração no [Ô]autonumber[Ô].
http://info.abril.com.br/forum/viewtopic.php?p=22234
O tipo Autonumeração é consecutivo, embora, quando for excluÃdo um registro o mesmo não será reutilizado.
Os campos AutoNumeração não podem ser atualizados. O que é possÃvel é reiniciar o valor de um campo autonumeração após inserir e excluir todos os registros de uma tabela.
Se não havia registros na tabela quando compactar o banco de dados, o valor de AutoNumeração do próximo registro adicionado será redefinido como 1.
[][ô]s,
Tunusat.
Particulamente gosto muito da forma que é feita nesse código fonte... dê uma olhadinha...
http://www.vbmania.com.br/pages/index.php?varModulo=Detalhe&varID=2183
http://www.vbmania.com.br/pages/index.php?varModulo=Detalhe&varID=2183
gostaria de saber como posso fazer o código para a cada clique no botão ele me mostrar na textbox o numero somado com mais um.
não estou conseguindo essa formula
não estou conseguindo essa formula
assim
sql = [Ô]select max(ID) + 1 As proxnum from tabela[Ô]
Set rs = cnn.Execute(sql)
txtId.Text = rs!proxnum
sql = [Ô]select max(ID) + 1 As proxnum from tabela[Ô]
Set rs = cnn.Execute(sql)
txtId.Text = rs!proxnum
Bom já precisei usar a rotina abaixo porque um cliente precisou e funcionou legal, mas se te ajudar segue a mesma. Porem não aconselho muito dependendo da massa de dados pode causar um pouco de lentidão.
Para chamar o processo é só fazer assim
Variável = NovoID
[ô]Essa funcção serve para capturar o próximo número disponÃvel. Exemplo:
[ô]----------------------------------------------------------------------------------
[ô]Tenho 0 registro na tabela a funcção retorna 1
[ô]----------------------------------------------------------------------------------
[ô]Tenho 3 registro na tabela na seguinte sequencia
[ô]1
[ô]2
[ô]4
[ô]A função retorna o 3
[ô]----------------------------------------------------------------------------------
[ô]Tenho 3 registro na tabela na seguinte sequencia
[ô]1
[ô]2
[ô]3
[ô]A função retorna o 4
[ô]Não aconselho muito a utilizar essa, mas caso queira!
Public Function NovoID() As Long
Dim vTamTab As Long, X As Long
Dim rst As New ADODB.RecordSet
rst.Open [Ô]SELECT ID FROM SuaTabela ORDER BY ID[Ô], SeuObjetoConnection
If rst.RecordCount = 0 Then
NovoID = 1
rst.Close: Set rst = Nothing
Exit Function
Else
rst.MoveFirst
vTamTab = rst.RecordCount
For X = 1 To vTamTab
If CLng(rst([Ô]ID[Ô]).Value) <> X Then
Exit For
End If
rst.MoveNext
DoEvents
Next X
NovoID = X
rst.Close: Set rst = Nothing
End If
End Function
[ô]Esse aqui independente de das sequencias vai sempre ser o maior
[ô]Mas esse processo deve ser utilizado na hora de gravar ou da maneira que o MARCELO mencionou!
Public Function NovoID() As Long
Dim rst As New ADODB.RecordSet
rst.Open [Ô]SELECT (Max(ID) + 1) As ID FROM SuaTabela[Ô], SeuObjetoConnection
If rst.RecordCount = 0 Or CLng(rst([Ô]ID[Ô])) = 0 Then
NovoID = 1
rst.Close: Set rst = Nothing
Exit Function
Else
NovoID = CLng(rst([Ô]ID[Ô]))
rst.Close: Set rst = Nothing
End If
End Function
Para chamar o processo é só fazer assim
Variável = NovoID
Tópico encerrado , respostas não são mais permitidas