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
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 ?

Aí urso!

Pode crer aí!

Mas quanto à isso de re-estruturar a tabela é assim:

como você disse, uma tabela com 100 registro, de 1 à 100, sem falhas, dae o user 69 remove seu cadastro, e este id é removido das outras tabela também.

Mas a nossa tabela vai ficar com a falha no nº69 sim.

Só que o PRÓXIMO membro que for se cadastrar não vai receber o ID 101, mas sim o da falha, então ele preenche o nº69, sem deixar a brecha, sacou?

É isso.

Link para o comentário
Compartilhar em outros sites

  • 0

Urso.. deixa eu entender o que você quis dizer:

QUais dados seriam exluidos junto?

Não pode excluir eles junto com o ID, na hora que o usuario for removido?

Link para o comentário
Compartilhar em outros sites

  • 0

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?

Não... Se ele achar o buraco no número 2 ele vai receber o valor 2, você tá confundindo com a variável auxiliar.

Olha a query que você vai entender...

O defeito desse código, é que se for deletado o número 1, por exemplo, ele vai começar a procurar a pártir do 2 (verifica se existe o 3, já que o 2 existe) e assim por diante... ph34r.gif Como diria o Black Dragon... Erro ninja! laugh.gif

Link para o comentário
Compartilhar em outros sites

  • 0
O defeito desse código, é que se for deletado o número 1, por exemplo, ele vai começar a procurar a pártir do 2 (verifica se existe o 3, já que o 2 existe) e assim por diante... ph34r.gif Como diria o Black Dragon... Erro ninja! laugh.gif

É... isso que quis dizer... eu só me expressei meio completamente errado, mas foi isso mesmo que percebi.

Um dia quem sabe eu posto o código que eu fiz... tá perfeitim wink.gif

Mas tu sabe né Rê (hihihi) que nem precisa daquela Session... podia ser uma váriavel normalmente!

E outra...

Tudo bem você usar o RecordCount, mas eu selecionaria o maior ID da tabela.

Veja uma diferença:

Tabela com 10 registros, sendo que o último ID é o 69 (lindo lindo este número)

Tabela com 10 registros, sendo que o último ID é o 10.

Agora pense...

Link para o comentário
Compartilhar em outros sites

  • 0

E outra...

Tudo bem você usar o RecordCount, mas eu selecionaria o maior ID da tabela

Veja uma diferença:

Tabela com 10 registros, sendo que o último ID é o 69 (lindo lindo este número)

Tabela com 10 registros, sendo que o último ID é o 10.

Guto, eu entendi o que você disse... Mas saca só...

Se a tabela tem 10 registros, ela vai pegar o 1º que encontrar, somar mais um e ver se existe este próximo registro...

O erro do loop ficaria vinculado ao 1º registro da tabela...

Se o 1º registro valido for 51 e não existir o 52, seria gravado como 52 e não como 1... depois 2... até chegar ao 50...

Sendo assim o erro tá no loop todo e não só no recordcount...

o loop teria que começar do 0 e ir até o último registro!!! Assim ele não iria ignorar os números anteriores ao 1º registro, certo?

Cara, adorei esse tópico... Já fazia tempo que eu não via um esquema assim, tipo conversa de programadores de verdade... (nada contra iniciantes)

Link para o comentário
Compartilhar em outros sites

  • 0

,Apr 7 2004, 11:01 AM] Veja uma diferença:

Tabela com 10 registros, sendo que o último ID é o 69 (lindo lindo este número)

Tabela com 10 registros, sendo que o último ID é o 10.

Agora pense

Sim Rê.

O objetivo é o mesmo

Agora digamos que tenhamos como menor ID o 51, façamos um loop apartir do 1, nem precisa ser do ZERO, pode ser do 1. Não vamos querer ter um ID=0 né!

Mas isso que citei agora, preste atenção:

Se eu faço um For...Next no 1º exemplo o q resultaria?

e se eu fizer no 2ºexemplo, o q resultaria?

Isso você fazendo o loop até o RecordCount.

For i = rs("num") to rs.Recordcount 'sendo 10 registros totais

Pensa aí...

Tem um erro...

Se tem 10 registros, então o RecordCount é igual a 10... então...

Sacou?

O erro está no 1º exemplo. (Lembrando que no 1ºex. o último ID é igual a 69)

Então, o Recordcount seria apropriado?

Link para o comentário
Compartilhar em outros sites

  • 0

Só que o PRÓXIMO membro que for se cadastrar não vai receber o ID 101, mas sim o da falha, então ele preenche o nº69, sem deixar a brecha, sacou?

Então Guto!!

Olha só que barato loko que passa na cabeça da gente:

Exemplo:

01 - Reginaldo

02 - Guto

03 - Pgmador

04 - Dark0

05 - Wellington

06 - Zé Luis

Vamos supor que o 03 (Pgmador) exclua seu cadastro, teria uma brecha na tabela, certo ?

Se não re-indexarmos a tabela (fazer com que o membro 04, se torne 03), vamos ter uma brecha até que alguém se cadastre novamente e ocupe a posição 03.

O que tentei dizer é o seguinte:

Membro 03 excluiu seu cadastro, refaça na minha tabela (a coluna ID/Numero) organizando novamente os códigos..

Melhorou agora ?

Dark0!!!

Foi isso que tentei dizer... compreendeu agora ?

Eu já li, algo sobre isso, mas não estou me recordando... O PC do trampo deu pau, to na maquina de um kara aki do lado e não estou conseguindo achar o referido código na web.

Mas vamos pensar em algo que vai ser possivel fazer a estrutura ficar ok novamente...

Abraços!!!

[urso]

Link para o comentário
Compartilhar em outros sites

  • 0

galera, nesse ponto, penso em uma coisa:

Pra que isso teria utilidade? Seria legal ter uma indexação correta, sem furos no BD, mais fazer isso, pensem na demora de reindexar uma tabela no BD... Qt tempo o cara teria q ficar esperando... Consumindo banda... Não é por nada não, mais isso é pra sistema dektop que não tem TimeOut, porque não é só fazer um Insert de um numero 5 por exemplo, campo AutoNumeração não aceita valor!!! hehehehee

PS.: Só minha opinião...

Link para o comentário
Compartilhar em outros sites

  • 0

O bicleta, estamos falando de um campo do Tipo Número, não autonumeração!

E quanto a RE-indexação da tabela, como disse o URSO, dá pra fazer...

Teria que criar uma boa função... acho que já pensei +/- até

E seria +/- assim a String SQL

"UPDATE tabela SET id = id -1 WHERE id="&id

Link para o comentário
Compartilhar em outros sites

  • 0
' date='Apr 7 2004, 11:54 PM'] O bicleta, estamos falando de um campo do Tipo Número, não autonumeração!

E quanto a RE-indexação da tabela, como disse o URSO, dá pra fazer...

Teria que criar uma boa função... acho que já pensei +/- até

E seria +/- assim a String SQL

"UPDATE tabela SET id = id -1 WHERE id="&id

Salve Guto!!

Ontem, em casa, sem internet é claro, começei a bolar um esqueminha sobre Re-Indexação da tabela, e cheguei a seguinte conclusão:

Método: Excluir

- Deletar o item da tabela

- Seleciona-la inteiramente,

- Montar um looping 'For' dentro de um 'While'

- Criar um contador dentro do looping

- E a cada passagem do While, por AddNew do RecordSet

eu atualizo o campo da tabela com o valor do contador

- Incremento o contador até a condição do While se tornar false

Mais ou menos cheguei nesta lógica... até iria começar a executar mas já era tarde pra baraiu... (sai com uma delas ontem smile.gif )

Achei até melhor pra fazer depois...

Qual consenso você chegou para excluir um dado e depois reindexar a tabela ?

Abraços!!

[urso]

OBS: Bicicleta ? Forum Imasters ? huh.gif

Eita cabra bon... esse eu reconheço... wink.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Grande Urso!!!

Brother, meu pc tá com problema né, espero resolve-lo o quanto antes, então não dá pra fazer nenhum teste AQUI EM CASA, mas vou ver se crio um código e testo na internet mesmo.

Mas o meu código, na qual tinha iniciado o tópico com este assunto, não era pra RE-indexação da tabela, mas era só para o mais novo cadastro preencher a 1ªincidência de uma "brecha" na contagem do número 1 até o maior ID.

Então, eu posso tentar montar um código de re-indexação pra irmos testando, esse eu daria o código já pra irmos até pensando e aprimorando...

q cs acham?

E irmão URSO, acho que sua lógica tá certinha, assim pensando e olhando por cima rapidamente.

Link para o comentário
Compartilhar em outros sites

  • 0
OBS: Bicicleta ? Forum Imasters ? huh.gif

Eita cabra bon... esse eu reconheço... wink.gif

É ucê memo Urso??? o UrsoDoido??? (num fica bravo não), hehehehehe... beleza kara, resorvi da uma conhecida no fórum aqui, hehehehehe, estou gostando ate agora...

Mais voltando ao tópico, me desculpem, pensei que era campo auto-numeração, dai se torna uma parada um tanto quanto inválida a tentativa pela demora de se realizar a operação... Mais se for um campo numérico ai sim... Até dá pra pensar no assunto... hehehehehe...

Eu vi esses dias atrás na seção de VB aqui do SB um código dizendo que fazia uma coisa parecida... Mais o link tá quebrado, já notifiquei duas vezes o responsável por aquele formulario que tem lá, mais nem resposta eu tive (sacanagem)... Se o responsável arruma-se aquele link, talvez dá pra tirar uma idéia do script...

Mais também vou pensar em algo, se sair algo da cachola eu posto aqui!

Té mais!

Link para o comentário
Compartilhar em outros sites

  • 0

Aí galera!!!

Já fiz o sistema de re-indexação TAMBÉM.

estou pensando em quem sabe fazer um outro script parecido com a reindaxação, só que ele pegaria o MAIOR ID e atualizaria para o ID que foi excluído.

Ex.:

Tabela com 100 registros, exatamente de 1 a 100, sem brechas.

Agora eu deleto o nº51. Temos uma falha/"brecha" no 51.

Então pegamos o MAIOR ID e fazemos um UPDATE, fazendo com que ele torne-se o ID da brecha, no caso, o MAIOR ID tornaria-se o 51.

Preenchendo o furo, deixando tudo ok novamente, sem precisar esperar um novo membro se cadastrar.

Talvez seria melhor que uma reindexação toda...

Ah, já coloquei tudo num exemplo... vou hospedar tudo em algum lugar e daí eu já posto o URL pra vocês analisarem.

Aeee, a libihost voltou.

Acabo de hospedar tudo.

Aí vai o link... podem testar, avaliem e tudo mais. Dúvido vocês acharem um erro de ASP. Tá bem feitinho, modestia a parte wink.gif

Sistema que deixa seu BD sem brechas - By [ GuTo ]

Editado por [ GuTo ]
Link para o comentário
Compartilhar em outros sites

  • 0

Fala galera, tinha até me esquecido desse tópico!!! hehehehe

Então, legal a parada Guto...

Tive pensando aqui, em como poderia fazer, e cheguei na conclusão!

<%

Set rs = Conexao.Execute("SELECT COUNT(id) AS total FROM tabela")

total = rs("total")

primeiro_vago = 0

rs.Close

Set rs = Nothing

Set rs = Conexao.Execute("SELECT id FROM tabela ORDER BY id ASC")

For i = 1 To total

  If i <> rs("id") Then

    primeiro_vago = i

  End If

  rs.MoveNext

Next

If primeiro_vago = 0 Then

  Response.Write "Próximo: "& (primeiro_vago + 1)

Else

  Response.Write "Próximo: "& primeiro_vago

End If

rs.Close

Set rs = Nothing

%>

Mais tem um erro nessa parada, porque se tiver 2 brechas no BD, ele vai usar a ultima brecha e não a primeira, pra isso eu pensei em criar um array dos ítens vagos, e pegar o primeiro item do array!!!

Mais to achando que isso ai da pra melhorar!!! Até porque tá fazendo 2 acessos ao BD!!!

Mais ai, tu não vai compartilhar a sua idéia não???

Té mais!!!!!

Link para o comentário
Compartilhar em outros sites

  • 0

Ae, nada??? Po, o tópico tá legal galera!!!

mais ai, ontem em casa, fui botar a parada q postei ai em cima em prática, pois escrevi de cabeça e nem deu pra testar aqui no trampo... Só consegui melhor um poquinho o cod! Ficou assim na questão do erro que citei. Ao invés de criar um array de itens faltantes, eu fiz assim:

If i <> rs("id") Then

primeiro_vago = i

i = total

End If

Ou seja, se achar um número vago, já sai fora do loop... porque igualei o i ao total do loop...

Não sei se tem mais erro ai, porque o que fiz em casa me esqueci de trazer, então pode haver algum erro ainda, mais a idéia é essa mesma, pelo menos nos meus testes funcionou!!!

Alguma opinião? Alguma idéia?

Guto, nem vai dizer a sua idéia não????

Té mais!

Link para o comentário
Compartilhar em outros sites

  • 0

Eu não sou normal não, mas vocês são tudo maluco!!! cool.gif

Dei uma lida rapida neste tópico, e acho que a resolução do problema já foi apresentada né.

Quando deletar um registro, guarda o ID que foi deletado e diminui 1 unidade de todos os ID's seguintes..

Depois vai nas outras tabelas, e deleta os registros que tenham o ID que foi deletado.

Não é isso?

Se não for, depois eu penso, porque agora não consigo lembrar nem quem sou eu.

Pgmador huh.gif

Link para o comentário
Compartilhar em outros sites

  • 0
Guest [ GuTo ] no colégio

Aí Galera!!!

estou sem net por uns tempos, logo estou voltando...

Mas assim...

Tem 2 sistemas. (2 estão no URL que passei, um quem sabe eu faço qlqr hora)

1.: Exclui qualquer ID da tabela, e o PRÓXIMO membro a se cadastrar, vai ocupar a PRIMEIRA brecha, partindo do numero 1 até o MAIOR id da tabela.

2.: Excluir qualquer ID da tabela, digamos que seja o ID de numero 51. A tabela que temos tem 100 registros. Então, apartir do ID excluido, adicionamos UM (ID_excluido + 1), ou seja, o próximo ID... Logo, 52!

Então apartir do 52, até o maior ID da tabela, vamos em todos os IDs subtrair um.

Dae no caso o 52 vira 51 (ocupando a brecha), o 53 ocupa o 52, o 54 ocupa o 53 e assim por diante.

A lógica tá aí galera... agora é com vocês.

Não posso dizer mais nada, se não eu taria dando o código pra vocês.

Lembrando... É SIMPLES!!!

Abraços!

Obs.: os moderadores não sabem fazer, lero lero... tongue.giflaugh.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Aí... se alguém tiver interessado, o q eu to achando que não...

Vai uma dica:

"SELECT MAX(campo) AS MaiorValor FROM tabela"

Link para o comentário
Compartilhar em outros sites

  • 0

Desistiram do 'desafio'...

Putz...

Mas seguinte, a URL agora está correta sem erros...

Pode acessar por este novo URL

http://www27.brinkster.com/chatcanoas/id/membros.asp

O bom desta função é que você pode pegar seu BD como está agora mesmo, mudar o campo Autonumeração pra o tipo Número e chamar a funcao na hora de inserir novos registros...

Dae ele vai preenchendo cada 'brecha' do seu BD, ou seja, consertando o 'contagem'...

No meu site não existe autonumeracao mais... é tudo do Tipo número... e ele já preencheu e arrumou todas as brechas que tinham em todas as tabelas..

Agora é tudo 1,2,3,4,5,6,7,8,9,10 ... sem falhas

Link para o comentário
Compartilhar em outros sites

  • 0
' date='May 5 2004, 01:04 AM'] Desistiram do 'desafio'...

Putz...

Mas seguinte, a URL agora está correta sem erros...

Pode acessar por este novo URL

http://www27.brinkster.com/chatcanoas/id/membros.asp

O bom desta função é que você pode pegar seu BD como está agora mesmo, mudar o campo Autonumeração pra o tipo Número e chamar a funcao na hora de inserir novos registros...

Dae ele vai preenchendo cada 'brecha' do seu BD, ou seja, consertando o 'contagem'...

No meu site não existe autonumeracao mais... é tudo do Tipo número... e ele já preencheu e arrumou todas as brechas que tinham em todas as tabelas..

Agora é tudo 1,2,3,4,5,6,7,8,9,10 ... sem falhas

Tipo, é até legal fazer isso, mass tem um mal, de poder o numero de autonumeração, porque os usuarios, ou produtos, não podem ter os mesmos ID dos excluidos, eu prefiro mais o normal de cada um com seu ID e tals... Mas ficou legal Guto... Parabens!!!! wink.gif

[]'s

Victor

Link para o comentário
Compartilhar em outros sites

  • 0

Mas a função não tem erro algum... nunca vai te trazer este problema aí...só keria entreter o pessoal, a scriptbrasil, pelo menos a área ASP não é mais a mesma... faz tempo

O pessoal bom, da antiga, não entra mais quase, e qm posta, a maioria, é iniciante que não quer saber de ajudar e até mesmo não sabe...

E a merd* do brinkster também, vou ti conta...

Vou falar com o resopi e ver conhecer o truehost.. parece ser BBB, bom, bonito e BARATO! biggrin.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Pois é... o BRINKSTER é q dá problema...em casa funciona tranqüilo...

na libihost funcionava direitinho...

Aff.. por isso q to pensando em comecar a pagar um servidor...

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...