Ir para conteúdo

POWERED BY:

Arquivado

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

rafa-martin

executar sql fora dos if's

Recommended Posts

eu tenho uma tela onde pode ser realizado uma busca por quadro tipos. por exemplo numa combo tem 4 itens. então fiz uma uma função javascrit que quando seleciona um item na combo obten - se uma valor.

 

aí na página de busca eu faço um select de acordo com o que o usuário selecionou para realizar a busca. faço isso:

 

if request("item") = 1 then  busca peleo item 1  RS.Open sql, Conn,3,3elseif request("item") = 2 then  busca peleo item 2  RS.Open sql, Conn,3,3elseif request("item") = 3 then  busca peleo item 3  RS.Open sql, Conn,3,3elseif request("item") = 4 then  busca peleo item 4  RS.Open sql, Conn,3,3end if

e depois desse código eu começo a fazer a paginação:

If RS.EOF thenResponse.Write "Nenhum registro encontrado!"Response.End.....

ele me dá um erro dizendo que a operação não pode ser realizado porque o objeto está fechado.

 

na verdade é porque eu faço os selects e o RS.Open sql, Conn,3,3 está dentro dos if's. depois de executar cada sql eu finalizo o if. aí quando ele tenta ler If RS.EOF then dá esse erro. porque a execução do sql está dentro dos if's

 

na verdade é porque o objeto RS está dentro dos if's. é ele que tem os registros. aí quando tenta ler o mesmo ojeto (RS) pra verificar se existe registro ou não dá esse erro.

 

como posso resolver esse problema?

 

vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

sql = " select xxxx from xxxx where xxxx = " & request("item")RS.Open sql, Conn,3,3if rs.eof then  response.write "Nenhum registro encontrado."  response.endend ifrs.close

se entendi certo, isso funciona

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso funciona sim.

 

só que se que se fizer assim:

 

if item = "1" thensql = " select xxxx from xxxx where xxxx = " & request("item")RS.Open sql, Conn,3,3elseif item = "2" thensql = " select xxxx from xxxx where xxxx = " & request("item")RS.Open sql, Conn,3,3end if
ele dá erro porque o o rs está dentro do bloco de if end if. aí dá o erro de operação naum permitida quando o objeto está fechado. porque quando ele tentar ler esse cara if rs.eof then não vai conseguri porque é como se o o rs dentro do bloco end if tivesse fechado ele.

 

entendeu? como posso resolver isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso funciona sim.

 

só que se que se fizer assim:

 

if item = "1" thensql = " select xxxx from xxxx where xxxx = " & request("item")RS.Open sql, Conn,3,3elseif item = "2" thensql = " select xxxx from xxxx where xxxx = " & request("item")RS.Open sql, Conn,3,3end if
ele dá erro porque o o rs está dentro do bloco de if end if. aí dá o erro de operação naum permitida quando o objeto está fechado. porque quando ele tentar ler esse cara if rs.eof then não vai conseguri porque é como se o o rs dentro do bloco end if tivesse fechado ele.

 

entendeu? como posso resolver isso?

Cara

 

Dentro dos If's você determina apenas qual o comando SQL será executado.

 

Depois, fora do If você abre o RecordSet com o comando setado nos If's. Tipo:

 

item = Request.Form("item")Select Case item  case 1	 SQL = "select do item 1"  case 2	 SQL = "select do item 2"  case 3	 SQL = "select do item 3"End Select'Aqui você abre o recordsetRS.Open sql, Conn,3,3if rs.eof then  response.write "Nenhum registro encontrado."  response.endend if
Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

ele dá erro porque o o rs está dentro do bloco de if end if. aí dá o erro de operação naum permitida quando o objeto está fechado. porque quando ele tentar ler esse cara if rs.eof then não vai conseguri porque é como se o o rs dentro do bloco end if tivesse fechado ele.

Pessoal, a afirmação acima é falsa. Pode ser qualquer otra coisa que está causando o problema, mesmo o fato de se abrir o recordeset dentro um If ... End If.Se for um problema de escopo de variável, então o trecho deve estar sendo executado dentro de uma subrotina (SUB) ou dentro de uma função (FUNCTION).

A variable's scope is determined by where you declare it. When you declare a variable within a procedure, only code within that procedure can access or change the value of that variable. It has local scope and is called a procedure-level variable. If you declare a variable outside a procedure, you make it recognizable to all the procedures in your script. This is a script-level variable, and it has script-level scope.How long a variable exists is its lifetime. The lifetime of a script-level variable extends from the time it's declared until the time the script is finished running. At procedure level, a variable exists only as long as you are in the procedure. When the procedure exits, the variable is destroyed. Local variables are ideal as temporary storage space when a procedure is executing. You can have local variables of the same name in several different procedures because each is recognized only by the procedure in which it is declared.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bixo faz isso e ja era, resolve o problema...Select Case item case 1 SQL = "select do item 1" case 2 SQL = "select do item 2" case 3 SQL = "select do item 3"End SelectRS.Open sql, Conn,3,3

Compartilhar este post


Link para o post
Compartilhar em outros sites

ele dá erro porque o o rs está dentro do bloco de if end if. aí dá o erro de operação naum permitida quando o objeto está fechado. porque quando ele tentar ler esse cara if rs.eof then não vai conseguri porque é como se o o rs dentro do bloco end if tivesse fechado ele.

Pessoal, a afirmação acima é falsa. Pode ser qualquer otra coisa que está causando o problema, mesmo o fato de se abrir o recordeset dentro um If ... End If.Se for um problema de escopo de variável, então o trecho deve estar sendo executado dentro de uma subrotina (SUB) ou dentro de uma função (FUNCTION).

A variable's scope is determined by where you declare it. When you declare a variable within a procedure, only code within that procedure can access or change the value of that variable. It has local scope and is called a procedure-level variable. If you declare a variable outside a procedure, you make it recognizable to all the procedures in your script. This is a script-level variable, and it has script-level scope.How long a variable exists is its lifetime. The lifetime of a script-level variable extends from the time it's declared until the time the script is finished running. At procedure level, a variable exists only as long as you are in the procedure. When the procedure exits, the variable is destroyed. Local variables are ideal as temporary storage space when a procedure is executing. You can have local variables of the same name in several different procedures because each is recognized only by the procedure in which it is declared.

Sim.. Na verdade não é um problema de escopo, pois o ASP não verifica essas coisas em tempo de compilação. No JAVA daria erro de compilação. Como se trata de ASP, o RecordSet pode perfeitamente ser aberto dentro de um comando If por exemplo, desde que se garanta que sempre vai entrar nesse if antes de utilizá-lo em outro logal. Por isso o ideal é não usar. Melhor ele apenas definir dentro do IF o comando SQL a ser executado, e abrir o recorset fora.Acredito que o erro tenha ocorrido pra ele pois provavelmente não entrou em nenhum dos IFs, e portanto nem abriu o recordset.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pessoal eu já fiz o q você's falaram de abrir o rs forna dos if's.mais mesmo assim dá erro. esse erro:Os argumentos são incorretos, estão fora do intervalo aceitável ou estão em conflito.e na verdade, dá esse erro quando eu clico na pagina2, na minha paginação.pq?

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.