Ir para conteúdo
Fórum Script Brasil
  • 0

Cadastro De Membros


[ GuTo ]

Pergunta

Fala Galera!

Antes de mais nada informo que fiz uma busca aki no fórum e não encontrei nada parecido unsure.gif

Todos vocês conhecem o campo de autonumeração do ACESS né.

Então, sabem que a contagem dele não foi feita pra fazer um numero de 1 até digamos 5000 (5 mil) sem ter nenhuma "brecha", ou seja, sem por exemplo no meio contagem faltar o número 3000, por exemplo. Isso também quer dizer que não vai ter exatamente os 5mil registros, mas sim os 4999 registros, se apenas estiver faltando um.

Pois então, no site que tenho é comum a cada 5 registros eu ter de excluir um registro, dae fica esta falha no BD, essa "brecha".

Então, como eu poderia resolver isso?

No caso para poder fazer uma contagem correta, sequencial, ex.:

1,2,3,4,5,6,7,8,9,10...

Não quero deixar falhas, ex.:

1,2,3,8,9,18,19...

Alguém saberia fazer pra consertar isso? Só sei q na tabela eu ia ter de ter o campo do tipo Número wink.gif, e não AutoNumeração!

Aguardo respostas... smile.gif

Link para o comentário
Compartilhar em outros sites

  • Respostas 65
  • Created
  • Última resposta

Top Posters For This Question

Posts Recomendados

  • 0

Brother!!!

Se você conseguir me fala também, porque até hoje, não consegui re-estruturar minha tabela no Accesss com campos Auto-Numerico, é florida, mas eu vi uma vez, em um forum, um esquema que o cara pega o valor do ultimo campo do recordset, adiciona 1 e redistribui os dados...mas não consegui achar por aqui...

Abraços e Boa Sorte!!!

[urso]

Link para o comentário
Compartilhar em outros sites

  • 0

você quer fazer isso exclusivamente com o campo de auto-numeração, ou você quer apenas uma solução para criar um número sequencial?

Eu acho mais fácil ter um campo numérico no BD e toda vez que o ASP for gravar um novo registro, você faz um sequencial simples.

você pode adicionar o 1º registro como zero nesse campo sequencial, e toda vez que adicionar um registro, você faz na SELECT da SQL um order DESC e soma +1, aí é só gravar no BD, e ele jamais "pulará" algum registro...Ele sempre pegará o último e somará mais 1...

Link para o comentário
Compartilhar em outros sites

  • 0

Bem, urso e reginaldo...

Fiz isso aki, de selecionar o MAIOR id e somar mais um ao valor do dele para o novo cadastro.

Mas dae isso não vai me ajudar nas falhas "1,2,3,9,15...", tendeu?

Sei que isso tem como fazer, mas eu não conheço muito bem o ASP todo ainda.

sql = "SELECT MAX(id + 1) AS id_max FROM membros"
  set rs = Server.CreateObject("ADODB.RecordSet")
  set rs = db.execute(sql)
  ' Se o valor máximo de ID das respostas for null, ID da resposta passa a ter valor 1
  if isnull(rs("id_max")) then
  	id_novo = 1
  else
  ' Senão tem o valor do SQL, porque é o id maximo+1
  	id_novo = rs("id_max")
  end if
  set rs = nothing

Mas na maioria dos sites, e no caso no meu acho q pode acontecer também, q é de um cara preencher algum campo errado digamos, ou sei lá, qlqr coisa, e eu ter de excluir o registro dele... dae isso ia criar uma falha nesta sequencia...dae queria saber se teria como fazer com algum comando a verificação entre X e Y (X=1 e Y 10, por exemplo), e dae ver se tem alguma falha na sequencia entre eles e colocar o novo numero substituindo esta falha.

Se alguém souber... laugh.gif

Ah, Reginaldo, o campo da tabela daí não será de autonumeração, mas sim do tipo Número.

Link para o comentário
Compartilhar em outros sites

  • 0

Desculpe Decio, mas poderia ser mais claro?

Não entendi o q quis dizer.

Se puder colocar um pekeno exemplo ou lógica wink.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Guto, você sabe trabalhar por transação?

tipo rollback, commit e etc???

você pode abrir uma transação e só gravar no BD se todos os paramentros foram passados corretamente.

Aí acaba esse problema de gravar "meio" registro e perder o sequencial.

Se você quiser eu posso postar aqui, é só dar um alo... wink.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Tipo assim :

Voce tem um campo ID auto numeração , e após deletar alguns registros , ficam os "buracos" . Neste caso , você deleta o campo ID e cria novamente, ai este novo campo ficara ordenado do numero 1 até o ultimo registro. O unico problema é que você não pode ter outras tabelas com campos relacionados ao ID, e também mudara o numero de todos os registros após o primeiro registro que não tiver na sequencia. Se isto não for problema...

Abraço.

Link para o comentário
Compartilhar em outros sites

  • 0
Tipo assim :

Voce tem um campo ID auto numeração , e após deletar alguns registros , ficam os "buracos" . Neste caso , você deleta o campo ID e cria novamente, ai este novo campo ficara ordenado do numero 1 até o ultimo registro. O unico problema é que você não pode ter outras tabelas com campos relacionados ao ID, e também mudara o numero de todos os registros após o primeiro registro que não tiver na sequencia. Se isto não for problema...

Abraço.

Nah cara, isso não é o meu problema, pois fiz um sistema de no caso o cara querer remover seu cadastro, e no caso de eu kerer deletar o membro (registro), vou deletar também tudo ligado ao ID dele nas outras tabelas de todos os BD's.

Reginaldo

Não sei o que seria "transação" aí pra vc, mas acho q não sei não blink.gif

Nem nada dos tipos q falow...

Dae como você mesmo disse, aki vou eu: "Alooooooouuu" biggrin.gif

Pode me ajudar então wink.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Uma transação é muito útil, principalmente se você tem mais de um INSERT ou UPDATE ou até mesmo os 2 no seu código...

aí então você faz assim:

1º Crie uma função de erro:

Function CheckError()

CheckError = 1

if Err.Number > 0 then

& "ASP Error! " & vbNewLine

Response.write " Número : " & err.number & vbNewLine Response.write " Descrição : " & err.description & vbNewLine Response.write " Seleção : " & err.source &

CheckError = 0

end if

depois, antes da sql você usa:

suaConexao.BeginTrans 'inicia a transação

sql= insert into... continua sua insert

suaConexao.execute sql

Aí então:

if CheckError = 0 then

suaConexao.RollbackTrans 'se houver erro, sera descarregada a transação e não será gravado nada no BD.

você pode repetir isso pra quantas INSERT OU UPDATE FOR FAZER.

e no final, quando não tiver mais o que checar, você poe:

suaConexao.CommitTrans

Essas transações são fundamentais pra você manter a integridade do banco de dados.

valeu? wink.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Acho q o Guto tem a mesma duvida...

E o seguinte o Access quando vai preenchendo o campo de auto numeração ele gera um sequencia numerica 1,2,3,4,5.... e assim por diante...

Quando você apaga o 2º registro por exemplo ele fica da seguinte maneira.. 1,3,4,5,6....

O q ele quer saber e eu tb se e possivel incluir novamente no campo de auto-numeração outro registro com ID 2 que foi apagado anteriormente pois o Acess não vai procurar ele simplesmente vai continuar a sequencia..

E possivel?

Link para o comentário
Compartilhar em outros sites

  • 0

Meu caro amigo tente fazer o seguinte :

Crie um Function NovoCodigo()

Abra seu Recordset Normalmente e utilize a seguinte sintaxe:

.Open " SELECT codigotabela FROM tabela ORDER BY codigotabela DESC "

' pode salvar o resultado numa variavel e formata-lo

Dim novocodigo = Format(Rs("codigotabela") + 1 , "0001"))

E toda vez que você for salvar seu novo cadastro utilize o comando

Call NovoCodigo

Espero ter ajudado.

Por favor , se eu estiver errado me corrijam.

Link para o comentário
Compartilhar em outros sites

  • 0

Putz galera!

Tenho uma grande história pra contar...

Antes de mais nada, vejam quando foi iniciado este tópico...

Pois bem...

Vamos a história (logo mais eu vou dar a resposta em parte, quero abrir uma discussão, pois a função... bem... deixa eu contar...)

Assim... na madrgada de hoje, eu ([ GuTo], Lindo, MaGavilhoso, Modesto porém muito simpático) encontrava-me sabem aonde? Durmindo! É, eu não tava responde a fóruns esta madru, eu tava cansado do dia e tal.

Não sei se esta situação já aconteceu com vocês... Vocês tinham alguma coisa que queriam saber, algum script que queriam programar, ou alguma coisa que tinham esquecido, e do nada, depois de horas, dias ou até meses, esta idéia/pensamento vir do nada sua cabeça e PUM, tá aí a resposta de tudo.

Então, foi isso que aconteceu-me.

Tava durmindo e parece que vi o código e a lógica toda pronta disso aki.

Putz, agora voês vão dizer: "Pô, o cara pirou u kbção, já tá até sonhando com o ASP, VSF***"

Mas não, capaz não to louco não, aliás, eu ando com preguiça de programar, to curtindo mais ir nos fóruns e responder, q louco né.

Mas tudo bem, então acordei na hora e liguei o pc, e mesmo ainda antes de começar, fui olhar os fóruns (claro, como sempre ("esse cara tá obsessivo"))... logo mais comecei e foi que nem um doce, fiz todo código... E MAIS... criei uma função pro mesmo.

Portanto, eu resolvi isto "com um sonho", vejam só.

Ficou perfeito, um código pequeno e simples, talvez demorado às vezes para se obter o resultado, mas ok...

Quanto ao script...

Coisa que eu nem pensava a tanto tempo, q nem me importava mais, mas o cérebro não esqueceu e nem os deuses divinos do ASP, que me deram esta luz, mesmo depois de tanto tempo... wink.gif

É a vida...

FIM DA história...

Quero de vocês saber se alguém tem alguma idéia de como fazer depois deste tempo todo?

Aliás...

Já uma dica que mata tudo.

Uso o comando For...Next para isso.

Forte abraço e espero grandes idéias.

Obs.: não vou dar o código a ninguém, mas quero que todos aprendam, então, arregassem suas mangas, vão criando seus scripts e eu vou dizendo se tá frio, se tá quente... hehehe

Link para o comentário
Compartilhar em outros sites

  • 0

Hei, vamos lá!

Eu ajudo vocês, hehehe. wink.gif

Ah, já vou adiantando outra.

O campo na tabela terá de ser do tipo Número.

Dica: troque em todas as suas tabelas os campos de autonumeracao pelo tipo: Número.

Dae depois que criarmos o código você sempre fará o tratamento e seu BD nunca mais terá furos, falhas, brechas na contagem, como quiser.

Link para o comentário
Compartilhar em outros sites

  • 0

Huhu

eu nem tinha visto quando esse tópico foi aberto..

Mas tava lendo..

Guto.. isso de "programar" durmindo, já aconteceu comigo tb, mas faz tempo já.. na época que eu fazia curso de C, C++..

Deixa eu entender sua duvida:

- No campo de auto-num, não é possivel alterar, depois de ter começado a sequencia!

- Se você quiser isso é obrigado a usar campo numero. (isso é o óbvio) hehe

- agora, a duvida era, como recriar a contagem? err.. qual a dificuldade?

- você quer recriar a sequencia, e depois inserir ela de novo?

Deixa eu vê.. recriar a sequencia.. é facil.. Mas re-inserir ela, que pode ter problemas.. (dependendo da quantidade de registros)

Mas você não levou todo esse tempo, para descobrir que o campo auto-num não pode trocar valor.. certo?

ehehe

Abraços.. e parabens pelo codigo!

Se eu tiver um tempinho, depois tento bolar pra ver se é facil mesmo.

Ate mais

Link para o comentário
Compartilhar em outros sites

  • 0

Não capaz!

Não demorei este tempo todo não!

Quando parei de postar neste tópico nem pensei mais!

Mas como disse, do nada estava durmindo e me apareceu o código na cabeça, tendeu? Sem esforços, hehehe!

Mas é fácil!

E cara, eu já sabia a história do campo autonumeração e tudo mais, óbviamente.

Já sabia do uso do campo Número também, óbviamente (dinovo).

E a função é pra fazer isso:

Ex.:

TINHA um BD com 10 registros, começando apartir do 1 indo até o zero.

Então: 1,2,3,4,5,6,7,8,9,10 Ok!

Dae tinha um user que não visitava o site a meses, então eu deletei ele.

Este user tinha como ID o número 5, digamos, podia ser qualquer outro.

Então agora meu BD tem 9 registros, tendo estes ID's:

1,2,3,4,6,7,8,9,10.

Então agora vem um visitante e se cadastra no meu site, ao invés de ele receber o ID = 11, ele vai ter o ID = 5, substituindo aquele que foi deletado antes, massa né.

Seu BD sem falhas! Show de bola!

Link para o comentário
Compartilhar em outros sites

  • 0

também não precisava desafiar né...

ssql = "SELECT * FROM tabela"

rs.open ssql, cn, 1, 1

for i = rs("num") to rs.recordcount

rs.close

aux_var = i+1

ssql = "SELECT num FROM tabela WHERE num= "&aux_var&" "

rs.open ssql, cn

If rs.Eof = True Then

  Session("buraco") = i+1

  Exit For

End If

next

response.write session("buraco")

A session("buraco") vai indicar qual é o registro que é um buraco...

Serve esse?? fiz na correria aqui... smile.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Acho que sim... vou testa-lo logo mais quando resolver uns problemas aki no pc (vírus)

O meu é diferente...

Vamos lá..

A idéia do reginaldo já vai abrir os horizontes´.

é fácil!

Só q eu nunca vi ninguém fazer ou dizer que sabia depois de ter perguntado!

Link para o comentário
Compartilhar em outros sites

  • 0

Acho que sim... vou testa-lo logo mais quando resolver uns problemas aki no pc (vírus)

Já fiz o teste... Está funcionando perfeitamente.... cool.gif

Na verdade eu não tinha entendido o que você queria no post, senão não teria citado a gravação no BD por transaction, que na verdade é muito importante para não gravar informaçãoes pela metade no BD...

Mas... Não tem como não fazer um código depois que alguém desafia wink.gif

E a lógica desse é simples, tem várias maneiras de fazê-lo...

Abraços ph34r.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Mas o reginaldo...

Nem precisa usar session.

E acho, não pensei muito bem ainda, mas acho que você usand o For pra ir até o RecordCount pode não dar um erro, mas sim não devolver o valor exato...

Acho q seria de outra forma, na qual não vou dizer, hehehe.

Mas já que você se sentiu altamente desafiado, hehehe, então... hehehe, está aí... lembrando que não desafiei você, mas só quero que ponham a mente pra funcionar um pouco, nada mais... considerem como quiser! wink.gif GULIZADA!

Mas seria muito mais fácil vc, Reginaldo, me desafiar do que eu desafia-lo, certamente.

Forte abraço amigo!

Link para o comentário
Compartilhar em outros sites

  • 0

E acho, não pensei muito bem ainda, mas acho que você usand o For pra ir até o RecordCount pode não dar um erro, mas sim não devolver o valor exato...

Acho q seria de outra forma, na qual não vou dizer, hehehe.

É que assim ele sempre vai pegar o menor número que tem no BD e somar + 1 e verificar se existe esse registro (registro+1), não tem como ele retornar errado.

Só pra completar, faltou o ORDER BY na query.

E ainda tem uma pequena falha... que eu tenha achado, só uma...

Alguém aí sabe?? ohmy.giflaugh.gif

(Que legal, esse tópico tá virando prova escolar de ASP laugh.gif )

Link para o comentário
Compartilhar em outros sites

  • 0

O meu problema (vejam lá no Fórum SO: Win98/WinME/XP) é tá faltando um arquivo no meu sistema e não estou podendo abrir qualquer programa, inclusive o IE.

Só consigo abrir ele aqui porque abro uma página .htm dae sim funciona, diretamente não dá!

E ao seu pelo que vejo seria no caso de ele achar o buraco no número 2, ele na verdade receberá o valor 3, é isso?

Link para o comentário
Compartilhar em outros sites

  • 0

Salve Srºs!!!

Não posso deixar de dar minha opinião, e já estavam até cobrando. laugh.gif

O código do Reginaldo, esta até certo, porem me surge uma dúvida infeliz neste processo que ainda vamos matar a 'pal'.

A tabela possui 100 registros bonitinhos (1 à 100 sem falhas.... [1,2,3,4,...]), vamos dizer que o candidato 69 deseja desisitir do cadastro e queira que todas as suas informações seja excluidas do banco de dados, inclusive seu Id (que deve ser re-estruturado no banco de dados) como a gente iria bolar um Sistema para que os dados fosse excluidos e re-indexada a tabela inteira ?

É nisso aí que vai matar...... estou fuzilando o cerebro aqui, enquanto um chato na linha reinicia o micro...

Alguma ideia ? Luz ? Flash ?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.




  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...