Reaproveitar codigos
Como eu faço via SQL, para reaproveitar codigos q não existem mais?
Ex: Eu tenho uma tabela com 100 codigos, esses codigos são autoincremento, e vamos supor que o codigo 50 é apagado.
Como eu faço pra sugerir o codigo 50 na próxima vez?
No Aguardo
Bruno Bacelar
Ex: Eu tenho uma tabela com 100 codigos, esses codigos são autoincremento, e vamos supor que o codigo 50 é apagado.
Como eu faço pra sugerir o codigo 50 na próxima vez?
No Aguardo
Bruno Bacelar
Blbacelar
Curtidas 0
Respostas
Silviogs
01/04/2005
Olá
voce pode criar o loop com um contador e verificar se o numcontador é igual ao valor do código na sua tabela, caso a contagem seja interrompida esse é o codigo que deseja usar:
EX: for i := 1 to tabela.recordcount do
if i = tabelacodigo.value then
tabela.next
else begin
tabela.insert;
tabelacodigo.value := i;
tabela.post;
end;
Obs: não sei se é isto? qualquer dúvida estamos aí!
Atenciosamente
Silvio Guedes
voce pode criar o loop com um contador e verificar se o numcontador é igual ao valor do código na sua tabela, caso a contagem seja interrompida esse é o codigo que deseja usar:
EX: for i := 1 to tabela.recordcount do
if i = tabelacodigo.value then
tabela.next
else begin
tabela.insert;
tabelacodigo.value := i;
tabela.post;
end;
Obs: não sei se é isto? qualquer dúvida estamos aí!
Atenciosamente
Silvio Guedes
GOSTEI 0
Blbacelar
01/04/2005
Eu acho q isso funcionaria, mas tornaria o sitema muito lerdo....
não teria como fazer por SQL?
não teria como fazer por SQL?
GOSTEI 0
Beppe
01/04/2005
Tem quem ache isto útil http://forum.clubedelphi.net/viewtopic.php?t=59666&highlight=repovoar
GOSTEI 0
Motta
01/04/2005
Sendo uma chave artificial e não tendo nenhuma restrição leagl (apólices de seguro não podem ter saltos) não vejo o problema de ter ´banguelas´ , reutilizar a chave pode dar confusão dependendo do negócio, algum documento foi emitido com dados do código antigo e os dados não vão bater com os do novo.
Nos casos em que não pode ´pular´ a melhor solução é a próxima chave ser a última mais um , mais isto pode gerar problemas de deadlock e a implementação precisa ser cuidadosa.
Não dá para buscar os não existente num sql, mas a ideia da tabela auxiliar do outro link funciona.
Nos casos em que não pode ´pular´ a melhor solução é a próxima chave ser a última mais um , mais isto pode gerar problemas de deadlock e a implementação precisa ser cuidadosa.
Não dá para buscar os não existente num sql, mas a ideia da tabela auxiliar do outro link funciona.
GOSTEI 0
Marco Salles
01/04/2005
Claro que dá pra repovoar os buracos, basta manter uma tabela com os IDs excluídos, usando generator apenas se ela estiver vazia.
Como assim Beppe :oops: :oops: :oops: :oops: :oops:
GOSTEI 0
Beppe
01/04/2005
[quote:9030ffb149=´Marco Salles´]
Como assim Beppe :oops: :oops: :oops: :oops: :oops:[/quote:9030ffb149]
Foi só uma idéia que nunca implementei, mas seria algo assim:
Espero não ter errado na sintaxe.
Sempre que você exluir um registro, vc adiciona seu ID na tabela auxiliar. Quando precisar de um ID, esta tabela é olhada primeiro, e se estiver vazia, o generator é usado.
Claro que dá pra repovoar os buracos, basta manter uma tabela com os IDs excluídos, usando generator apenas se ela estiver vazia.
Como assim Beppe :oops: :oops: :oops: :oops: :oops:[/quote:9030ffb149]
Foi só uma idéia que nunca implementei, mas seria algo assim:
set term ^ ; -- este generator é usado quando a tabela -- auxiliar estiver vazia create generator GEN1 ^ -- armazena IDs exluídos create table ID_GEN1 ( ID BIGINT ) ^ -- chame esta SP para obter um ID create procedure ObtemID returns (ID BIGINT) as begin ID = select first 1 ID from ID_GEN1; if ID = null then ID = gen_id(GEN1); end; suspend; end ^ set term ; ^
Espero não ter errado na sintaxe.
Sempre que você exluir um registro, vc adiciona seu ID na tabela auxiliar. Quando precisar de um ID, esta tabela é olhada primeiro, e se estiver vazia, o generator é usado.
GOSTEI 0
Marco Salles
01/04/2005
Veja bem se eu entendi a sua idéia
Nesse momento a tabela principal , continua Esta com um buraco. Mas não em Forma de Queijo Suico... Porque , ao se incluir um novo registro, esta tabela é Olhada Primeiro e neste caso a tabela volta a estar cheia...
Conclusão : Se eu entendi a sua idéia , a tabela principal ,podera ficar em forma de buracos(Quijo suiço) somente no caso de muitas exclusões ocorrem seguidamentes..
Vamos supor que se tenha : 1,2,3,5,6,7,8 e na tabela Auxiliar se tem 4
Nesse momento a tabela principal , continua Esta com um buraco. Mas não em Forma de Queijo Suico... Porque , ao se incluir um novo registro, esta tabela é Olhada Primeiro e neste caso a tabela volta a estar cheia...
TabPrincipal : 1,2,3,4,5,6,7,8 TabAux --->>> agora nao tem nada
Conclusão : Se eu entendi a sua idéia , a tabela principal ,podera ficar em forma de buracos(Quijo suiço) somente no caso de muitas exclusões ocorrem seguidamentes..
GOSTEI 0
Beppe
01/04/2005
Exatamente isso!
GOSTEI 0