orc 0 Denunciar post Postado Novembro 9, 2007 estou rodando um while dentro do while da um erro tem como fazer o sistema passar esse erro e reiniciar o while ??? Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Novembro 9, 2007 Pode ser que um try except ou try finally resolva, mas qual o erro ? As vezes se consegue tratar o erro para que não aconteça mais... Compartilhar este post Link para o post Compartilhar em outros sites
orc 0 Denunciar post Postado Novembro 9, 2007 Pode ser que um try except ou try finally resolva, mas qual o erro ? As vezes se consegue tratar o erro para que não aconteça mais... mais é um erro ja esperado é quando baixo o xml da internet e existem arquivos não dão erro ai gostaria de voltar para o inicio do while Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Novembro 9, 2007 Entendo.... Tente com o try... Poderia ainda usar o Repeat until... Compartilhar este post Link para o post Compartilhar em outros sites
orc 0 Denunciar post Postado Novembro 13, 2007 eu faço a verificação pra ver se fez o download do arquivo mais como eu faço pra tirar a mensagem que ele vai dar e passar lotado e voltar para o topo dowhile sem passar pelo fim dando next ?? tentei o try mais ele da o erro ainda Compartilhar este post Link para o post Compartilhar em outros sites
bdexterholland 0 Denunciar post Postado Novembro 13, 2007 talvez mostrando o código fique mais fácil apontar a solução... Compartilhar este post Link para o post Compartilhar em outros sites
orc 0 Denunciar post Postado Novembro 13, 2007 talvez mostrando o código fique mais fácil apontar a solução... o código é este : While Not SQLSiteXML.Eof do begin // Local onde será armazenado o arquivo XML ADPLocalFile := IncludeTrailingPathDelimiter( ExtractFilePath( Application.ExeName ) ) + 'temp.adpheadlines.xml'; ADPXMLBLOG := SQLSiteXML.Fields[1].AsString; // Atribui o link do site a Variável Screen.Cursor := crHourglass; // Muda o cursor // try // download do arquivo if not DownloadURLFile( ADPXMLBLOG, ADPLocalFile ) then begin Screen.Cursor := crDefault; Raise Exception.CreateFmt('Unable to connect to the Internet, make sure you are connected!',[]); Exit; end; // fim do if // Verifica se o arquivo existe if not FileExists( ADPLocalFile ) then begin Screen.Cursor := crDefault; raise exception.Create('Can''t locate the *headlines* file?!'); Exit; end; // fim do if // XMLDoc.Active := False; // fecha o componente XMLDoc.FileName := ADPLocalFile; // Atribui o arquivo a ser processado XMLDoc.Active := True; // Abre o componente // StartItemNode := XMLDoc.DocumentElement.ChildNodes.First.ChildNodes.FindNode('item'); ANode := StartItemNode; // repeat sTitle := ANode.ChildNodes[ 'title' ].Text; sLink := ANode.ChildNodes[ 'link' ].Text; sDesc := ANode.ChildNodes[ 'description' ].Text; // SqlTestaSql( STitle, sLink, sDesc ); // procedimento onde se localiza o tratamento // // para inserção das noticias no banco de dados. ANode := ANode.NextSibling; until ANode = nil; // finally DeleteFile( ADPLocalFile ); Screen.Cursor := crDefault; end; // fim do Finally // SqlSiteXml.Next; end; // Fim While SQLAtualizaGrid.Close; SQLAtualizaGrid.Open; SQLAtualizaGrid.Last; end; ali aonde tem os raise eu gostaria de pular os dois quando fosse confirmado o erro eu voltasse ao while sem ir para o fim da instrução , ou seja não quero passar pelo next Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Novembro 14, 2007 No caso você teria de trocar o raise por um Application.MessageBox, se não me engano o raise aborta o procedimento, onde que poderia ter um variável somente para controlar se ocorreu o erro, caso ocorreu o while não avança, algo como: var tentarNovamente: boolean; begin while Not SQLSiteXML.Eof do begin tentarNovamente:=False; // Local onde será armazenado o arquivo XML ADPLocalFile := IncludeTrailingPathDelimiter( ExtractFilePath( Application.ExeName ) ) + 'temp.adpheadlines.xml'; ADPXMLBLOG := SQLSiteXML.Fields[1].AsString; // Atribui o link do site a Variável Screen.Cursor := crHourglass; // Muda o cursor // try // download do arquivo if not DownloadURLFile( ADPXMLBLOG, ADPLocalFile ) then begin Screen.Cursor := crDefault; Application.MessageBox('Unable to connect to the Internet, make sure you are connected!','Erro',MB_OK or MB_APPLMODAL or MB_ICONERROR); tentarNovamente:=True; end; // fim do if // Verifica se o arquivo existe if not FileExists( ADPLocalFile ) then begin Screen.Cursor := crDefault; Application.MessageBox('Can''t locate the *headlines* file?!','Erro',MB_OK or MB_APPLMODAL or MB_ICONERROR); tentarNovamente:=True; end; // fim do if // XMLDoc.Active := False; // fecha o componente XMLDoc.FileName := ADPLocalFile; // Atribui o arquivo a ser processado XMLDoc.Active := True; // Abre o componente // StartItemNode := XMLDoc.DocumentElement.ChildNodes.First.ChildNodes.FindNode('item'); ANode := StartItemNode; // repeat sTitle := ANode.ChildNodes[ 'title' ].Text; sLink := ANode.ChildNodes[ 'link' ].Text; sDesc := ANode.ChildNodes[ 'description' ].Text; // SqlTestaSql( STitle, sLink, sDesc ); // procedimento onde se localiza o tratamento // // para inserção das noticias no banco de dados. ANode := ANode.NextSibling; until ANode = nil; // finally DeleteFile( ADPLocalFile ); Screen.Cursor := crDefault; end; // fim do Finally // if not tentarNovamente then SqlSiteXml.Next; end; // Fim While SQLAtualizaGrid.Close; SQLAtualizaGrid.Open; SQLAtualizaGrid.Last; end; Não testei, teria ver se não ocorre nenhum erro até mesmo na hora de compilar... Somente teria de criar mais um controle para o n° de tentativas, pois desta forma ele vai ficar tentando até conseguir, mas vai que esta sem internet ou o site fora do ar, então teria de criar algo que tente um certo n° de vezes, caso não consiga vai para o próximo. Compartilhar este post Link para o post Compartilhar em outros sites