Numero Automatico no Delphi com firebird
Galera,
Meu problema é o seguinte eu tenho uma cadastro que faço no Delphi eu preciso colocar um numero de controle nesse cadastro mas esse nuemro de controle tem que ser automatico tipo 1,2,3,4,5,6 sem que eu digite, eu estou usando o BD Firebird e não sei como definir meu campo no Bd.
Alguem poderia me ajudar ?
Obrigado
Meu problema é o seguinte eu tenho uma cadastro que faço no Delphi eu preciso colocar um numero de controle nesse cadastro mas esse nuemro de controle tem que ser automatico tipo 1,2,3,4,5,6 sem que eu digite, eu estou usando o BD Firebird e não sei como definir meu campo no Bd.
Alguem poderia me ajudar ?
Obrigado
Cleiflavio
Curtidas 0
Respostas
álison Bissoli
08/08/2008
utilize no banco o tipo de dado integer
no evento onbeforepost do clientdataset faça um
select count(campo_sequencial) from nome_da_tabela e
alimente o campo sequencial do clientdataset com o resultado da pesquisa
+ 1.
se precisar de maiores detalhes me fala ok
no evento onbeforepost do clientdataset faça um
select count(campo_sequencial) from nome_da_tabela e
alimente o campo sequencial do clientdataset com o resultado da pesquisa
+ 1.
se precisar de maiores detalhes me fala ok
GOSTEI 0
Cleiflavio
08/08/2008
Valeuuu deu certo
GOSTEI 0
Thomaz_prg
08/08/2008
[quote:5f8f4e217c=´Álison Bissoli´]select count(campo_sequencial) from nome_da_tabela e
alimente o campo sequencial do clientdataset com o resultado da pesquisa[/quote:5f8f4e217c]
Amigo não use o Count. Se quiser pode até usar o MAX, mas NUNCA count. COUNT retorna a quantidade de registros.
Suponhamos o seguinte, vc inseriu 3 registros, ficando na tabela assim:
sequencia - outros dados
1 - .....
2 - .....
3 - .....
e então exclui o penultimo registro, ou seja, o 2, ficando assim:
sequencia - outros dados
1 - .....
3 - .....
Ao efetuar a consulta, o count irá retornar 2, que, somando +1, seria 3. Ao inserir, se o campo sequencial for uma chave primária ou chave única, vai dar um erro de violação, se não for, vc ficará com 2 registros com o campo sequencial sendo 3.
Na verdade, eu nem indicaria o MAX, mas sim, o uso de um generator. Isso pq se vc for pegar o valor antes de gravar o registro, se seu sistema for usado em rede, pode ser que tanto vc quanto outro usuário abram a tela de cadastro ao mesmo tempo, pegando o mesmo valor de MAX, o que dará erro. Isso com um generator não acontece.
alimente o campo sequencial do clientdataset com o resultado da pesquisa[/quote:5f8f4e217c]
Amigo não use o Count. Se quiser pode até usar o MAX, mas NUNCA count. COUNT retorna a quantidade de registros.
Suponhamos o seguinte, vc inseriu 3 registros, ficando na tabela assim:
sequencia - outros dados
1 - .....
2 - .....
3 - .....
e então exclui o penultimo registro, ou seja, o 2, ficando assim:
sequencia - outros dados
1 - .....
3 - .....
Ao efetuar a consulta, o count irá retornar 2, que, somando +1, seria 3. Ao inserir, se o campo sequencial for uma chave primária ou chave única, vai dar um erro de violação, se não for, vc ficará com 2 registros com o campo sequencial sendo 3.
Na verdade, eu nem indicaria o MAX, mas sim, o uso de um generator. Isso pq se vc for pegar o valor antes de gravar o registro, se seu sistema for usado em rede, pode ser que tanto vc quanto outro usuário abram a tela de cadastro ao mesmo tempo, pegando o mesmo valor de MAX, o que dará erro. Isso com um generator não acontece.
GOSTEI 0
Ricknetbr
08/08/2008
O Firebird possibilita a criacao de triggers para esse proposito.
Verifique a documentacao
Verifique a documentacao
GOSTEI 0
álison Bissoli
08/08/2008
nus....
errei feio
desculpa aí
era pra eu ter colocado MAX mesmo e coloquei count...
errei feio
desculpa aí
era pra eu ter colocado MAX mesmo e coloquei count...
GOSTEI 0