marcelolima Postado Outubro 5, 2005 Denunciar Share Postado Outubro 5, 2005 galera..é o seguinte...tem uma funcionalidade de nossa intranet para fazer um documento excel que vai servir de base de dados para mala direta.Mas acontece, que há muitos registros (mais de 7000)... e às vezes o usuário pode ter a falsa impressão que o script não tá sendo executado.vocês conhecem algum script que mostra ou o percentual que foi concluído ou uma barra de status com a mesma finalidade???Abraços e vlw Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 bareta Postado Outubro 5, 2005 Denunciar Share Postado Outubro 5, 2005 você ta mandando tudo numa pancada só????????da pra fazer uma paginação ai.... ai poe um refresh na pagina que vai trocando mandando tipo de 50 em 50.... ai com js da monta uma barra.... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 .Andreia. Postado Outubro 5, 2005 Denunciar Share Postado Outubro 5, 2005 Eu já vi, acho que por aqui mesmo, alguém dar a idéia de colocar uma mensagem do tipo "aguarde..." pro usuário saber que não travou.Deve ser javascript, veja no tópico de scripts. se achar algo lhe aviso. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 bareta Postado Outubro 5, 2005 Denunciar Share Postado Outubro 5, 2005 pensa assim...você ta com o loop preparado para começar... veja bem1-conte o total de registros que vai usar...e grave numa variavel(select count, ou recordcount)2- conforme o loop vai andando terá ium javascript que ira incrementar o valor em uma pop.. tipo 1 de x msg enviadas.... 1%... e assim por diante.... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 bareta Postado Outubro 5, 2005 Denunciar Share Postado Outubro 5, 2005 Eu já vi, acho que por aqui mesmo, alguém dar a idéia de colocar uma mensagem do tipo "aguarde..." pro usuário saber que não travou.Deve ser javascript, veja no tópico de scripts. se achar algo lhe aviso. o carregamento da pagina???????? se não me engano é usando response.flush() Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 marcelolima Postado Outubro 5, 2005 Autor Denunciar Share Postado Outubro 5, 2005 não entendi o que disse... brothero código que manda pra é esse: <html> <head> <title>Intranet - Agência de Fomento de Goiás S/A</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <link href="estilos/intranet.css" rel="stylesheet" type="text/css"> </head> <body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"> <table width="610" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <TD width=15><IMG height=8 src="imagens/1px.gif" width=8></TD> </tr> <tr> <td width="15" align="center" valign="middle"> <div align="center"><IMG height=8 src="imagens/1px.gif" width=15></div></td> <td align="center" valign="top"> <table width="580" border="0" cellspacing="0" cellpadding="0"> <tr bgcolor="#3399CC"> <td width="595" height="20" align="center" class="titulobranco">GERA ARQUIVO PARA MALA DIRETA </td> </tr> </table> <form name="frmArquivo" method="post" action="index.asp?lcl=criaarquivo"> <table width="580" border="0" cellspacing="0" cellpadding="0"> <tr> <td height="20" colspan="2"><span class="texto">Categoria:</span></td> </tr> <tr> <td height="20" colspan="2"><span class="texto"> <select name="categoria" id="categoria" style="font-family: Verdana; font-size: 8 pt; border-style: solid; border-width: 1"> <option value="0">AUTORIDADES</option> <option value="1">CLIENTES</option> </select> </span></td> </tr> <tr> <td height="10" colspan="2"><span class="texto"><img src="../imagens/5px.gif" width="5" height="5"></span></td> </tr> <tr> <td height="20" colspan="2"><span class="texto">Nome do arquivo:</span></td> </tr> <tr> <td width="210" height="20"><input name="nometxt" type="text" id="nometxt" style="font-family: Verdana; font-size: 8 pt; border-style: solid; border-width: 1" value="MALADIRETA" size="30"></td> <td> </td> </tr> <tr> <td height="10" colspan="2"> </td> </tr> <tr> <td height="10" colspan="2"><input type="submit" value="Gerar arquivo" name="LNome" style="font-family: Verdana; font-size: 8 pt; background-color: #ECF8FF; border-style: solid; border-width: 1"></td> </tr> <tr> <td height="10" colspan="2"><img src="../imagens/10px.gif" width="10" height="10"></td> </tr> </table> </form> <table width="595" border="0" cellpadding="0" cellspacing="0"> <tr> <td height="20" valign="middle" class="texto"> </td> </tr> <tr> <td height="5" valign="middle" class="texto"><img src="fotos/imagens/5px.gif" width="10" height="5"></td> </tr> </table> </td> </tr> </table> <p> </p> <p> </p> </body> </html> E ESSE ÚLTIMO É O RESULTADO... <html> <head> <title>Intranet - Agência de Fomento de Goiás S/A</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <link href="estilos/intranet.css" rel="stylesheet" type="text/css"> </head> <body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"> <% Server.ScriptTimeout = 100000000 Data = (now) 'obtem o nome do arquivo informado fileExcel = request("nometxt") & ".xls" 'Substitua a barra invertica (\) pelo nome do seu diretorio virtual. 'a barra invertida indica que o arquivo vai ser procurado em wwwroot filePath = Server.mapPath("\ascom") filename = filePath & "\" & fileExcel 'Cria o arquivo com extensão .xls usando o objeto FileSytemObject 'Se o arquivo não exisitir o parametro TRUE irá permitir a sua criacao 'Esteja certo que o usuario tenha permissao para escrita no diretorio onde o 'arquivo vai ser criado Set fs = Server.CreateObject("Scripting.FileSystemObject") Set MyFile = fs.CreateTextFile(filename, True) 'Abre a conexão e retorna os dados do banco de dados 'Set cn = Server.CreateObject("ADODB.Connection") '************************************************************************ Categoria = Request.Form("categoria") if Categoria = 1 then Set cn = Server.CreateObject("ADODB.Connection") cn.ConnectionString = "Provider=msdaora.1;Data Source=afgo;User Id=dsouza;Password=deusdede" cn.cursorlocation=3 cn.Open sql="select cli_nome, cli_fantasia, cli_endereco, cli_bairro, cli_cidade, cli_estado, cli_cep " sql=sql&"from clipfpj " sql=sql&"where exists ( " sql=sql&"select con_numero from contrato where con_cnpj=cli_cnpj " sql=sql&"and link = 0) " sql=sql&"order by 1 " Set Rs = Server.CreateObject( "ADODB.Recordset" ) RS.ActiveConnection = cn Set Rs=cn.execute (sql) end if if Categoria = 0 then cnpath="DBQ=" & Server.MapPath("dados/intranet.mdb") DataSource = "Driver={Microsoft Access Driver (*.mdb)}; " & cnpath Set cn = Server.CreateObject("ADODB.Connection") cn.Open DataSource 'Abre o Recordset' Set Rs = Server.CreateObject( "ADODB.Recordset" ) RS.ActiveConnection = cn Set Rs=cn.execute("Select Tipo, Tratamento, Nome, Endereco, Bairro, Cep, Cidade, Estado From autoridades") end if '*********************************************************** 'Estou usando um provedor OLE DB para efetuar a conexao com o arquivo 'voce pode usar um DSN ( a linha comentada mostra a sintaxe para a conexao) 'cn.Open "DSN=dsn_biblio;UID=;PWD=;DATABASE=Biblio" 'DB="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & request("nomebd") 'SQL = " Select * from " & request("nometbl") 'cn.Open DB 'Set rs = cn.Execute(SQL) strLine="" 'incializa a variavel para armazenar o nome dos campos For each x in rs.fields 'separa os nomes dos campos com um tab para que eles possam aparecer me colunas diferentes no Excel strLine= strLine & x.name & chr(9) Next 'escreve a string no arquivo MyFile.writeline strLine 'retorna os valores do banco de dados e escreve no arquivo Do while Not rs.EOF strLine="" for each x in rs.Fields strLine= strLine & x.value & chr(9) next MyFile.writeline strLine rs.MoveNext Loop 'limpa o objeto MyFile.Close Set MyFile=Nothing Set fs=Nothing %> <table width="610" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <TD width=15><IMG height=8 src="imagens/1px.gif" width=8></TD> </tr> <tr> <td width="15" align="center" valign="middle"> <div align="center"><IMG height=8 src="imagens/1px.gif" width=15></div></td> <td align="center" valign="top"> <table width="580" border="0" cellspacing="0" cellpadding="0"> <tr bgcolor="#3399CC"> <td width="595" height="20" align="center" class="titulobranco">ARQUIVO PARA MALA DIRETA </td> </tr> </table> <table width="595" border="0" cellpadding="0" cellspacing="0"> <tr> <td height="20" valign="middle" class="texto"><table width="595" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td height="5" colspan="4" align="LEFT" valign="middle" class="texto"><img src="fotos/imagens/5px.gif" width="10" height="5"></td> </TR> <TR> <TD height="20" colspan="4" ALIGN="center" VALIGN="middle" class="texto"><span class="tituloazul3">Arquivo texto gerado com sucesso </span> <div align="left"> </div></TD> </TR> <tr bgcolor="#FFFFFF"> <TD height="20" colspan="4" ALIGN="LEFT" VALIGN="middle" class="texto"> </TD> </TR> <tr bgcolor="#FFFFFF"> <TD width="100" height="10" ALIGN="LEFT" VALIGN="middle" class="texto"> </TD> <TD width="198" ALIGN="center" VALIGN="middle" class="linkclaro"> <% 'Exibe um link para abrir o arquvo no Excel link="<a href=" &"/ascom/"& fileExcel & " class=""linkclaro"">Abrir o arquivo no Excel</a>" Response.write link%> </TD> <TD width="197" ALIGN="center" VALIGN="middle" class="texto">Voltar</TD> <TD width="100" ALIGN="LEFT" VALIGN="middle" class="texto"> </TD> </TR> </TABLE></td> </tr> <tr> <td height="5" valign="middle" class="texto"><img src="fotos/imagens/5px.gif" width="10" height="5"></td> </tr> </table> </td> </tr> </table> <p> </p> <p> </p> </body> </html> O que acha q devo fazer??? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Bicicleta Postado Outubro 5, 2005 Denunciar Share Postado Outubro 5, 2005 Uma vez tinha feito isso pra uma conversão de arquivo, refiz aqui mais ou menos como é, dá uma olhada:Processamento de 10 em 10Processamento de 100 em 100Note que o de baixo tá mais rápido porque usa bem menos Response.Flush. Response.Flush dá uma certa demorada em seu script, por isso qt maior o número de vezes q você deixar de passar, mais rápido seu script será.Abaixo o exemplo:<html> <head> <title>Convertendo</title> </head> <body> <span id='txtStatus'>Aguarde...</span> <% inicio = timer valor = 100000 Response.Flush() For i = 1 To valor passados = passados + 1 If passados = 100 Then Response.Write "<script>" Response.Write "document.getElementById('txtStatus').innerHTML = 'Processamento: <b>"& FormatPercent( i / valor ) & "</b> - Registro: <b>"& i &"</b> de <b>"& valor &"</b>';" & VbCrLf Response.Write "</script>" passados = 0 End If Response.Flush() Next Response.Write "<p>A página demorou: "& FormatNumber( Timer - inicio, 2 ) &" segundos para ser processada." %> </body> </html>PS.: Vou deixar essas duas páginas online até amanhã, quem testar testou, quem não testou num testa mais hehehehee...valeu! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 bareta Postado Outubro 5, 2005 Denunciar Share Postado Outubro 5, 2005 <html> <head> <title>Convertendo</title> </head> <body> <span id='txtStatus'>Aguarde...</span> <% inicio = timer valor = 100000 Response.Flush() For i = 1 To valor passados = passados + 1 If passados = 100 Then Response.Write "<script>" Response.Write "document.getElementById('txtStatus').innerHTML = 'Processamento: <b>"& FormatPercent( i / valor ) & "</b> - Registro: <b>"& i &"</b> de <b>"& valor &"</b>';" & VbCrLf Response.Write "</script>" passados = 0 End If Response.Flush() Next Response.Write "<p>A página demorou: "& FormatNumber( Timer - inicio, 2 ) &" segundos para ser processada." %> </body> </html> legal.... tinha pensando em algo com js.... agora me diz uma coisa..... o response.flush se testado no iis não funciona bné... fiz uns negocio em casa e não prestou..... dai largei mão.... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Principe Postado Outubro 6, 2005 Denunciar Share Postado Outubro 6, 2005 Boa... 'bicicleta',.. eu tava mesmo precisando de algo do tipo,.. tenho uma página com mais de 12.000 registros e isso tava feio,.. parecia que tava em loop,. agora vou colocar uma mensagem mostrando o quanto já carregou ,...bareta,. eu uso o Flush normal aqui e vai bem,... única coisa é que ele para a execução do script e mostra na tela o que já carregou,. como o bicicleta falou "quanto mais flush mais lenta a pág." Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 dark0 Postado Outubro 6, 2005 Denunciar Share Postado Outubro 6, 2005 bareta.. o flush funciona beleza..aqui pelo menos sempre funcionou..eu fiz algo parecido em um script que buscava dados de uma pagina remota.. buscava uns 4000 arquivos.. hehemas o flush funfou legal.. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 bareta Postado Outubro 6, 2005 Denunciar Share Postado Outubro 6, 2005 olha nunca consegui fazer funcionar....já tentei colocar o carregando... com um for de 1 a 100000 e não aparecia.... desisti dele.... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Bicicleta Postado Outubro 6, 2005 Denunciar Share Postado Outubro 6, 2005 Bareta, na verdade isso é um Javascript...porque é o Javascript q imprime na tela qual o progresso atual... A "questã" de se usar o response.flush é forçar que o resultado seja enviado para o cliente assim q for sendo processado e não somente no final do processamento.Por, exemplo, aqui no trampo tenho um script q tem q ler 1.200 arquivos texto e pegar partes desse texto. Se eu fosse fazer isso sem esse progresso iria demorar uma era e o usuário teria a nítida impressão de loop infinito, o q fiz foi ir jogando na tela os resultados assim q forem sendo processados. Então a cada passagem no For, q é feita a abertura do arquivo, feita a leitura, e consequentemente a separação do conteúdo, dou um response.flush para ir exibindo já, assim o usuário não fica preso a uma tela em branco...Quanto a não funcionar no IIS, deve ser alguma configuração com seu IIS, pois eu faço aqui no trampo, em casa e nunca tive problemas, inclusive os dois exemplos q coloquei acima estão rodando no IIS, pois estão em um servidor.Valeu!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 bareta Postado Outubro 6, 2005 Denunciar Share Postado Outubro 6, 2005 vlw bicicleta.... e como fica o response.clear() e o buffer na historia?o clera limpa o buffer...tipo num for com o buffer ele ira armazenar o processo no buffer... e o flush printta na tela... isso é o que sempre vi.... mais nunca vi essa teoria funcionar.... pelo menos nunca consegui.. entender isso Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 dark0 Postado Outubro 6, 2005 Denunciar Share Postado Outubro 6, 2005 o ideal, seria usar o buffer, depois o flush, e depois o clearse bem que o clear não precisaria.. pois o próprio flush já limpa o buffer quando mostra as informações na tela.. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 marcelolima Postado Outubro 7, 2005 Autor Denunciar Share Postado Outubro 7, 2005 dá uma olhada galera...eu fiz mais ou menos assim: <html> <head> <title>Intranet - Agência de Fomento de Goiás S/A</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <link href="estilos/intranet.css" rel="stylesheet" type="text/css"> </head> <body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"> <% Server.ScriptTimeout = 100000000 Data = (now) 'obtem o nome do arquivo informado fileExcel = request("nometxt") & ".xls" 'Substitua a barra invertica (\) pelo nome do seu diretorio virtual. 'a barra invertida indica que o arquivo vai ser procurado em wwwroot filePath = Server.mapPath("\ascom") filename = filePath & "\" & fileExcel 'Cria o arquivo com extensão .xls usando o objeto FileSytemObject 'Se o arquivo não exisitir o parametro TRUE irá permitir a sua criacao 'Esteja certo que o usuario tenha permissao para escrita no diretorio onde o 'arquivo vai ser criado Set fs = Server.CreateObject("Scripting.FileSystemObject") Set MyFile = fs.CreateTextFile(filename, True) 'Abre a conexão e retorna os dados do banco de dados 'Set cn = Server.CreateObject("ADODB.Connection") '************************************************************************ Categoria = Request.Form("categoria") if Categoria = 1 then Set cn = Server.CreateObject("ADODB.Connection") cn.ConnectionString = "Provider=msdaora.1;Data Source=afgo;User Id=dsouza;Password=deusdede" cn.cursorlocation=3 cn.Open sql="select cli_nome, cli_fantasia, cli_endereco, cli_bairro, cli_cidade, cli_estado, cli_cep " sql=sql&"from clipfpj " sql=sql&"where exists ( " sql=sql&"select con_numero from contrato where con_cnpj=cli_cnpj " sql=sql&"and link = 0) " sql=sql&"order by 1 " Set Rs = Server.CreateObject( "ADODB.Recordset" ) RS.ActiveConnection = cn Set Rs=cn.execute (sql) end if if Categoria = 0 then cnpath="DBQ=" & Server.MapPath("dados/intranet.mdb") DataSource = "Driver={Microsoft Access Driver (*.mdb)}; " & cnpath Set cn = Server.CreateObject("ADODB.Connection") cn.Open DataSource 'Abre o Recordset' Set Rs = Server.CreateObject( "ADODB.Recordset" ) RS.ActiveConnection = cn Set Rs=cn.execute("Select Tipo, Tratamento, Nome, Endereco, Bairro, Cep, Cidade, Estado From autoridades") end if '*********************************************************** 'Estou usando um provedor OLE DB para efetuar a conexao com o arquivo 'voce pode usar um DSN ( a linha comentada mostra a sintaxe para a conexao) 'cn.Open "DSN=dsn_biblio;UID=;PWD=;DATABASE=Biblio" 'DB="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & request("nomebd") 'SQL = " Select * from " & request("nometbl") 'cn.Open DB 'Set rs = cn.Execute(SQL) strLine="" 'incializa a variavel para armazenar o nome dos campos For each x in rs.fields 'separa os nomes dos campos com um tab para que eles possam aparecer me colunas diferentes no Excel strLine= strLine & x.name & chr(9) Next 'escreve a string no arquivo MyFile.writeline strLine inicio = timer valor = Rs.Recordcount i = 1 passados = 0 'retorna os valores do banco de dados e escreve no arquivo Do while Not rs.EOF passados = passados + 1 strLine="" If passados = 10 Then Response.Write "<script>" Response.Write "document.getElementById('txtStatus').innerHTML = 'Processamento: <b>"& FormatPercent( i / valor ) & "</b> - Registro: <b>"& i &"</b> de <b>"& valor &"</b>';" & VbCrLf Response.Write "</script>" passados = 0 End If Response.Flush() for each x in rs.Fields strLine= strLine & x.value & chr(9) next MyFile.writeline strLine rs.MoveNext Loop 'limpa o objeto MyFile.Close Set MyFile=Nothing Set fs=Nothing %> <table width="610" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <TD width=15><IMG height=8 src="imagens/1px.gif" width=8></TD> </tr> <tr> <td width="15" align="center" valign="middle"> <div align="center"><IMG height=8 src="imagens/1px.gif" width=15></div></td> <td align="center" valign="top"> <table width="580" border="0" cellspacing="0" cellpadding="0"> <tr bgcolor="#3399CC"> <td width="595" height="20" align="center" class="titulobranco">ARQUIVO PARA MALA DIRETA </td> </tr> </table> <table width="595" border="0" cellpadding="0" cellspacing="0"> <tr> <td height="20" valign="middle" class="texto"><table width="595" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td height="5" colspan="4" align="LEFT" valign="middle" class="texto"><img src="fotos/imagens/5px.gif" width="10" height="5"></td> </TR> <TR> <TD height="20" colspan="4" ALIGN="center" VALIGN="middle" class="texto"><span class="tituloazul3">Arquivo texto gerado com sucesso </span> <div align="left"> </div></TD> </TR> <tr bgcolor="#FFFFFF"> <TD height="20" colspan="4" ALIGN="LEFT" VALIGN="middle" class="texto"> </TD> </TR> <tr bgcolor="#FFFFFF"> <TD width="100" height="10" ALIGN="LEFT" VALIGN="middle" class="texto"> </TD> <TD width="198" ALIGN="center" VALIGN="middle" class="linkclaro"> <% 'Exibe um link para abrir o arquvo no Excel link="<a href=" &"/ascom/"& fileExcel & " class=""linkclaro"">Abrir o arquivo no Excel</a>" Response.write link%> </TD> <TD width="197" ALIGN="center" VALIGN="middle" class="texto">Voltar</TD> <TD width="100" ALIGN="LEFT" VALIGN="middle" class="texto"> </TD> </TR> </TABLE></td> </tr> <tr> <td height="5" valign="middle" class="texto"><img src="fotos/imagens/5px.gif" width="10" height="5"></td> </tr> </table> </td> </tr> </table> <p> </p> <p> </p> </body> </html> a página roda de boa.. mas com um erro...'document.getElementById(...)' é nulo ou não é um objeto!!!sabem onde eu tenho q arrumar??? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 marcelolima Postado Outubro 11, 2005 Autor Denunciar Share Postado Outubro 11, 2005 ???? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Bicicleta Postado Outubro 11, 2005 Denunciar Share Postado Outubro 11, 2005 esse erro tá acontecendo porque você não criou um <span> identificando ele como txtStatus... Cria um no local correto:<span id='txtStatus'>Aguarde...</span>dá uma olhada no q postei e analise pra você ver![]s Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
marcelolima
galera..
é o seguinte...
tem uma funcionalidade de nossa intranet para fazer um documento excel que vai servir de base de dados para mala direta.
Mas acontece, que há muitos registros (mais de 7000)... e às vezes o usuário pode ter a falsa impressão que o script não tá sendo executado.
vocês conhecem algum script que mostra ou o percentual que foi concluído ou uma barra de status com a mesma finalidade???
Abraços e vlw
Link para o comentário
Compartilhar em outros sites
16 respostass a esta questão
Posts Recomendados
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.