COMO SABER QUAL A LINHA DO CODIGO ESTA DANDO ERRO?
Tenho uma aplicação com vários forms rodando simultaneamente, e de uma hora para outra aparece o Erro 13 TypeMismatch. Como localizar esse erro em todo o código??? Em qual linha ele acontece?? Em qual form???
Coloca um break point no Load do form e vai [Ô]debugando[Ô] com o F8 até achar o erro ......
esse erro tem a caracteristica de parametro errado ...................
esse erro tem a caracteristica de parametro errado ...................
Em modo autoria o erro não acontece, ou ao menos, não quando procuro por ele. O erro acontece em algum momento que eu não consigo prever. Pensei em colocar na [Ô]cabeça[Ô] de form um [Ô]On Error GoTo...[Ô] mas não sei se esse comando invalidaria os [Ô]On Erros[Ô] que eu tenho dentro de diversas procedurys. Isso iria complicar muito minha situação.
Olha acredito que não ....
Mais fica complicato te falar onde colocar se é no load ou no inicio de alguma procedure ... pq nem sei quantos forms seu aplicativo vai abrir ou em que botao é clicado quando acontece esse erro.
Mais uma coisa é certa ou coloca [Ô]on error[Ô] ou voce vai ter que achar na [Ô]unha[Ô] isso, não vejo outra saida, a não ser que algum colega aqui te sugira algo.
Abraço
Mais fica complicato te falar onde colocar se é no load ou no inicio de alguma procedure ... pq nem sei quantos forms seu aplicativo vai abrir ou em que botao é clicado quando acontece esse erro.
Mais uma coisa é certa ou coloca [Ô]on error[Ô] ou voce vai ter que achar na [Ô]unha[Ô] isso, não vejo outra saida, a não ser que algum colega aqui te sugira algo.
Abraço
Se não tiver um jeito de colocar para todo o Form, vou ter que tirar um final de semana inteiro e colocar em todos as procedures, de todos os forms (são 48 forms com uma média de 120 procedures cada), haja tempo e paciência. Você sabe o código para exibir na mensagem de erro, a linha em que o erro se encontra??
MLALEX BOA TARDE
Primeiro este erro comecou a dar agora? segundo testou o sistema em outra maquina? terceiro tentou fazer o erro localmente no seu projeto.
Talvez seja pontuação que seu sistema não está aceitando, verifica aÃ, talvez é um campo numerico que esta recebendo texto ou acentuação, verifique aÃ.
Primeiro este erro comecou a dar agora? segundo testou o sistema em outra maquina? terceiro tentou fazer o erro localmente no seu projeto.
Talvez seja pontuação que seu sistema não está aceitando, verifica aÃ, talvez é um campo numerico que esta recebendo texto ou acentuação, verifique aÃ.
colega numere as linhas e use o on error goto
ex:
ex:
Private Sub Command1_Click()
On Error GoTo TrataErro
Dim F As Integer
10 For F = 1 To 10
20 MsgBox F
30 If F = 3 Then
40 F = [Ô]Marcelo[Ô] [txt-color=#007100][ô] aqui vai gerar um erro[/txt-color]
50 End If
60 Next F
Exit Sub
TrataErro:
MsgBox [Ô] Erro [Ô] & Err.Description & [Ô] na Linha [Ô] & Str$(Erl)
End Sub
Boa noite !!!
Este erro acontece quando fazemos cálculos com campos vazio.
Exemplo:
Se usar campos com formatação [Ô]FormatNumber + CCur[Ô] e for vazio vai da este erro Type Mismatch
Variável = FormatNumber(Campo 1) + CCur(Campo 2))
Na minha aplicação Usei [Ô]0[Ô] zero quando os campos era vazio !!!!!!
ou pode fazer assim:
On error goto Erro
Variável = FormatNumber(Campo 1) + CCur(Campo 2))
Exit sub
Erro:
(Sem o msgbox para mostrar o erro q vai passa de boa)
Este erro acontece quando fazemos cálculos com campos vazio.
Exemplo:
Se usar campos com formatação [Ô]FormatNumber + CCur[Ô] e for vazio vai da este erro Type Mismatch
Variável = FormatNumber(Campo 1) + CCur(Campo 2))
Na minha aplicação Usei [Ô]0[Ô] zero quando os campos era vazio !!!!!!
ou pode fazer assim:
On error goto Erro
Variável = FormatNumber(Campo 1) + CCur(Campo 2))
Exit sub
Erro:
(Sem o msgbox para mostrar o erro q vai passa de boa)
Olha quando eu preciso fazer isso eu coloco no form load uma função de error [Ô]on error goto fim[Ô] e depois crio ela assim
fim:
open [Ô]c:\log.txt[Ô] for append #1
print #1, err.description
close #1
Boa sorte....
fim:
open [Ô]c:\log.txt[Ô] for append #1
print #1, err.description
close #1
Boa sorte....
Agora estou encontrando a luz. Achei interessante a resposta do Marcelo-Treze, mas eu vou ter que enumerar essas linhas na mão?? Não existe uma função no programa que faça isso?
Mlalex veja só. Existe um ADD IN para VB6 chamado MZTools. Ele é free e tem inúmeros recursos, entre eles fazer a numeração das linhas automaticamente ou retirá-las quando for das manutenção no código.
Existem vários recursos nele, muito bom. Tem versão para VB.net só que é paga e não vejo muita utilidade, pois o .net parece já ter todos os recursos embutidos.
Voltando a sua dúvida, você precisa fazer o seguinte para evitar 90% dos problemas no seu código:
1- analise cada rotina (função, procedimentos, etc...) que podem gerar erros, ex: Acesso a banco de dados, cálculos, acesso a recursos externos (hardware, arquivos, etc...) e inclua nessas rotinas o tratamento de erro como explicado pelo Marcelo Treze.
2- Depois que sua rotina tiver o tratamento, você aplica a numerção com o MZtools para cada uma.
é muito simples e prático além de evitar muitos problemas.
Nota: Gerar um Log ao ocorrer um erro é bem útil, grava um TXT ou envia um email para sua caixa postal, com o nome da rotina, form, número e descrição do erro além do número da linha. Se for mais zeloso, pode incluir uma descrição do que fazia exatamente dentro de uma rotina, quando for muito complexa e tiver várias etapas, além do nome e licença do cliente / usuário, assim é bem mais fácil resolver.
Existem vários recursos nele, muito bom. Tem versão para VB.net só que é paga e não vejo muita utilidade, pois o .net parece já ter todos os recursos embutidos.
Voltando a sua dúvida, você precisa fazer o seguinte para evitar 90% dos problemas no seu código:
1- analise cada rotina (função, procedimentos, etc...) que podem gerar erros, ex: Acesso a banco de dados, cálculos, acesso a recursos externos (hardware, arquivos, etc...) e inclua nessas rotinas o tratamento de erro como explicado pelo Marcelo Treze.
2- Depois que sua rotina tiver o tratamento, você aplica a numerção com o MZtools para cada uma.
é muito simples e prático além de evitar muitos problemas.
Nota: Gerar um Log ao ocorrer um erro é bem útil, grava um TXT ou envia um email para sua caixa postal, com o nome da rotina, form, número e descrição do erro além do número da linha. Se for mais zeloso, pode incluir uma descrição do que fazia exatamente dentro de uma rotina, quando for muito complexa e tiver várias etapas, além do nome e licença do cliente / usuário, assim é bem mais fácil resolver.
Tópico encerrado , respostas não são mais permitidas