Boleta 1 #1 Postado 23 Novembro, 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~ Compartilhar este post Link para o post Compartilhar em outros sites
Vasigap 0 #2 Postado 23 Novembro, 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 Compartilhar este post Link para o post Compartilhar em outros sites
Zero 0 #3 Postado 23 Novembro, 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! Compartilhar este post Link para o post Compartilhar em outros sites
Vasigap 0 #4 Postado 23 Novembro, 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 Compartilhar este post Link para o post Compartilhar em outros sites
Zero 0 #5 Postado 23 Novembro, 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! Compartilhar este post Link para o post Compartilhar em outros sites
Vasigap 0 #6 Postado 23 Novembro, 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 Compartilhar este post Link para o post Compartilhar em outros sites
Zero 0 #7 Postado 23 Novembro, 2006 Não há de que. http://forum.otserv.com.br/style_emoticons/<#EMO_DIR#>/smile.gif Qualquer dúvida poste aí! Abraço! Compartilhar este post Link para o post Compartilhar em outros sites
Epaminondas 0 #8 Postado 23 Novembro, 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~ Compartilhar este post Link para o post Compartilhar em outros sites
Corel 0 #9 Postado 24 Novembro, 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) Compartilhar este post Link para o post Compartilhar em outros sites
Vasigap 0 #10 Postado 24 Novembro, 2006 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 #11 Postado 24 Novembro, 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! Compartilhar este post Link para o post Compartilhar em outros sites
Convidado zinotserv #12 Postado 29 Novembro, 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! Compartilhar este post Link para o post Compartilhar em outros sites
Boleta 1 #13 Postado 30 Novembro, 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~ Compartilhar este post Link para o post Compartilhar em outros sites
Vufusuf 1 #14 Postado 6 Dezembro, 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 Compartilhar este post Link para o post Compartilhar em outros sites
Zero 0 #15 Postado 6 Dezembro, 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! Compartilhar este post Link para o post Compartilhar em outros sites
Bogos 0 #16 Postado 21 Dezembro, 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 Compartilhar este post Link para o post Compartilhar em outros sites