USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  run-time error '5'. Alguém sabe?
ChicoVieira
CRUZEIRO
SP - BRASIL
Postada em 19/07/2006 19:50 hs            
Olá.
Em tempo de projeto, meu sistema roda legal. Na saída de uma textbox (lostfocus), associei a impressão de um recibo via objeto Printer. O recibo é impresso tal qual projetado, e os dados ficam gravados em disco. Contudo, pelo executável (que fica na mesma pasta do project), o programa, além de não imprimir o recibo, exibe a msgbox "Run-time error '5' - Invalid procedure call or argument", e fecha o aplicativo. Contudo, salva os dados. Daí, carrego novamente o programa (executável), peço a reimpressão do recibo (não pela saída da textbox, e sim por um botão de reimpressão), e sai tudo OK.
O problema é que, quando instalo no cliente, o que roda é o executável (mais as dll's, reports e data base), gerando esse erro sempre que tabulo fora da textbox com a rotina de impressão. Como eu poderia resolver essa parada?
Eis o código de impressão, acessado pelo lostfocus da textbox:
Private Sub txtGarantia_LostFocus()
Dim Mindate As Date, Temp As Date
    Dim IntervalType As String, X As String
    Dim Number As Integer
    Dim Resultado
    IntervalType = "d"
    frmDimEletronica.Text15 = Data1.Recordset.Fields("DataDeSaída")
    frmDimEletronica.Text16 = txtGarantia
    Data1.Refresh
    R = MsgBox("Imprime o recibo de venda?", vbQuestion + vbYesNo, "Rotina de impressão")
    If R = vbNo Then
        Me.Hide
        frmDimEletronica.Show
        Exit Sub
    Else
        MsgBox "Adicione papel na impressora...", vbOKOnly, "Impressão da ficha de venda"
        Number = Data1.Recordset.Fields("Garantia")
        Mindate = Data1.Recordset.Fields("DataDeSaída")
        Tempo = DateAdd(IntervalType, Number, Mindate)
        Tempo = Format(Tempo, "dd/mm/yyyy")
        Resultado = "( Até " & (Tempo) & "." & ")"
        Printer.FontName = "Arial"
        Printer.FontSize = 8
        Printer.FontName = "Courier New"
        Printer.FontSize = 9
        Printer.Print Tab(5); "DIM ELETRONICA"; Tab(80); "*** RECIBO VENDA CLIENTE ***"
        Printer.Print Tab(5); "Rua Carlos Varela, 210 - centro - CRUZEIRO - Telefone: 3144-1064"
        Printer.Print Tab(12); String(90, "-")
        Printer.Print Tab(12); "Ficha nº:"; Tab(28); Data1.Recordset.Fields("OrdemServiço")
        Printer.Print Tab(12); "Comprador:"; Tab(28); Data1.Recordset.Fields("NomeComprador")
        Printer.Print Tab(12); "Endereço:"; Tab(28); Data1.Recordset.Fields("EndComprador"); Spc(2); "Nº:"; Spc(2); Data1.Recordset.Fields("N_Comprador"); Spc(2); "Tel.: "; Data1.Recordset.Fields("TelComprador")
        Printer.Print Tab(12); String(90, "-")
        Printer.Print Tab(12); "Aparelho:"; Tab(28); Data1.Recordset.Fields("Tipo")
        Printer.Print Tab(12); "Marca:"; Tab(28); Data1.Recordset.Fields("Marca")
        Printer.Print Tab(12); "Modelo:"; Tab(28); Data1.Recordset.Fields("Modelo")
        Printer.Print Tab(12); "Série:"; Tab(28); Data1.Recordset.Fields("Série")
        Printer.Print Tab(12); "Valor pago:"; Tab(28); Format(Data1.Recordset.Fields("ValorVenda"), "R$ " & "###,###.00")
        Printer.Print Tab(12); "Saída:"; Tab(28); Data1.Recordset.Fields("DataDeSaída"); Spc(2); "Garantia:"; Spc(2); Data1.Recordset.Fields("Garantia") & " dias " & Resultado
        Printer.Print Tab(12); "Obs.:"; Tab(28); "Não tente remover o lacre, para não invalidar a garantia."
        Printer.Print
        Printer.Print
        Printer.Print
        Printer.Print
        Printer.Print
        Printer.Print
        Printer.Print
        Printer.Print
        Printer.Print Tab(5); "DIM ELETRONICA"; Tab(80); "*** RECIBO VENDA LOJA ***"
        Printer.Print Tab(5); "Rua Carlos Varela, 210 - centro - CRUZEIRO - Telefone: 3144-1064"
        Printer.Print Tab(12); String(90, "-")
        Printer.Print Tab(12); "Ficha nº:"; Tab(28); Data1.Recordset.Fields("OrdemServiço")
        Printer.Print Tab(12); "Comprador:"; Tab(28); Data1.Recordset.Fields("NomeComprador")
        Printer.Print Tab(12); "Endereço:"; Tab(28); Data1.Recordset.Fields("EndComprador"); Spc(2); "Nº:"; Spc(2); Data1.Recordset.Fields("N_Comprador"); Spc(2); "Tel.: "; Data1.Recordset.Fields("TelComprador")
        Printer.Print Tab(12); String(90, "-")
        Printer.Print Tab(12); "Aparelho:"; Tab(28); Data1.Recordset.Fields("Tipo")
        Printer.Print Tab(12); "Marca:"; Tab(28); Data1.Recordset.Fields("Marca")
        Printer.Print Tab(12); "Modelo:"; Tab(28); Data1.Recordset.Fields("Modelo")
        Printer.Print Tab(12); "Série:"; Tab(28); Data1.Recordset.Fields("Série")
        Printer.Print Tab(12); "Valor pago:"; Tab(28); Format(Data1.Recordset.Fields("ValorVenda"), "R$ " & "###,###.00")
        Printer.Print Tab(12); "Saída:"; Tab(28); Data1.Recordset.Fields("DataDeSaída"); Spc(2); "Garantia:"; Spc(2); Data1.Recordset.Fields("Garantia") & " dias " & Resultado
        Data1.Refresh     'Atualiza o cadastro.
        Printer.EndDoc    'Encerra o trabalho de impressão
        End If
    Me.Hide               'Fecha este form
    frmDimEletronica.Show 'Exibe o form principal
End Sub
     
Sandro
não registrado
Postada em 19/07/2006 20:17 hs   
Olá,
 
O problema pode não estar nessa rotina, mas em algum outro ponto do programa. Faça o seguinte:
 
1. coloque em cada evento desse form uma rotina para gravar um log dos eventos chamados. Você pode abrir um arquivo em disco para isso, e toda vez que você entrar num evento de um controle onde haja algum código, grave ali o nome do evento. Por exemplo, se entrou o evento LostFocus, grave no arquivo Text1_LostFocus, e assim por diante. Dessa forma você saberá exatamente em qual evento o problema se manifesta, pois como eu disse o problema pode estar em outro lugar, e você pensda que está no LostFocus desse textbox;
 
2. Depois de identificado o evento que gera o erro, use uma rotina simples de captura de erros, com o comando "On Error Goto" e use numeração de linhas (eu sei é um porre fazer isso...) e na subrotina de tratamento de erros, mande exibir a linha onde ocorre o erro com Erl:
 
On Error Goto TrataErro
 
1:    IntervalType = "d"
2:    frmDimEletronica.Text15 = Data1.Recordset.Fields("DataDeSaída")
3:    frmDimEletronica.Text16 = txtGarantia
 
< restante do código com numeração das linhas >
 
Exit Sub   '<-- não esqueça disso, pois caso contrário você corre o risco de entrar no
                    'tratamento de erros sem ter havido um erro!
TrataErro:
    Msgbox "Erro " & err.number & " na linha " & Erl
 
Bom, eu sei que isso é muito chato, mas no caso de erros "fantasmas" devemos usar a força bruta mesmo. Provavelmente o erro está em algum ponto onde você menos espera (é sempre assim na informática...).
 
um abraço,
Sandro.
     
Página(s): 1/1    


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2025   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página