Ir para conteúdo
Fórum Script Brasil
  • 0

Status Bar...


marcelolima

Pergunta

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

  • 0

pensa assim...

você ta com o loop preparado para começar... veja bem

1-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....

Link para o comentário
Compartilhar em outros sites

  • 0
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()

Link para o comentário
Compartilhar em outros sites

  • 0

não entendi o que disse... brother

o 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>&nbsp; </td>
        </tr>
        <tr>
          <td height="10" colspan="2">&nbsp;</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">&nbsp;</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>&nbsp;</p>
<p>&nbsp;</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&atilde;o .xls usando o objeto FileSytemObject
'Se o arquivo n&atilde;o exisitir o parametro TRUE ir&aacute; 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&atilde;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">&nbsp;</TD>
            </TR>
            <tr bgcolor="#FFFFFF">
              <TD width="100" height="10" ALIGN="LEFT" VALIGN="middle" class="texto">&nbsp;</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">&nbsp;</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>&nbsp;</p>
<p>&nbsp;</p>
</body>
</html>

O que acha q devo fazer???

Link para o comentário
Compartilhar em outros sites

  • 0

Uma vez tinha feito isso pra uma conversão de arquivo, refiz aqui mais ou menos como é, dá uma olhada:

Processamento de 10 em 10

Processamento de 100 em 100

Note 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!

Link para o comentário
Compartilhar em outros sites

  • 0
<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....

Link para o comentário
Compartilhar em outros sites

  • 0

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 wink.gif ,...

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."

Link para o comentário
Compartilhar em outros sites

  • 0

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.. hehe

mas o flush funfou legal..

Link para o comentário
Compartilhar em outros sites

  • 0

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!!!

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0

o ideal, seria usar o buffer, depois o flush, e depois o clear

se bem que o clear não precisaria.. pois o próprio flush já limpa o buffer quando mostra as informações na tela..

Link para o comentário
Compartilhar em outros sites

  • 0

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&atilde;o .xls usando o objeto FileSytemObject
'Se o arquivo n&atilde;o exisitir o parametro TRUE ir&aacute; 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&atilde;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">&nbsp;</TD>
            </TR>
            <tr bgcolor="#FFFFFF">
              <TD width="100" height="10" ALIGN="LEFT" VALIGN="middle" class="texto">&nbsp;</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">&nbsp;</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>&nbsp;</p>
<p>&nbsp;</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???

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...