Newsgroup: it.comp.lang.visual-basic
Titolo: [?][Err.Raise] Probelma insolito...domanda :))

Salve,
ho un form (form1) con un bottone sopra, alla pressione del quale
chiamo un metodo di un oggetto, questo è quello che c'è nel form:
Private Sub cmdAggiungi_Click()
    On Error GoTo ErrAggiungi:
    Set
mp3 = New clsMp3
    mp3.Titolo = txtTitolo.Text
    mp3.Autore =
txtAutore.Text
    mp3.Album = txtAlbum.Text
    mp3.Anno = txtAnno.Text
mp3.Genere = txtGenere.Text
    mp3.Path = txtPath.Text
 
    If
mp3.Aggiungi = fnOK Then
        ' ok
    End If
 
Exit Sub
ErrAggiungi:
    MsgBox "Errore numero: " & Err.Number & _
"Descrizione: " & Err.Description, vbExclamation, App.FileDescription
End
Sub
Mentre nella classe, questo è il codice del metodo in causa:
-----
-------
--
    If m_strPath = "" Then
        intErr = 1001
GoTo ErrAggiungiMp3:
-----
-------
-- 
ErrAggiungiMp3:
Aggiungi = fnNO
 
    Select Case intErr
        Case 1000
Err.Raise intErr, "clsMp3", strTitoloAutore
        Case 1001
Err.Raise intErr, "clsMp3", strPath
        Case Else
Connessione.RollbackTrans
 
            Err.Raise 1002,
"clsMp3", Err.Description
    End Select
End Function
Quando la
condizione m_strPath = "" è vera, il programma salta nel punto giusto, si
spulcia il misero case, mi becca il caso giusto ma poi non per quale motivo
invece di passarmi l' errore che genero al chiamante, quindi al form
(form1), mi looppa due volte sul case e poi mi spara qui, nel modulo di
classe, l' errore che genero, come errore di run-time...bhè!?!? Dove è che
ho sbagliato che proprio non capisco??
Aspetto news.
Saluti...
--------------------------------
Inviato via 
http://usenet.iol.it

ho sbagliato che proprio non capisco??
]zac[

La gestione degli errori tienila
solo per i casi veramente non prevedibili.
Io intendevo usarla per ogni
tipo di errore, anche quelli da me creati...vabbè, correggo e poi ti faccio
sapere. Hehehe, ti interessa la faccenda no!! :)
Grazie!! Un altro
zio...andiamo bene :)


in modulo di classe
]zac[

vabbè, cambierò dai, voglio fidarmi...
]zac[

impostate a interrompi solo per errori non gestiti.
Non ho mai verificato una cosa: il compilato come si comporta?
A rigor di logica l'errore dovrebbe propagarsi verso l'alto fino al primo On
Error o fino in cima e dare l' RTE.
E' cosě?
Ciao


Mah... Per gli errori MTS e' il metodo consigliato, se guardi la
documentazione M$...
Peraltro M$ ha implementato il try-catch nel suo ASP-JS... Poi tre anni dopo
si e' svegliata e lo ha implementato in .NET, peccato che .NET sia una
emerita schifezza...
Ciaotutti,
Alessandro

Non ho mai verificato una cosa: il compilato come si comporta?
]zac[

documentazione M$...
]zac[


I tuoi errori sono solo affar tuo: si parte da vbObjectError+512 per gli
errori utente, basta sapere quale errore stai gestendo per non avere
conflitti.
Wrappando sempre gli errori in salita si evita ogni tipo di problema.
Ciaotutti,
Alessandro

Sicuro?
Facciamo cosi uniamo un mio oggetto con un tuo oggetto (che usino tutti e
due gli eventi errore e quindi vbObjectError) in uno stesso progetto e
vediamo se non avvengono confusione coi codici di errore.
Salve
                    Dbg
P.S. il tuo ragionamento mi ricorda quelli della ms (non ti offendere)
*Alessandro* ha scritto nel messaggio
]zac[


 P.S. il tuo ragionamento mi ricorda quelli della ms (non ti offendere)
In effetti e' *il ragionamento M$*, non il mio... Il mio e'
<--->
Public Function MyFunction(Param As String) As Long
End Function
<--->
<--->
    LastError=MyFunction(s)
    If LastError <> E_NO_ERROR Then
    Else
    End If
<--->
come d'altronde insegna il C. Ma _solo_ nei progetti stand-alone.
Negli OCX uso sempre il metodo M$, perche' stai tranquillo che se l'utente
puo' ignorare il risultato di una funzione lo fara' (oppure si dimentichera'
di verificarlo), mentre l'Err.Raise non puo' essere ignorato (beh, puoi
mettere On Error Resume Next, ma a quel punto chi e' causa del suo mal
pianga se stesso :))).
Ciaotutti,
Alessandro

errore gia' usati da Vb o da altro oggetto, pena situazioni tragiche.
Si questo lo concordo, teoricamente per essere sicuro di evitare conflitti
con gli errori del vb dovresti dichirare i tuoi a partire da vbObjectError
+ 513 fino a vbObjectError + 65535.
In questo modo inventi dei numeri
veramente tuoi.
Io ad esempio non l'ho fatto, ma fin' ora non ho mai avuto
problemi perchè numeri da me generati andassero in conflitto con quello di
vb.
