AJUDA COM CAMPO CODIGO

LEANDRO.BUENO 07/06/2005 08:30:46
#87382
Amigos tenho o seguinte problema:
Digamos que meu programa tem 50 registros.
Quando o usuário inclui um novo registro, ele automaticamente, aumenta o campo código mais um.
Ex:
Call Limpar
inc = True
If voriginaisexternos.RecordCount <> 0 Then
voriginaisexternos.MoveLast
txtcodigo = voriginaisexternos!codoriginalexterno
Else
txtcodigo = 1
End If
Call Habilitar
txtcodigo = Val(txtcodigo) + 1
txtcodigo.Enabled = False
txtdocumento.SetFocus
Agora se o usuário exclui por exemplo o registro 15, o mesmo não existirá mais.
Eu gostaria de que cada vez quie o usuário excluisse um registro, os numeros continuassem em ordem. Ou seja se ele excluisse o 15, automaticamente todos diminuiriam um, e assim o 16 passaria a ser o 15, o 17 passaria a ser o 16 e assim vai.
Meu comando excluir é o seguinte:
On Error Resume Next
If Val(txtcodigo) = "1" Then
MsgBox "Não é Possível Excluir o Registro Primário", vbCritical
Else
Dim Mensagem, Botões, Title, Ctxt, Resposta, MyString
Mensagem = "Deseja Excluir?"
Botões = vbYesNo + vbCritical + vbDefaultButton2
Titulo = " CR DOC 1.0"
Resposta = MsgBox(Mensagem, Botões, Titulo, Help, Ctxt)
End If
If Resposta = vbYes Then
BeginTrans
voriginaisexternos.Delete
CommitTrans
Dim var_sql As Recordset
Set var_sql = bancodedados.OpenRecordset("select * from originaisexternos ")
Set Data1.Recordset = var_sql
Data1.Refresh
anterior = True
Call Atualizar
Else
Mensagem = "O Registro não foi Excluído"
End If
USUARIO.EXCLUIDOS 07/06/2005 08:34:54
#87383
Não sei se seria uma solução viável diminuir todos os códigos em um, por que, se você fizer isso, terá que alterar a mesma informação em TODAS AS TABELAS relacionadas à  essa entidade que você quer diminuir o campo da chave primária. Imagina que você tenha umas 6-10 tabelas relacionadas, você terá que fazer a operação de alteração do índice em todas elas! Vai dar um trabalhão!

O que você poderia fazer, seria, quando você for inserir um novo registro, você preencher o que fora deletado, usando o seu código, aí seria uma solução mais limpa e mais fácil...
LEANDRO.BUENO 07/06/2005 08:49:25
#87384
é verdade amigo,
tenhos programas que relacianão varias tabelas.. e também acho que seria um trabalhão, eu estava pensando, e não sei se tem como:
Criar uma nova tabela, onde todos os dados excluidos do programa fossem gravados lá não sei se da certo......
USUARIO.EXCLUIDOS 07/06/2005 10:57:04
#87410
ou ter dois campos
um chaveprimaria
e outro codigo
o chaveprimaria sera o relacionamento com a outra tabela e nao sera visivel ao usuario, então você pode alterar o campo codigo a vontade.
mas com isso voce tera um campo a mais na tabela, não sei se vai ajudar.
LEANDRO.BUENO 07/06/2005 13:51:21
#87461
sim é verdade willian...
Agora volto a primeira pergunta.
Como eu faço para que cada vez quie o usuário excluisse um registro, os numeros continuassem em ordem?
JEAN.JEDSON 07/06/2005 13:58:18
#87463
Resposta escolhida
bem... vc ainda precisará diminuir o código em todas as tabelas...
ou vc mantém da forma que está, e quando for incluir um novo registro, localize esta "folga" nos códigos, e no lugar de inserir o último código + 1, insira com o número que está faltando.
LEANDRO.BUENO 07/06/2005 14:08:06
#87465
sim amigo jean,
mas como eu localizaria essa folga.
JEAN.JEDSON 07/06/2005 14:35:07
#87469
bem... aí teria que ser de forma "burra", eu imagino...

for x=1 to rs.recordcount
if x<> rs("código") them
código_a_usar = x
x=rs.recordcount
endif
next x

ou então, quando vc excluir alguma coisa, guarde em outra tabela o código que excluiu... desta forma, quando vc for incluir, faça um select organizando por ordem crescente esta nova tabela... pegue o código a ser usado, eliminando-o desta tabela... e em seguinda fazendo o insert.
LEANDRO.BUENO 07/06/2005 14:45:51
#87476
vou dar uma analizada jean
Tópico encerrado , respostas não são mais permitidas