Boleta 1 #1 Posted November 23, 2006 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 SubUm 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 SubNeste 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 SubRode 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 SubViu 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 SubVocê 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 SubExemplo de código: Private Sub Form_Load()Dim i As IntegerFor i = 0 To 10 Step 2Text1.Text = Text1.Text & i & vbCrlfNextEnd SubNote 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~ Share this post Link to post Share on other sites
Vasigap 0 #2 Posted November 23, 2006 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 Share this post Link to post Share on other sites
Zero 0 #3 Posted November 23, 2006 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 SubErro: Division by Zero. Simples não? Abraços! Share this post Link to post Share on other sites
Vasigap 0 #4 Posted November 23, 2006 entao zero...eh que eu tava querendo faze isso 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 Share this post Link to post Share on other sites
Zero 0 #5 Posted November 23, 2006 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 SubPronto, 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! Share this post Link to post Share on other sites
Vasigap 0 #6 Posted November 23, 2006 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 Share this post Link to post Share on other sites
Zero 0 #7 Posted November 23, 2006 Não há de que. http://forum.otserv.com.br/style_emoticons/<#EMO_DIR#>/smile.gif Qualquer dúvida poste aí! Abraço! Share this post Link to post Share on other sites
Epaminondas 0 #8 Posted November 23, 2006 É 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 SubVamos 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~ Share this post Link to post Share on other sites
Corel 0 #9 Posted November 24, 2006 Gostei Bastante da Aula e To vendo que esse e mais complicado x) , Mas vo "tenta" fazer e depois eu posto minhas duvidas x) Share this post Link to post Share on other sites
Vasigap 0 #10 Posted November 24, 2006 nao querendo ser chato mais até agora ninguem me explico pra que serve o next ^^ yguangyuadgnuy Share this post Link to post Share on other sites
Zero 0 #11 Posted November 24, 2006 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! Share this post Link to post Share on other sites
Guest zinotserv #12 Posted November 29, 2006 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! Share this post Link to post Share on other sites
Boleta 1 #13 Posted November 30, 2006 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~ Share this post Link to post Share on other sites
Vufusuf 1 #14 Posted December 6, 2006 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 Share this post Link to post Share on other sites
Zero 0 #15 Posted December 6, 2006 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 SubNa 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! Share this post Link to post Share on other sites
Bogos 0 #16 Posted December 21, 2006 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 Share this post Link to post Share on other sites