Ir para conteúdo
Entre para seguir isso  
Boleta

[Aula 7] Depuração de Erros e Loop For

Recommended Posts

Boleta    1
Boleta

Olá aprendizes!

 

Em mais uma aula sobre Visual Basic 6.0, hoje vou abordar um assunto que irá fazer com que seus programas fiquem bem melhores e que não retornem erros críticos. Vamos lá:

 

• Depuração de Erros

 

A depuração de erros faz com que o projeto redirecione erros ou os ignore. São muito simples de usar. No Visual Basic 6.0 temos dois tipos de depuração: GoTo e Resume Next.

 

PS: Nas sintaxes de códigos que vou dar, representarei um erro com um escrito Erro, e não um código normal. Estes, farei nos exeplos.

 

• GoTo -> Em caso de erro no código da rotina, ele redireciona para um ponto definido pelo usuário, e não executa mais nenhum código após ele. Sua Sintaxe é:

 

Private Sub Form_Load()On Error GoTo pontoCodigosErroCodigosExit Subponto:CodigosEnd Sub
Um pouco complicado de início, mas vocês vão ver que é muito fácil. Bom, acima, ele irá executar o primeiro "Códigos", e ao chegar ao erro, vai para ponto e executa os códigos. Repare que usei : após o ponto. sem ele, não irá funcionar. O Exit Sub explicarei no fim.

 

• Resume Next -> Em caso de erro, o programa ignora e passa pros códigos seguintes. Sua sintaxe é:

 

Private Sub Form Load()On Error Resum NextCódigosErroCódigosEnd Sub
Neste caso, o programa irá executar o primeiro "Códigos", e ao chegar ao erro, passa diretamente ao segundo "Códigos". Este é bem mais simples, porém, as vezes, o outro pode ser mais útil.

 

Exit Sub -> O Exit Sub fará com que o programa saia literalmente da rotina e não execute nenhum código. No GoTo, usamos para que o programa não use os códigos de Erro caso o código estiver correto. Lembrando que ele pode ser usado em qualquer hora do projeto, mesmo sem depuração de erros.

 

Objeto Err -> Este "objeto" já está declarado "no padrão" do Visual Basic, ou seja, você não precisa declara-lo para usa-lo. Este objeto retorna para nós as informações do erro, sem que o programa "dê um crash" e feche. Nos exemplos à seguir, vou ensinar como usa-lo.

 

• Exemplos

 

GoTo

 

Crie um CommandButton chamado Command1 e coloque sua propriedade caption = Ver Erro

Private Sub Command1_Click()On Error GoTo ProgErrDim i As IntegerIf Command1.Caption = "Ver Erro" ThenCommand1.Caption = "Não Ver Erro"i = 2 ^ 64ElseCommand1.Caption = "Ver Erro"MsgBox "Nada Aconteceu!", vbInformation, "Erro não ocorrido!"End IfExit SubProgErr:MsgBox "Descrição do Erro: " & Err.Description & vbCrLf & "Número do Erro: " & Err.Number, vbCritical + vbOKOnly, "Erro!"End Sub
Rode o projeto acima e repare que: Quando retornou o erro, ele retornou Overflow. Isso Acontece, pois valores Inteiros(Integers) não suportam números muito altos (vide aula de variáveis). Então ele direcionou para ProgErr. Teste o programa sem o Exit Sub e veja no que dá. Legal né? http://www.otnet123.kit.net/style_emoticons/<#EMO_DIR#>/biggrin.gif

 

PS:

Err.Description -> Mostra a descrição do erro

Err.Number -> Mostra o número do erro

 

 

Resume Next

Crie um CommandButton chamado Command1

 

Private Sub Command1_Click()On Error Resume NextDim i As IntegerIf Command1.Caption = "Ver Erro" ThenCommand1.Caption = "Não Ver Erro"i = 2 ^ 64ElseCommand1.Caption = "Ver Erro"End IfMsgBox "Esta mensagem aparece com e sem erro algum." & vbCrLf & "Descrição: " & Err.Description & vbCrLf & "Número: " & Err.Number, vbInformation, "Info!"End Sub
Viu que legal? Acho que essa tá fácil de enteder né?

 

 

• Loop For

 

Este Loop como todos os outros, faz repetições velozes de certo código. Só que este é um pouco diferente: Você pode opinar de quanto à quanto você vai aumentar o valor de uma váriável. Vamos à sintaxe:

 

Private Sub Form_Load()Dim i As IntegerFor i = Min To MaxCódigosNextEnd Sub
Min -> Será substituido pelo valor mínimo que i vai começar a contagem.

Max -> Será até onde i será contado.

 

Um exemplo de código é:

Adicione um TextBox chamado Text1

 

Private Sub Form_Load()Dim i As IntegerFor i = 0 To 10Text1.Text = Text1.Text & i & vbCrlfNextEnd Sub
Você pode usar o Step Também se quizer. Com o Step, você decide quanto será adicionado à i cada vez que ele for somando. Sua sintaxe é:

 

Private Sub Form_Load()Dim i As IntegerFor i = Min To Max Step NumeroCódigosNextEnd Sub
Exemplo de código:

 

Private Sub Form_Load()Dim i As IntegerFor i = 0 To 10 Step 2Text1.Text = Text1.Text & i & vbCrlfNextEnd Sub
Note que ele irá aparecer de 2 em 2.

 

------------------------------------

 

• Exercício

 

Faça um programa usando Depuração de Erros e Loop For. Usem a criatividade!

Não deixem de postar!

 

------------------------------------

 

 

Bom, espero que tenham gostado desta aula. Dúvidas? POSTE AQUIII!!!

 

Grandes Abraços,

//Bol~

Compartilhar este post


Link para o post
Compartilhar em outros sites
Vasigap    0
Vasigap

hum....muito boa a aula.....eu já tava entrando em desespero ....entrava todo dia e nao encontrava a aula 7 a minha espera....ygdaguyadguygdagydu

 

vo faze o programa e depois eu posto aki ^^

 

 

 

 

tah dando 1 pekeno erro aki...olha ae

 

Private Sub Command1_Click()

On Error GoTo ProgErr

Dim i As Integer

Dim v As Integer

If Command1.Caption = "Ver Erro" Then

For v = 0 To 10 Step 2

Command1.Caption = "Não Ver Erro"

i = 2 ^ 64

ElseIf Command1.Caption = "Ver Erro" Then

For v = o To 10

MsgBox "Nada Aconteceu!", vbInformation, "Erro não ocorrido!"

End If

Exit Sub

ProgErr:

For ii = o To 9 Step 3

MsgBox "Descrição do Erro: " & Err.Description & vbCrLf & "Número do Erro: " & Err.Number, vbCritical + vbOKOnly, "Erro!"

Next

End Sub

 

 

 

 

eu to tentando fazer que quando for erro aqui fosse de 2 em 2....e quando nao fosse ,fosse normal a contagem....só que falava pra botar elseif (tava else)

só que mesmo assim ele n funciona.... grr ajudem ae =D

 

 

e outra duvida...pra que serve akele next ali ?

Private Sub Form_Load() Dim i As Integer For i = 0 To 10 Text1.Text = Text1.Text & i & vbCrlf Next   <<<End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites
Zero    0
Zero

Vasigap, não entendi por que o loop na depuração do erro. E por que complicar tanto para estourar o limite da variável a fim de dar overflow quando temos erros mais simples para chamar.

 

Veja:

Private Sub Command1_Click()On Error GoTo depuraErrDim var As Integervar = 0 / 5Exit SubdepuraErr:MsgBox Err.Description, vbCritical, "Error!"End Sub
Erro: Division by Zero.

 

Simples não?

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites
Vasigap    0
Vasigap

entao zero...eh que eu tava querendo faze isso :o cara aperta o command button e se nao der erro vai aparecer 1 sequencia de texto pulando 2 em 2 na textboxcaso ele aperte e de erro vai aparecer uma sequencia de 1 em 1 na text box....entendeu ? eu queria sabe como faiz isso e se eu to no caminho certo =D

Compartilhar este post


Link para o post
Compartilhar em outros sites
Zero    0
Zero

Entendi... Vamos fazer assim então:

 

Private Sub Command1_Click()On Error GoTo depuraErrDim i As IntegerDim var As IntegerRandomizeText1.Text = vbNullStringvar = 5 / CInt(Rnd() * 1)For i = 1 To 50  Text1.Text = Text1.Text & i & " "NextExit SubdepuraErr:For i = 1 To 50 Step 2  Text1.Text = Text1.Text & i & " "NextEnd Sub
Pronto, adicione um CommandButton com .Name = Command1 e uma Textbox com .Name = Text1, cole o código no projeto e estude-o!

 

Coloquei um sistema de divisão aleatória que varia em 0 ou 1, quando for 0 vai retornar o erro Division by Zero e a depuração será feita, a depuração, no caso, é escrever números de 1 à 50 de 2 em 2 na Text1 e se a divisão for por 1 o código é seguido até o Exit Sub.

 

Qualquer dúvida estamos aí!

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites
Vasigap    0
Vasigap

só falto a linha :

 

MsgBox "Esta mensagem aparece com e sem erro algum." & vbCrLf & "Descrição: " & Err.Description & vbCrLf & "Número: " & Err.Number, vbInformation, "Info!"

 

+ vlw....era exatamente isso que eu queria faze http://forum.otserv.com.br/style_emoticons/<#EMO_DIR#>/biggrin.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites
Epaminondas    0
Epaminondas

É bom lembrar também que o mercado atual, não só de Visual Basic, como qualquer tipo de programação, exige a identação.

 

O que é isso?

 

É muito simples, vejam como fica o código identado do nosso amigo Vasigap:

 

Private Sub Command1_Click()        On Error GoTo ProgErr        Dim i As Integer        Dim v As Integer        Dim ii as Integer       If Command1.Caption = "Ver Erro" Then               For v = 0 To 10 Step 2                        Command1.Caption = "Não Ver Erro"                        i = 2 ^ 64               Next v       ElseIf Command1.Caption = "Ver Erro" Then               For v = o To 10                        MsgBox "Nada Aconteceu!", vbInformation, "Erro não ocorrido!"               Next v       End If        Exit Sub        ProgErr:        For ii = o To 9 Step 3               MsgBox "Descrição do Erro: " & Err.Description & vbCrLf & "Número do Erro: " & Err.Number, vbCritical + vbOKOnly, "Erro!"        Next  iiEnd Sub
Vamos lá, viram o que é identação? Você estrutura o code de forma a ficar mais fácil visualizar o código. No VB, para identar, simplesmente dêem TAB.

 

Erros do colega:

- Esqueceu de declarar "ii"

- Poderia ter usado a variável v novamente, já que não interfere um for no outro. Como padrão profissional, o que está sendo usado para variáveis do for é "iFor".

- Esqueceu de finalizar o for nas duas vezes que usou o v: Next v

 

Abraços!

Se errei em algo, por favor me corrijam. http://forum.otserv.com.br/style_emoticons/<#EMO_DIR#>/tongue.gif

 

Epa~

Compartilhar este post


Link para o post
Compartilhar em outros sites
Corel    0
Corel

Gostei Bastante da Aula e To vendo que esse e mais complicado x) , Mas vo "tenta" fazer e depois eu posto minhas duvidas x)

Compartilhar este post


Link para o post
Compartilhar em outros sites
Vasigap    0
Vasigap

nao querendo ser chato mais até agora ninguem me explico pra que serve o next ^^ yguangyuadgnuy

Compartilhar este post


Link para o post
Compartilhar em outros sites
Zero    0
Zero

O next é a palavra chave que mostra ao compilador onde termina o For.Poderia ser End For, mas prefiriram colocar Next pois é um loop, então, até o último estado da variável contadora, não acaba realmente ali, dali passa pro inicio de novo por isso Next(próximo).É só pra finalizar o bloco do For mesmo.Assim como o End If pro If o Wend pro While o Loop pro Do etc, etc, etc.Epaminondas, não é preciso colocar a variável depois do Next, só o Next já é suficiente. Porém em loops dentro de loops(aninhamento) pode se prefirir utilizar o nome da variável depois do Next para melhorar a interpretação do programador que faz a manutenção do código.Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites
Convidado zinotserv   
Convidado zinotserv

consegui faze isso funciona.. mas pelos codigos do zero.. q fiak mais simples:Private Sub Command1_Click() On Error GoTo depuraErr Dim var As Integer var = 0 / 5 Exit Sub depuraErr: MsgBox Err.Description, vbCritical, "Error!" End SubEi! e façam mais aulas plz!!! =]] ou postem um lugar q tenha bastante coisa sobre VB!

Compartilhar este post


Link para o post
Compartilhar em outros sites
Boleta    1
Boleta

Olá zinotserv!

 

Estarei desenvolvendo mais aulas daqui a pouco tempo. Estou em período de provas e estou ficando muito cansado ao retornar da aula. Meus neurônios não funcionam muito bem quando eu estou cansado.

 

Vou ver se faço em algum feriado ou algo do tipo.

 

Abraços,

//Bol~

Compartilhar este post


Link para o post
Compartilhar em outros sites
Vufusuf    1
Vufusuf

Puts, travei nessa aula, vo fica lendo até entender.

 

Tipo, o que é e pra que serve a depuração de erro em um porgrama?

 

Talvez sabendo pra que server eu consigoa aprender como ela funciona..

 

Valeu,

Vufusuf

Compartilhar este post


Link para o post
Compartilhar em outros sites
Zero    0
Zero

luizperini, nesta seção não encontrará respostas sobre como criar um otserver, tente em tutoriais ou na seção suporte!

Seu post foi deletado.

 

Vufusuf, depuramos erros para que o programa não "debug" e feche.

Para entender melhor, nada como a prática.

Vamos trabalhar no meu código que é bem simples, inicie um novo projeto, adicione um CommandButton com Name = "Command1" e só codifique o seguinte código:

Private Sub Command1_Click()Dim var As Integervar = 0 / 5End Sub

Execute o projeto, clique no botão e veja o que acontece.

Será lançado um erro e o programa terminará inexperadamente.

 

Agora vamos modificar o nosso código para depurar o erro:

Private Sub Command1_Click()On Error GoTo depuraErrDim var As Integervar = 0 / 5Exit SubdepuraErr:MsgBox Err.Description, vbCritical, "Error!"End Sub
Na linha:

MsgBox Err.Description, vbCritical, "Error!"
Mostramos a descrição do erro pro usuário.

Utilizamos o Exit Sub para que o código nunca acesse o label depuraErr, a menos que um erro seja retornado.

 

Execute o projeto e clique no botão! Veja o resultado.

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites
Bogos    0
Bogos

Posso fazer uma observação?

Tipo o Zero uma vez me alertou dizendo para não colocar 2 On Error numa mesma rotina. Pois bem eu retirei achei que tinha realmente errado, mas eu ainda achei estranho o porque de eu ter feito aquilo. Dei uma estudada e ja me liguei depois. Numa mesma rotina você pode usar quantos On errors quiser. Olhe um exemplo:

 

 

On Error Resume Next 

db.Execute "DROP TABLE Clientes" 

On Error GoTo Erro

Vemos um Resume Next no 1º on error, ou seja, se a(s) linha(s) abaixo contiver erros, ele ignora e pula para a seguinte. No caso tratamos o erro de se caso, ao executar o Drop Table mas a tabela não existir, o erro eh ignorado e pasa pra prox linha, no caso outro on error que agora ira tratar qualquer erro tratado da forma que o usuário quiser.

Não estou certo mas, acredito eu que se for colocado outro on error resume next abaixo do goto erro do exemplo, o resume next passa a tratar os proximos erros e assim por diante.

 

Abraços,

Bogos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça login para comentar

Você vai ser capaz de deixar um comentário após fazer o login



Entrar Agora
Entre para seguir isso  

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×