Ir para conteúdo

POWERED BY:

Arquivado

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

Veronica Gravino

Lendo um arquivo xls no ASP Com WHERE

Recommended Posts

Ola pessoal, eu tenho o seguinte codigo:<%imes= Request.QueryString("mes")Dim sSourceXLS Dim sDestXLS sDestXLS = Server.MapPath(".") & "\fonte\2006"&imes&".xls" ' caminho e nome do arquivo xls'Response.write sDestXLS Dim oConn Set oConn = Server.CreateObject("ADODB.Connection") 'conexao com o xls oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sDestXLS & ";Extended Properties=""Excel 8.0;HDR=YES;""" Dim oRS Set oRS = Server.CreateObject("ADODB.Recordset") varMes = Request.QueryString("mes") Set oRS = oConn.Execute("SELECT * FROM [Plan1$]") Campos = oRS.Fields.Count Do While oRS.EOF = False %> <tr bgcolor="#FFFFFF"> <td height="30" class="texto"><div align="center"> <% Response.Write(oRS.Fields(0).Value)%></div></td> <td height="30" class="texto"><div align="center"> <% Response.Write(oRS.Fields(3).Value)%></div></td> <td height="30" class="texto"><div align="center"> <% Response.Write(oRS.Fields(4).Value)%></div></td> <td height="30" class="texto"><div align="center"> <% Response.Write(oRS.Fields(5).Value)%></div></td> </tr> <% oRS.movenext loop %>Esse código esta me exibindo as colunas 0,3,4,5 da 'plan1' de um xls.Mas a duvida é a seguinte,Eu tenho um formulario de login e senha com restrições de usuarios,Quando o UserId = '0' o usuario tem permissão para ver TODOS OS REGISTROS das respectivas linhas acima, mas quando UserId <> '0' ele buscaria o UserId do cliente e mostraria somente a linha com seus respectivos registros, para isso teria que fazer um WHERE certo?obs: ISSO TUDO ACESSANDO O XLS , não é BD!!!Quando eu faço isso me aparece a seguinte mensagem de erro:Microsoft JET Database Engine error '80040e10' Não foi fornecido nenhum valor para um ou mais parâmetros necessários. /wwwroot/vendas2/regatas_visualizar_novo.asp, line 21 Seria tipo:VarUserId =Request("perm_usuario")Set oRS = oConn.Execute("SELECT * FROM [Plan1$] WHERE tb09_codigo ="VarUserId" )Tem alguma maneira? ou só usando componente mesmo?Agradeço quem puder ajudar!;-)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veronica,

 

Bonito nome! http://forum.imasters.com.br/public/style_emoticons/default/blush.gif

 

Segue exemplo de um sp que recebe um parâmtre e aplica um where opcioanl:

 

CREATE PROC TESTE	@VarUserId INTASIF @VarUserId = 0   SELECT @VarUserId = NULLSELECT * FROM [Plan1$] WHERE (@VarUserId IS NULL OR tb09_codigo =@VarUserId)

Ou direto no ASP:

<%dim sSqlif VarUserId = 0 then	sSql = "SELECT * FROM [Plan1$] "else	sSql = "SELECT * FROM [Plan1$] WHERE tb09_codigo =" & VarUserIdend if%>

 

Acho que existem outras formas usando CASE no WHERE.

 

Deu uma luz?

 

 

QQ coisa estamos ai.

 

Jothaz

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veronica,Bonito nome! http://forum.imasters.com.br/public/style_emoticons/default/blush.gif Segue exemplo de um sp que recebe um parâmtre e aplica um where opcioanl:

CREATE PROC TESTE	@VarUserId INTASIF @VarUserId = 0   SELECT @VarUserId = NULLSELECT * FROM [Plan1$] WHERE (@VarUserId IS NULL OR tb09_codigo =@VarUserId)
Ou direto no ASP:
<%dim sSqlif VarUserId = 0 then	sSql = "SELECT * FROM [Plan1$] "else	sSql = "SELECT * FROM [Plan1$] WHERE tb09_codigo =" & VarUserIdend if%>
Acho que existem outras formas usando CASE no WHERE.Deu uma luz?QQ coisa estamos ai.Jothaz
Oi tentei fazer aqui mas me deu a seguinte mensagem:Objecto resposta error 'ASP 0251 : 80004005' Limite da memória intermédia de resposta excedido /00_Jobs/Arch hth/hotsite - desafio náutico/wwwroot/vendas2/regatas_visualizar_novo.asp, line 0 A execução da página ASP fez com que a memória intermédia de resposta excedesse o respectivo limite configurado. ALguem sabe porque ocorre?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posta o código que você utilizaouJothaz

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veronica,

 

Tudo bem?

 

Como você está usando ADO.. não há problema algum em usar WHERE, e outros comandos padrão de banco de dados. Deveria funcionar normalmente, mesmo sendo uma planilha, já que você está usando o Provider correto.

 

Na verdade você está fazendo quase tudo certo... o erro só está acontecendo por um detalhe!

 

Nas linhas abaixo, você esqueceu de usar o caracter & pra concatenar com a variável! =)

 

Ficaria assim:

 

VarUserId =Request("perm_usuario")Set oRS = oConn.Execute("SELECT * FROM [Plan1$]  WHERE tb09_codigo ="& VarUserId &" )

Abraços

Cassiano.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veronica,Tudo bem?Como você está usando ADO.. não há problema algum em usar WHERE, e outros comandos padrão de banco de dados. Deveria funcionar normalmente, mesmo sendo uma planilha, já que você está usando o Provider correto.Na verdade você está fazendo quase tudo certo... o erro só está acontecendo por um detalhe!Nas linhas abaixo, você esqueceu de usar o caracter & pra concatenar com a variável! =)Ficaria assim:

VarUserId =Request("perm_usuario")Set oRS = oConn.Execute("SELECT * FROM [Plan1$]  WHERE tb09_codigo ="& VarUserId &" )
braçosCassiano.
http://forum.imasters.com.br/public/style_emoticons/default/blush.gif é verdade....rsrsrsAgora PASSOU!!!!MUITO OBRIGADO MENINOSS!!!! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poxa, agora que funcionou o where me da erro no ELSE da pagina!!Alias o mesmo erro:Objecto resposta error 'ASP 0251 : 80004005' Limite da memória intermédia de resposta excedido /00_Jobs/Arch hth/hotsite - desafio náutico/wwwroot/vendas2/regatas_visualizar.asp, line 0 A execução da página ASP fez com que a memória intermédia de resposta excedesse o respectivo limite configurado<% Set oRS = oConn.Execute("SELECT * FROM [Plan1$]") Campos = oRS.Fields.Count Do While oRS.EOF = False vnome = (oRS.Fields(0).Value) v1= (oRS.Fields(3).Value) v2 = (oRS.Fields(4).Value) v3 = (oRS.Fields(5).Value) if isNull( v2 ) Then valor2 = "0" Else valor2 = replace(v2, ",", "") valor2 = replace(v2, ".", ",") End if if isNull( v3 ) Then valor3 = "0" Else valor3 = replace(v3, ",", "") valor3 = replace(v3, ".", ",") End if%>Dei um response.end depois do ELse, e ele me para nesse bloco , ai que aparece o ERRO!!Alguma sugestão??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poxa, agora que funcionou o where me da erro no ELSE da pagina!!Alias o mesmo erro:Objecto resposta error 'ASP 0251 : 80004005' Limite da memória intermédia de resposta excedido /00_Jobs/Arch hth/hotsite - desafio náutico/wwwroot/vendas2/regatas_visualizar.asp, line 0 A execução da página ASP fez com que a memória intermédia de resposta excedesse o respectivo limite configurado<% Set oRS = oConn.Execute("SELECT * FROM [Plan1$]") Campos = oRS.Fields.Count Do While oRS.EOF = False vnome = (oRS.Fields(0).Value) v1= (oRS.Fields(3).Value) v2 = (oRS.Fields(4).Value) v3 = (oRS.Fields(5).Value) if isNull( v2 ) Then valor2 = "0" Else valor2 = replace(v2, ",", "") valor2 = replace(v2, ".", ",") End if if isNull( v3 ) Then valor3 = "0" Else valor3 = replace(v3, ",", "") valor3 = replace(v3, ".", ",") End if%>Dei um response.end depois do ELse, e ele me para nesse bloco , ai que aparece o ERRO!!Alguma sugestão??

Em qual desses else ele entra e ocorre o erro??você postou o código completo ou só uma parte?

Compartilhar este post


Link para o post
Compartilhar em outros sites

<%IF varIdRegiao <> 0 THENSet oRS = oConn.Execute ("SELECT * FROM [Plan1$] WHERE tb09_codigo ="&varIdRegiao)Campos = oRS.Fields.Count Do While oRS.EOF = False vnome = (oRS.Fields(0).Value) v1= (oRS.Fields(3).Value) v2 = (oRS.Fields(4).Value) v3 = (oRS.Fields(5).Value)%> <td height="30" class="texto"><div align="center"><%=v1%></div></td> <td height="30" class="texto"><div align="center"><%=formatnumber(v2, "3")%></div></td> <td height="30" class="texto"><div align="center"><%= formatpercent(v3)%></div></td> </tr> <% oRS.movenext loop set oRs = nothing %><%ELSE%>'DEPOS DAQUI ACONTECE O ERRO Set oRS = oConn.Execute ("SELECT * FROM [Plan1$]")Campos = oRS.Fields.Count Do While oRS.EOF = False vnome = (oRS.Fields(0).Value) v1= (oRS.Fields(3).Value) %> <tr bgcolor="#FFFFFF"> <td height="30" class="texto"><div align="left"> <%=vnome%></div></td> <td height="30" class="texto"><div align="center"><%=v1%></div></td> </tr> <% oRS.movenext loop set oRs = nothing %><%End if%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vendo o código o que vi errado foi:

<%ELSE%>'DEPOS DAQUI ACONTECE O ERRO Set oRS = oConn.Execute ("SELECT * FROM [Plan1$]")Campos = oRS.Fields.Count Do While oRS.EOF = False vnome = (oRS.Fields(0).Value) v1= (oRS.Fields(3).Value) %> <tr bgcolor="#FFFFFF"> <td height="30" class="texto"><div align="left"> <%=vnome%></div></td> <td height="30" class="texto"><div align="center"><%=v1%></div></td> </tr> <% oRS.movenext loop set oRs = nothing %><%End if%>

Pro isso
<%ELSE 'DEPOS DAQUI ACONTECE O ERROSet oRS = oConn.Execute ("SELECT * FROM [Plan1$]")Campos = oRS.Fields.CountDo While oRS.EOF = Falsevnome = (oRS.Fields(0).Value)v1= (oRS.Fields(3).Value)%>
Parece que têm um %> no final do ELSE e um depois da linha v1= (oRS.Fields(3).Value) então a tag asp esta sendo fechada duas vezes.Pode até não resolver o seu probelma mas foi o que notei de errado no código postadao.Tenha fé ainda vamso resolver seu problema: http://forum.imasters.com.br/public/style_emoticons/default/clap.gif jothaz

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vendo o código o que vi errado foi:

<%ELSE%>'DEPOS DAQUI ACONTECE O ERRO Set oRS = oConn.Execute ("SELECT * FROM [Plan1$]")Campos = oRS.Fields.Count Do While oRS.EOF = False vnome = (oRS.Fields(0).Value) v1= (oRS.Fields(3).Value) %> <tr bgcolor="#FFFFFF"> <td height="30" class="texto"><div align="left"> <%=vnome%></div></td> <td height="30" class="texto"><div align="center"><%=v1%></div></td> </tr> <% oRS.movenext loop set oRs = nothing %><%End if%>

Pro isso
<%ELSE 'DEPOS DAQUI ACONTECE O ERROSet oRS = oConn.Execute ("SELECT * FROM [Plan1$]")Campos = oRS.Fields.CountDo While oRS.EOF = Falsevnome = (oRS.Fields(0).Value)v1= (oRS.Fields(3).Value)%>
Parece que têm um %> no final do ELSE e um depois da linha v1= (oRS.Fields(3).Value) então a tag asp esta sendo fechada duas vezes.Pode até não resolver o seu probelma mas foi o que notei de errado no código postadao.Tenha fé ainda vamso resolver seu problema: http://forum.imasters.com.br/public/style_emoticons/default/clap.gif jothaz
então é que na verdade eu nao postei o codigo da pagina toda, pois tem 1376 linhas, so coloquei o bloco em que o erro esta ocorrendo!!Ainda nao consegui fazer funcionar TODOS....estranho é que 1 dos arquivos xls funciona..?Agora nao entendi...... :unsure: Mas valeu mesmooo assim!

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro no código podatado:

<%ELSE%>'DEPOS DAQUI ACONTECE O ERRO

Set oRS = oConn.Execute ("SELECT * FROM [Plan1$]")

Campos = oRS.Fields.Count

Do While oRS.EOF = False

vnome = (oRS.Fields(0).Value)

v1= (oRS.Fields(3).Value)

%>

<tr bgcolor="#FFFFFF">

<td height="30" class="texto"><div align="left"> <%=vnome%></div></td>

<td height="30" class="texto"><div align="center"><%=v1%></div></td>

 

O %>' esta sobrando.

pois existe %>.

 

 

Jothaz

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vendo o código o que vi errado foi:

<%ELSE%>'DEPOS DAQUI ACONTECE O ERRO Set oRS = oConn.Execute ("SELECT * FROM [Plan1$]")Campos = oRS.Fields.Count Do While oRS.EOF = False vnome = (oRS.Fields(0).Value) v1= (oRS.Fields(3).Value) %> <tr bgcolor="#FFFFFF"> <td height="30" class="texto"><div align="left"> <%=vnome%></div></td> <td height="30" class="texto"><div align="center"><%=v1%></div></td> </tr> <% oRS.movenext loop set oRs = nothing %><%End if%>

Pro isso
<%ELSE 'DEPOS DAQUI ACONTECE O ERROSet oRS = oConn.Execute ("SELECT * FROM [Plan1$]")Campos = oRS.Fields.CountDo While oRS.EOF = Falsevnome = (oRS.Fields(0).Value)v1= (oRS.Fields(3).Value)%>
Parece que têm um %> no final do ELSE e um depois da linha v1= (oRS.Fields(3).Value) então a tag asp esta sendo fechada duas vezes.Pode até não resolver o seu probelma mas foi o que notei de errado no código postadao.Tenha fé ainda vamso resolver seu problema: http://forum.imasters.com.br/public/style_emoticons/default/clap.gif jothaz
então é que na verdade eu nao postei o codigo da pagina toda, pois tem 1376 linhas, so coloquei o bloco em que o erro esta ocorrendo!!Ainda nao consegui fazer funcionar TODOS....estranho é que 1 dos arquivos xls funciona..?Agora nao entendi...... :unsure: Mas valeu mesmooo assim!
você está testando com arquivos XLS diferentes?Talvez algum dado que você esteja esperando não esteja vindo no select.. tenta dar uma verificada nos arquivos.. e nos campos q você está querendo exibir.. E depois diga aí se o erro continua.. ou se você descobre mais alguma coisa, pra podermos tentar te ajudar..

Compartilhar este post


Link para o post
Compartilhar em outros sites

:D

Eu sei que abre<% e %>fecha os delimitadores né..

Na verdade o script inteiro nao era aquele que eu postei ,

 

 

<%If......%>

condições.....

 

 

<%Else

Set oRS = oConn.Execute ("SELECT * FROM [Plan1$]")

Campos = oRS.Fields.Count

Do While oRS.EOF = False

vnome = (oRS.Fields(0).Value)

v1= (oRS.Fields(3).Value)

v2 = (oRS.Fields(4).Value)

v3 = (oRS.Fields(5).Value)

' Response.write "AQUI"

' Response.end()

if isNull( vnome ) Then

valornome = "0"

Else

valornome = replace(vnome, ",", "")

valornome = replace(vnome, ".", ",")

End if

 

 

 

if isNull( v1 ) Then

valor1 = "0"

Else

valor1 = replace(v1, ",", "")

valor1 = replace(v1, ".", ",")

End if

 

if isNull( v2 ) Then

valor2 = "0"

Else

valor2 = replace(v2, ",", "")

valor2 = replace(v2, ".", ",")

End if

 

if isNull( v3 ) Then

valor3 = "0"

Else

valor3 = replace(v3, ",", "")

valor3 = replace(v3, ".", ",")

End if

%>

<tr bgcolor="#FFFFFF">

<td height="30" class="texto"><div align="left"> <%=valornome%></div></td>

<td height="30" class="texto"><div align="center"><%=valor1%></div></td>

<td height="30" class="texto"><div align="center"><%=(valor2)%></div></td>

<td height="30" class="texto"><div align="center"><%= formatpercent(valor3)%></div></td>

</tr>

<%

oRS.movenext

loop

set oRs = nothing

%>

</table>

<%End if%>

 

Alguma coisa de anormal nesse script?

eu nao achei!!! http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

:D Eu sei que abre<% e %>fecha os delimitadores né.. Na verdade o script inteiro nao era aquele que eu postei ,<%If......%> condições..... <%Else Set oRS = oConn.Execute ("SELECT * FROM [Plan1$]") Campos = oRS.Fields.Count Do While oRS.EOF = False vnome = (oRS.Fields(0).Value) v1= (oRS.Fields(3).Value) v2 = (oRS.Fields(4).Value) v3 = (oRS.Fields(5).Value) ' Response.write "AQUI" ' Response.end() if isNull( vnome ) Then valornome = "0" Else valornome = replace(vnome, ",", "") valornome = replace(vnome, ".", ",") End if if isNull( v1 ) Then valor1 = "0" Else valor1 = replace(v1, ",", "") valor1 = replace(v1, ".", ",") End if if isNull( v2 ) Then valor2 = "0" Else valor2 = replace(v2, ",", "") valor2 = replace(v2, ".", ",") End if if isNull( v3 ) Then valor3 = "0" Else valor3 = replace(v3, ",", "") valor3 = replace(v3, ".", ",") End if %> <tr bgcolor="#FFFFFF"> <td height="30" class="texto"><div align="left"> <%=valornome%></div></td> <td height="30" class="texto"><div align="center"><%=valor1%></div></td> <td height="30" class="texto"><div align="center"><%=(valor2)%></div></td> <td height="30" class="texto"><div align="center"><%= formatpercent(valor3)%></div></td> </tr> <% oRS.movenext loop set oRs = nothing %> </table><%End if%>Alguma coisa de anormal nesse script?eu nao achei!!! http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif

Até o response.write ("aqui"), tinha funcionado legal?Se sim, logo abaixo dele, faz um response write em cada variável v1, v2, v3 pra confirmar se os valores vem como você espera.. talvez não sejam valores válidos... Nas linhas da tabela... na variável valor2... pq você deixou entre parenteses? acho q não precisa..Verifica essas variáveis, e me diz se estão vindo com os valores q você espera..

Compartilhar este post


Link para o post
Compartilhar em outros sites

certo!nao pensei nisso!vou verificar, valeu!Dei um response.end no final do while <% oRS.movenext loop set oRs = nothingResponse.end %>e apareceu a pagina com os registros mais uns 1000000 preenchidos com nulls:Clayton da Silveira Bauer 193709 219500,12 113,31% Jorge Luis Fernandes Salgado 114378 113179,5 98,95% 0 0 0 0,00% 0 0 0 0,00% 0 0 0 0,00% 0 0 0 0,00% 0 0 0 0,00% 0 0 0 0,00% 0 0 0 0,00% 0 0 0 0,00% 0 0 0 0,00% 0 0 0 0,00 %Devo deletar os registros no xls certo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente não vi nada de anormal no scipt para ocorrrer esta msg:Objecto resposta error 'ASP 0251 : 80004005'Limite da memória intermédia de resposta excedido A sugestão do CassianoVix de verifcar as variaveis é pertinente.Pq você não vai colocando um response.write "passi aqui" em cada linha e veifica onde esta ocorrendo o erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

certo!nao pensei nisso!vou verificar, valeu!Dei um response.end no final do while <% oRS.movenext loop set oRs = nothingResponse.end %>e apareceu a pagina com os registros mais uns 1000000 preenchidos com nulls:Clayton da Silveira Bauer 193709 219500,12 113,31% Jorge Luis Fernandes Salgado 114378 113179,5 98,95% 0 0 0 0,00% 0 0 0 0,00% 0 0 0 0,00% 0 0 0 0,00% 0 0 0 0,00% 0 0 0 0,00% 0 0 0 0,00% 0 0 0 0,00% 0 0 0 0,00% 0 0 0 0,00 %Devo deletar os registros no xls certo?

Isso mesmo... na verdade o problema foi que ele está trazendo a planilha toda, mesmo as linhas em branco.Acho que isso não era pra ocorrer.. deve estar ocorrendo pois talvez essas linhas não estejam REALMENTE em branco. Verifica se tem algum "lixo" nas linhas abaixo das linhas que contém dados válidos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

UFA!!!!

Bom, depois de muitas tentativas consegui fazer funcionar!!

Deletei 'algumas' linhas no proprio arquivo .xls e passou SIM!

Por isso que estava dando a msg erro "Limite da memória intermédia de resposta excedido" né?

Tinham muitas linhas desnecessárias sendo imprimidas!

Muito Obrigado meninos!

Valeuzão!! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que não ajudamos muito, mas estamos ai!!Intel +jothaz

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.