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

Cadastro no banco


marvi

Pergunta

Olá pessoal,

Tenho um cadastro em que tem um campo no banco de dados chamado “Opção”

Assim, se a pessoa seleciona 3 produtos, ficará no banco de dados:

Produto 1 – 1 opção

Produto 2 – 2 opção

Produto 3 – 3 opção

Isso ele faz já no loop

for x = 1 to qtd

opc= x&"º opção"

        sql = "insert into pedidos (pedido, cliente, opcao, id) VALUES ('" & request.form("pedido"&x)& "','" & cliente& "','" & opc& "','" & varid& "')"
    Set rsprodutos=Conexao.Execute(sql)
    end if
next

next

Veja que tem o campo “opcao" no insert e uma variável & opc& que surgi no loop na parte: opc= x&"º opção"

Aí se o loop der 3 voltas, ficará 1,2,3 na variável & opc& que é feito no opc= x&"º opção", como podem ver

Até aí tudo bem, funciona certo. Mas se a pessoa voltar e cadastrar mais dois produtos, será o novo loop e farar 1,2,3 de novo, aí no banco ficará

No primeiro loop:

Produto 1 – 1 opção

Produto 2 – 2 opção

Produto 3 – 3 opção

No segundo loop, quando cara resolve de novo:

Produto 4 – 1 opção

Produto 5 – 2 opção

Produto 6 – 3 opção

Veja que a opção se repete: 1,2,3, pois ele voltar a dar o loop no insert do zero, e o certo era saber de alguma forma qual foi a ultima opção e continuar a colocar numero novo. Tipo, a ultima opção acima foi: Produto 6 – 3 opção e então seria no próximo cadastro, Produto 6 – 4 opção

Pois ele veria a ultima opção e colocava mais um, mas no campo do banco fica “3 opção”, como ver a ultima opção e colocar mais um, se o campo não numero é texto? Entendem?

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Dessa forma pode até funcionar, mais é muito propenso a dar erro uma hora ou outra... O que você pode fazer é não armazenar "1 opção", "2 opção" ou "3 opção" no BD, seria exibir isso na listagem sem resgatar do banco.

Mas como cada caso é um caso, pode ser q você não possa fazer isso, então tente:

Quando for incerir, antes do laço, faça um SELECT COUNT no banco passando as condições que precisar, pegue o valor e sempre some com a variável x do seu laço FOR.

Esse é um dos jeitos. Porém lógicamente não está correto e é propenso a falha, pois se excluir o terceiro por exemplo, o próximo seria: 5, só que o número 5 já está cadastrado.

Você poderia também armazenar somente o número como inteiro no banco e pegar sempre o maior, e somar com a variável x, porém ao excluir o terceiro registro por exemplo, esse já não faria mais parte da listagem nunca. A não ser q você faça um script que preencha lacunas na lista...

Bom, é um tanto confuso, mas como falei e repito: O correto é não armazenar campos assim no BD (desde que o projeto realmente não especifique isso), e sim fazer direto pela listagem dos ítens.

Abraço!

Editado por Bicicleta
Link para o comentário
Compartilhar em outros sites

  • 0

Quando for incerir, antes do laço, faça um SELECT COUNT no banco passando as condições que precisar, pegue o valor e sempre some com a variável x do seu laço FOR

Entendo, mas esqueci de salientar que no painel administrativo do usuário ele poderá modificar as ordens de importância

Se está:

Produto 1 – 1 opção

Produto 2 – 2 opção

Produto 3 – 3 opção

No painel ele pode deixar assim, através de um update:

Produto 1 – 2 opção

Produto 2 – 1 opção

Produto 3 – 3 opção

Entende?

Pelo viso será essa forma que você me falou:

Você poderia também armazenar somente o número como inteiro no banco e pegar sempre o maior, e somar com a variável x...

Editado por marvi
Link para o comentário
Compartilhar em outros sites

  • 0

Entendi o que quer fazer. Então nesse caso a melhor maneira é a que você citou realmente, assim não haverá problemas caso um ítem seja excluído, pois na lista ele será sempre o último inserido, e na ordenação o próximo será sempre o primeiro maior não importando a distância numérica entre ambos!

Abraço.

Link para o comentário
Compartilhar em outros sites

  • 0

Bicicleta, mas tem um problema:

Se tem:

Produto 1 – 1 opção

Produto 2 – 2 opção

Produto 3 – 3 opção

E a pessoa exclui uma, tipo:

Produto 1 – 1 opção

Produto 3 – 3 opção

Ficou faltando o Produto 2 – 2 opção, isso? Se ele cadastra o novo pedido, fica:

Produto 1 – 1 opção

Produto 3 – 3 opção

Produto 4 – 4 opção

E onde fica o 2 aí? ficou 1,2 e 4 opcção, mas depois de exclui algum, aí deveria o usuário no administrador dele reclassificar as opções, de acordo com seu interesse, isso?

Editado por marvi
Link para o comentário
Compartilhar em outros sites

  • 0

Não, esse campo que vai exbibir a opção é para o responsável do site ver a importância do produto.

Se o cliente pede produto 1 como opção 2, então ele é menos interessante do que o produto tal com opção 1, entende?

A posição da opção é que dirá o que o cliente que receber primeiro. Contudo, logo quando o cliente faz um pedido, as opções de importância são registrada automáticamente, como te mostrei acima no loop na hora do insert no banco, aí no administrador do cliente é que ele, o cliente, pode mudar a importância do produto que ele quer receber primeiro, mudando a orderm da opção, entende?

Mas, ele só muda se quiser.

Link para o comentário
Compartilhar em outros sites

  • 0

Não sei se entendi.

Mas se você não quer q fique lacunas entre os ítens, teria que fazer um script pra corrigir isso quando apagar algum ítem reposicionar corretamente os ítens.

A um tempo atrás (muito tempo mesmo - alguns anos) houve uma discussão aqui no fórum sobre como preencher lacunas entre registros de numeração. Dá uma procurada aqui na seção de ASP. Se não me engano os scripts que foram criados aquela época colocavam o registro na primeira posição disponível na hora do insert, mais no seu caso, se for isso mesmo, acho mais interessante corrigir na exclusão de um ítem.

Abraço.

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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...