AJUDA COM CAMPO CODIGO
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
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
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...
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...
é 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......
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......
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.
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.
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?
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?
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.
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.
sim amigo jean,
mas como eu localizaria essa folga.
mas como eu localizaria essa folga.
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.
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.
vou dar uma analizada jean
Tópico encerrado , respostas não são mais permitidas