Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

fabinhosantos

[Resolvido] select case dinamico

Recommended Posts

Pessoal estou tentando montar um select dinamico onde a quantidade de case(s) vai depender da quantidade de registros no banco de dados.

 

sql="SELECT caminho FROM clientes WHERE tp = 1 ORDER BY descricao asc"
dados = Server.CreateObject("ADODB.Recordset")
dados.Open sql, conn, 3, 3
        
Select Case parametro
     While not dados.eof

      case dados("caminho")
           Response.redirect dados("caminho") & "/" & index.asp
         
     dados.MoveNext 
     Wend         
      Case Else
           Response.redirect "padrao" & "/" & index.asp         
End Select

Fazendo dessa forma da o seguinte erro:

 

Microsoft VBScript compilation error '800a0400'

Expected statement

/funcao.asp, line 31

case dados("caminho")

^

 

Como faço para informar no case o conteudo que esta no banco de dados?

Compartilhar este post


Link para o post
Compartilhar em outros sites

nossa, como você abre um while dentro do select case mas antes do case, isso pode??

o certo nao seria você abrir o select case dentro do while?? alias, se você vai fazer so uma comparacao, nao seria melhor usar if mesmo??

Compartilhar este post


Link para o post
Compartilhar em outros sites

deixa eu explicar melhor:

 

gente eu quero montar um select só que a quantidade de case é de acordo com a quantidade de clientes cadastrados no BD. ex: se eu tiver 10 clientes vai ter 10 case(s), o que eu não quero é cada vez que for cadastrado um cliente eu tenha que alterar o codigo para inserir mais um case.

 

vamos supor esse select case

 

* parametro vai ser um valor recuperado na url( não é o id do cliente, por isso tenho que fazer o while ).

 

Select Case parametro

case "cliente1"

response.redirect "cliente" & "/" & "index.asp"

case "cliente2"

response.redirect "cliente" & "/" & "index.asp"

Case Else

response.redirect "caminhopadrao" & "/" & "index.asp"

End Select

 

* É tipo assim: se depois do meu dominio o cara digita http://www.dominio.com.br/cliente1, vou redirecionar para a pasta do cliente1.

 

O que não quero é ter que ficar adicionando case a cada novo cliente.

 

Acho que alguem ja postou algo parecido aqui mas não encontrei e não sei se tinha a necessidade de select case.

 

Obrigado a todos.

 

 

nossa, como você abre um while dentro do select case mas antes do case, isso pode??

o certo nao seria você abrir o select case dentro do while?? alias, se você vai fazer so uma comparacao, nao seria melhor usar if mesmo??

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá um response.write em camiho, para ver o que retorna

response.write("caminho")

response.end()

 

Isto é geralmente devido ao uso de uma instrução With em um servidor com uma versão mais antiga dos motores de script. Certifique-se de ter os mecanismos de script mais recente em seu servidor, especificamente, com requer a versão 5.0. Ver o artigopara obter informações sobre como obter as atualizações mais recentes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

fabio, agora eu entendi.

mas nao seria somente fazer isso??

sql = "SELECT caminho FROM clientes WHERE tp = 1 And caminho = '" & parametro & "' ORDER BY descricao asc"
Set dados = conn.Execute(sql)

If Not dados.EOF Then
    Response.Redirect(dados("caminho") & "/index.asp")
Else
    Response.Redirect("padrao/index.asp")
End If

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode jogar para adicionar usando um txt ou no bd mesmo e ir concatenando,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não!

 

Seguindo uma dica de tratar a url digitada atraves da pagina de erro 404.asp eu recupero o que vem depois do dominio, ex: www.meudominio.com.br/cliente1, dai fica apenas cliente1.

 

Agora eu preciso de um select case porque se a url existir no BD eu redireciono para a pasta desse cliente, senão eu exibo a mensagem de erro padrão.

 

sql="SELECT caminho FROM clientes WHERE tp = 1 ORDER BY descricao asc"

dados = Server.CreateObject("ADODB.Recordset")

dados.Open sql, conn, 3, 3

 

Select Case parametro

While not dados.eof

Case dados("caminho")

Response.redirect dados("caminho") & "/" & index.asp

dados.MoveNext

Wend

Case Else

Response.write "pagina não encontrada"

End Select

 

Se eu fizer o select colocando os nome dos cliente manualmente ex: Case "cliente teste" , funciona legal mais ai

eu teria muito trabalho em administrar isso.

 

obrigado a todos

 

 

 

fabio, agora eu entendi.

mas nao seria somente fazer isso??

sql = "SELECT caminho FROM clientes WHERE tp = 1 And caminho = '" & parametro & "' ORDER BY descricao asc"
Set dados = conn.Execute(sql)

If Not dados.EOF Then
    Response.Redirect(dados("caminho") & "/index.asp")
Else
    Response.Redirect("padrao/index.asp")
End If



Compartilhar este post


Link para o post
Compartilhar em outros sites

ao inves de usar select case, pois você tem poucos condiçoes utilize um

IF....THEN

ELSE

END IF

 

e de response.write na variavel , para ver o que esta vindo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz o teste com IF como tambem verifiquei o conteudo da variavel e esta tudo ok.

 

com select case tambem funciona:

 

1) a url esta sendo recuperada direitinho com:

 

trata_url = Replace(url_digitada, "404;http://" & minha_url & ":80/", "")

 

2) O select case funciona caso eu coloque o nome dos clientes manualmente:

 

Select Case trata_url

Case "cliente1"

Response.redirect "../arquivos/clientes1/index.asp?s=12"

Case "cliente2"

Response.redirect "../arquivos/clientes2/index.asp?s=12"

Case Else

Response.Write "<div align=center>Página não encontrada</div>"

End Select

 

 

Agora se eu usar o while para montar o select case e em cada case eu informar como abaixo, não funciona:

 

Select Case trata_url

While not dados.eof

case dados("caminho")

Response.redirect "../arquivos/" & dados("caminho") & "/index.asp?s=12"

dados.MoveNext

Wend

Case Else

Response.Write "<div align=centerPágina não encontrada</div>"

End Select

 

 

 

 

ao inves de usar select case, pois você tem poucos condiçoes utilize um

IF....THEN

ELSE

END IF

 

e de response.write na variavel , para ver o que esta vindo

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza...

Compartilhar este post


Link para o post
Compartilhar em outros sites

porque se a url existir no BD eu redireciono para a pasta desse cliente, senão eu exibo a mensagem de erro padrão.

 

fabio, é exatamente isso q o meu codigo faz, você testou ele??

antes eu checo no banco se existe e se existir eu redireciono.

 

 

 

qual seria o sentido do select case se o conteudo do link vai ser o mesmo do parametro?

isso aqui:

Select Case trata_url
Case "cliente1"
Response.redirect "../arquivos/clientes1/index.asp?s=12"
Case "cliente2"
Response.redirect "../arquivos/clientes2/index.asp?s=12"
seria a mesma coisa q transformar isso:

a = b

em:

Select Case b
    Case 1
        a = 1
    Case 2 
        a = 2
    Case 3
        a = 3
    ...
    ...
End Select
ou seja, transformar um codigo de uma unica linha num monte de comparacoes desnecessarias.

Compartilhar este post


Link para o post
Compartilhar em outros sites

foi resolvido...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.