Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá,
Como faço para armazenar todo o resultado de uma WHILE dentro de uma SESSION?
DocCL = RSarquivos("documento")
VencCL = RSarquivos("dataVENC")
While Not RSarquivos.EOF
"Documento: "&DocCL&" | Vencimento: "&VencCL&"<br>"
RSarquivos.MoveNextSession("listaDOC") = ???
Olá leodiegoo, obrigado pelas informações!
Eu fiz de acordo com as suas instruções mas deu o seguinte erro:
Erro de compilação do Microsoft VBScript erro '800a0401'
Fim da instrução esperado
/sistema/atualizar.asp, linha 205
Dim variavel As String
------------^
tire o As String, deixe apenas dim, mas antes sete o Option Explicit no 1ª linha do code. vc também pode jogá-lo dentro de um array, depois pode recuperar
Xanburzum,
Fiz as alterações de acordo com sua sugestão e entrou em um tipo de "loop eterno" não roda a página e dá "Tempo limite de script expirado".
O código pega todos os E-MAILS de uma mesma REMESSA e agrupa de forma a enviar apenas 1 e-mail de notificação ao invés de vários, caso o cliente esteja inserido na remessa mais de uma vez. Até aí tudo bem, isso tá funfando legal (RSemail). O problema é que eu quero enviar também a lista de arquivos do cliente caso haja mais de um arquivo dentro da remessa. Um vai, mas quando tem mais de um não estou conseguindo imprimir. Só estou querendo que a variavel "listaDOC" seja preenchida com o WHILE / WEND do RSarqCL apontado pelas setas. Abaixo está o código da página:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<% Option Explicit %>
<!--#include file="../Connections/conexao.asp" -->
<%
Dim quemCheck, checkup, RSdoc, RSemail, RSarqCL, nRM, MailCL, NomeCL, TipoCL, VencCL, Frase, ArqLoop, listaDOC
quemCheck = Request.QueryString("nomeCheck")
nRM = Request.QueryString("nRM")
checkup = "1"
Set RSdoc = conexao.Execute("SELECT * FROM arquivos WHERE numRemessa = '"&nRM&"' ")
Set RSemail = conexao.Execute("SELECT * FROM arquivos INNER JOIN usuarios ON (usuarios.cod_cliente = arquivos.cod_cliente) WHERE arquivos.numRemessa = '"&nRM&"' GROUP BY usuarios.email ")
Set RSarqCL = conexao.Execute("SELECT * FROM arquivos INNER JOIN usuarios ON (usuarios.cod_cliente = arquivos.cod_cliente) WHERE arquivos.numRemessa = '"&nRM&"' GROUP BY usuarios.email ")
While Not RSemail.EOF
MailCL = RSemail("email")
NomeCL = RSemail("apelido")
TipoCL = RSarqCL("txt_tipo")
VencCL = RSarqCL("dataVENC")
On Error Resume Next
>>>>>>>>>AQUI>>>>>>>>> While Not RSarqCL.EOF
ArqLoop = "Documento:"&TipoCL&" | Vencimento:"&VencCL&"<br>"
RSarqCL.MoveNext
Wend
Session("listaDOC") = ArqLoopSet objCDOSYSconf...
(*aqui vem o código de configurações de SMTP)
... objCDOSYSmail.Subject = ""&NomeCL&" - Novo documento disponibilizado"
strBody = "" & _
""&Frase&"" & _
>>>>>>>>>AQUI>>>>>>>>> ""&listaDOC&"" & _
"<br><br>" & _
"Acesso: <a href='sistema'>clique aqui para acessar o sistema!</a><br><br>" & _
"<font size='3' color='#BEBEBE'><i><b>OBS:</b> caso esta mensagem tenha caído em sua caixa de SPAM ou Lixo Eletrônico adicione o e-mail <b>email@email.com.br</b> à sua lista de contatos!</i></font>"
objCDOSYSMail.HTMLBody = strBody
objCDOSYSMail.Send
Set objCDOSYSMail = Nothing
Set objCDOSYSConf = Nothing
RSemail.MoveNext
Wendos outros arquivos são grandes, qual o tamanho ? dependendo de seu host ele pode bloquear, verifique o limite máximo de tamanho para envio de arquivo.
Bom dia! O código não envia arquivo nenhum, somente a informação de quais arquivos estão no sistema. Dispara apenas o registro do banco de dados, apenas caracteres em um corpo de e-mail.
Você tem alguma dica de como fazer funfar com Array?
Com o código mais abaixo eu consigo enviar um e-mail para o cliente que chega da seguinte forma:
<-- como chega o e-mail para o cliente (inicio) -->
Olá! Você tem disponível novo DOCUMENTO de seu interesse no site.
Documento: INSS/PIS | Vencimento: 02/11/2015
Acesso: clique aqui para acessar o sistema
OBS: caso esta mensagem tenha caído em sua caixa de SPAM ou Lixo Eletrônico adicione o e-mail dominio@dominio.com.br à sua lista de contatos!
<-- como chega o e-mail para o cliente (fim) -->
Abaixo está o código ASP para o envio. Onde está a indicação (>>>>>>> AQUI >>>>>>>) mostra o WHILE que funciona corretamente mas não estou conseguindo fazer-lo ficar com todos os registros de Documento/Vencimento dentro da string "listaDOC".
Note que acima, no e-mail do cliente (em vermelho), o código só retorna um registro apenas (Documento: INSS/PIS | Vencimento: 02/11/2015) sendo que no caso ele tem mais registros de documentos no sistema.
Dim quemCheck,checkup,RSdoc,RSemail,RSarqCL,RSloop,SQL,nRM,MailCL,NomeCL,TipoCL,VencCL,Frase,ArqLoop,listaDOC
quemCheck = Request.QueryString("nomeCheck")
nRM = Request.QueryString("nRM")
checkup = "1"
Set RSdoc = conexao.Execute("SELECT * FROM arquivos WHERE numRemessa = '"&nRM&"' ")
Set RSemail = conexao.Execute("SELECT * FROM arquivos INNER JOIN usuarios ON (usuarios.cod_cliente = arquivos.cod_cliente) WHERE arquivos.numRemessa = '"&nRM&"' GROUP BY usuarios.email ")
Set RSarqCL = conexao.Execute("SELECT * FROM arquivos INNER JOIN usuarios ON (usuarios.cod_cliente = arquivos.cod_cliente) WHERE arquivos.numRemessa = '"&nRM&"' GROUP BY usuarios.email ")
While Not RSemail.EOF
MailCL = RSemail("email")
NomeCL = RSemail("apelido")
TipoCL = RSarqCL("txt_tipo")
VencCL = RSarqCL("dataVENC")
On Error Resume Next
If RSdoc("cod_cliente") = "99999" Then
Frase = "<p><b>Olá! Você tem disponível novo COMUNICADO de seu interesse no site.</b></p>"
Else
Frase= "<p><b>Olá! Você tem disponível novo DOCUMENTO de seu interesse no site.</b></p>"
End If
>>>>>>> AQUI >>>>>>> While Not RSarqCL.EOF
ArqLoop = "Documento: "&TipoCL&" | Vencimento: "&VencCL&"<br>"
RSarqCL.MoveNext
WendSet objCDOSYSconf = CreateObject("cdo.configuration")
objCDOSYSconf.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objCDOSYSconf.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp-web.dominio.net"
objCDOSYSconf.Fields.Update
Set objCDOSYSmail = CreateObject("cdo.message")
objCDOSYSmail.configuration = objCDOSYSconf
objCDOSYSmail.BodyPart.Charset = "UTF-8"
objCDOSYSmail.From = "dominio@dominio.com.br"
objCDOSYSmail.To = MailCL
objCDOSYSmail.Subject = ""&NomeCL&" - Novo documento disponibilizado"
strBody = "" & _
""&Frase&"" & _ "<br><br>" & _
"Acesso: <a href='[http://www.dominio.com.br/sistema'>clique](http://www.dominio.com.br/sistema) aqui para acessar o sistema.</a><br><br>" & _
"<font size='3' color='#BEBEBE'><i><b>OBS:</b> caso esta mensagem tenha caído em sua caixa de SPAM ou Lixo Eletrônico adicione o e-mail <b>email@email.com.br</b> à sua lista de contatos!</i></font>"
objCDOSYSMail.HTMLBody = strBody
objCDOSYSMail.Send
Set objCDOSYSMail = Nothing
Set objCDOSYSConf = Nothing
RSemail.MoveNext
Wendprovavelmente é sua estrutura de while, que não está entrando no movenext do outro recordset. aparentemente está correto, mas aconselho a rever seu código. e também pode fazer um teste usando o objeto recordset, chamando a SQL e executando-a através dele. faça apenas para testar.
tipo:
**set RSarqCL = Server.CreateObject(“ADODB.Recordset”)
‘– SQLarqCL="SELECT * FROM arquivos INNER JOIN usuarios ON (usuarios.cod_cliente = arquivos.cod_cliente) WHERE arquivos.numRemessa = '"&nRM&"' GROUP BY usuarios.email "
RSarqCL**.Open strSQL, conexao,1,3
teste assim com o objeto recordset executando a SQL e atribua os while _EOF_wend e os movenext
Xan,
Eu já consegui fazer funcionar os registros e agora estão aparecendo todos de acordo com o RSarqCL. Eu retirei o "GROUP BY usuarios.email" do RSarqCL e funfou beleza.
Depois criei um Array mas não estou conseguindo fazer este Array ficar dinâmico. Você pode me ajudar com o código abaixo? O que preciso mudar para o "MeuArray" ficar dinâmico?
Dim RSarqCL,nRM,idCL,MeuArray,VencCL,TipoCL
Set RSarqCL = conexao.Execute("SELECT * FROM arquivos INNER JOIN usuarios ON (usuarios.cod_cliente = arquivos.cod_cliente) WHERE arquivos.numRemessa = '"&nRM&"' ")
idCL = 0
MeuArray = array()
While Not RSarqCL.EOF
For i = 0 To RSarqCL.EOF
VencCL = RSarqCL("dataVENC")
TipoCL = RSarqCL("txt_tipo")
idCL = idCL + 1
MeuArray = "<b>"&idCL&"</b>) Vencimento: <b style='color:#900'>"&VencCL&"</b> | Documento: <b>"&TipoCL&"</b><br>"
Next
RSarqCL.Movenext
Wend
Response.Write(MeuArray)
* O Código acima está me retornando o seguinte:
6) Vencimento: 10/01/2015 | Documento: DARF
* Quando na verdade deveria me retornar assim:
1) Vencimento: 05/01/2015 | Documento: PIS/COFIS
2) Vencimento: 07/01/2015 | Documento: PIS/COFIS
3) Vencimento: 09/01/2015 | Documento: PIS/COFIS
4) Vencimento: 06/01/2015 | Documento: DARF
5) Vencimento: 08/01/2015 | Documento: DARF
6) Vencimento: 10/01/2015 | Documento: DARF
Grato.
nem precisa de array
Faz assim.
Cria uma variavel e coloca todo o conteudo separado por um caracter. Exemplo
Dim ListaDoc
While not ....
ListaDoc = ListaDoc & SEU CONTEUDO & |
movenext
Depois é só mostrar o conteúdo
Woohoo!!! Que beleza, hein Ronaldo!? Funcionou perfeitamente sem precisar usar o Array... muuuuuuuito obrigado pela sua singela dica!!! Valeu. O código funcionando ficou assim:
Dim RSarqCL,nRM,idCL,VencCL,TipoCL,listaDOC
Set RSarqCL = conexao.Execute("SELECT * FROM arquivos INNER JOIN usuarios ON (usuarios.cod_cliente = arquivos.cod_cliente) WHERE arquivos.numRemessa = '"&nRM&"' ")
idCL = 0
While Not RSarqCL.EOF
For i = 0 To RSarqCL.EOF
VencCL = RSarqCL("dataVENC")
TipoCL = RSarqCL("txt_tipo")
idCL = idCL + 1
listaDOC = listaDOC & "<b>"&idCL&"</b>) Vencimento: <b style='color:#900'>"&VencCL&"</b> | Documento: <b>"&TipoCL&"</b><br>"
Next
RSarqCL.Movenext
Wend
Response.Write listaDOC
* Perfeito, agora o código acima através do "Response.Write listaDOC" me retorna o seguinte:
1) Vencimento: 16/01/2015 | Documento: ICMS
2) Vencimento: 15/01/2015 | Documento: ICMS
3) Vencimento: 11/01/2015 | Documento: COMUNICADO DIMOB
4) Vencimento: 12/01/2015 | Documento: COMUNICADO DIMOB
5) Vencimento: 13/01/2015 | Documento: COMUNICADO DIMOB
6) Vencimento: 14/01/2015 | Documento: ICMS
Um forte abraço a todos e ESTE TÓPICO ESTÁ RESOLVIDO!
Beleza
Cria uma váriavel antes.
Dim variavel As String
While Not RSarquivos.EOF
Wend
Session("listaDOC") = variavel