Autore Topic: Come si implementa il Resume di Visual Basic?  (Letto 987 volte)

Offline ZioCrick

  • Gamberetto
  • *
  • Post: 31
    • Mostra profilo
Come si implementa il Resume di Visual Basic?
« il: 08 Marzo 2013, 23:03:49 »
Per chi proviene da VB6 ...

nella gestione degli errori, con "On Error Goto Label" si poteva saltare ad una sezione di gestione degli errori ed eventualmente con la direttiva "Resume" si poteva riprendere l'esecuzione dall'istruzione successiva a quella che aveva generato l'errore.

Esiste la possibilita' di fare una cosa simile in Gambas?

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.316
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Come si implementa il Resume di Visual Basic?
« Risposta #1 il: 08 Marzo 2013, 23:09:13 »
Hai dato un'occhiata alla gestione degli errori ?

http://www.gambasdoc.org/help/cat/error?it&v3
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline ZioCrick

  • Gamberetto
  • *
  • Post: 31
    • Mostra profilo
Re: Come si implementa il Resume di Visual Basic?
« Risposta #2 il: 08 Marzo 2013, 23:15:17 »
Si. E' proprio per questo che ho posto la domanda.
Siccome ho cercato a lungo nell'help e sul web   senza trovare nulla ... i casi sono i soliti due:
1) l'arteriosclerosi avanza piu' velocemente del previsto, e quindi non l'ho visto  :rolleyes:
2) Non c'e'...  :-\

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.316
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Come si implementa il Resume di Visual Basic?
« Risposta #3 il: 08 Marzo 2013, 23:39:03 »
Non so se ho capito bene la tua esigenza, ma può andare bene questa soluzione ?

Codice: gambas [Seleziona]

Public Sub Button1_Click()

' Prova ad eseguire il comando...
   Try Print 2 / 0

' se viene commesso un errore....
   If Error Then Print "Errore !"

' Va avanti
   Print "passo in avanti"

End

 
     :-X
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline ZioCrick

  • Gamberetto
  • *
  • Post: 31
    • Mostra profilo
Re: Come si implementa il Resume di Visual Basic?
« Risposta #4 il: 10 Marzo 2013, 00:17:09 »
Non so se ho capito bene la tua esigenza, ma può andare bene questa soluzione ?
Non proprio. Mi spiego...
Nei miei programmi la gestione degli errori e' centralizzata.
Per cui la struttura di ogni routine e' piu' o meno questa:

Sub Vatelapesca()

On Error GoTo Gestione_Errori

'---------------------------------
...
'Corpo della routine
'(possono essere anche centinaia di righe)
...

'---------------------------------
Gestione_Errori:
If ErrorKnown(Err.Number) Then Resume
...
'Chiusura e cancellazione degli oggetti utilizzati.
...
Err.Clear
On Error GoTo 0
Exit Sub

End Sub

Dove la Function ErrorKnown fa un certo numero di verifiche ed eventuali tentativi di riparazione dell'errore e se ritorna il valore True significa che la routine Vatelapesca deve provare a continuare, per cui serve il Resume che fa ripartire la procedura da dove si era interrotta.
In caso contrario distrugge tutti gli oggetti aperti nella Vatelapesca (tipicamente dei Recordset, che sono l'equivalente dei Result di Gambas) ed esce, poiche' significa che l'errore non si poteve recuparare e quindi la ErrorKnown ha scaricato lo Stack delle chiamate in un file di log e ha dato l'istruzione di fine programma.

In pratica ho bisogno di un sistema che dopo aver controllato il tipo di errore possa decidere se continuare il programma (con un Resume, perche' non posso sapere in che punto e' successo) oppure bloccare tutto, registrare lo stack e l'errore in un file di log, visualizzare un messaggio per l'utente ed uscire.
Questo e' cio' che dovrebbe fare un programma che si rispetti.  :)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.316
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Come si implementa il Resume di Visual Basic?
« Risposta #5 il: 10 Marzo 2013, 04:01:31 »
Puoi provare a domandare anche a Minisini nella Mailing List internazionale.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.272
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Come si implementa il Resume di Visual Basic?
« Risposta #6 il: 10 Marzo 2013, 11:09:41 »
Penso che tu ti riferisca a Catch...

Guarda nella guida

Offline ZioCrick

  • Gamberetto
  • *
  • Post: 31
    • Mostra profilo
Re: Come si implementa il Resume di Visual Basic?
« Risposta #7 il: 10 Marzo 2013, 20:03:09 »
Penso che tu ti riferisca a Catch...

Guarda nella guida
Se non ho sbagliato guida (l'arteriosclerosi e' sempre in agguato  :rolleyes:) me la sono girata in lungo e in largo e mi sembra di aver capito che la Catch intercetta gli errori (com'era in VB la "On Error Goto Label") ma una volta all'interno della sezione gestita dalla Catch, come faccio a ritornare all'istruzione seguente a quella che ha generato l'errore? (che e' appunto cio' che faceva la Resume).

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.272
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Come si implementa il Resume di Visual Basic?
« Risposta #8 il: 10 Marzo 2013, 20:31:21 »
Ho guardato e riguardato ma penso che un Resume non ci sia... l'unica cosa che puoi usare e' Finally, dove il codice viene comunque eseguito anche avendo generato errori...

Offline ZioCrick

  • Gamberetto
  • *
  • Post: 31
    • Mostra profilo
Re: Come si implementa il Resume di Visual Basic?
« Risposta #9 il: 10 Marzo 2013, 20:34:42 »
Allora penso che sottoporro' la questione a Minisini come suggerito da vuott  :)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Come si implementa il Resume di Visual Basic?
« Risposta #10 il: 11 Marzo 2013, 01:05:11 »
Per chi proviene da VB6 ...

nella gestione degli errori, con "On Error Goto Label" si poteva saltare ad una sezione di gestione degli errori ed eventualmente con la direttiva "Resume" si poteva riprendere l'esecuzione dall'istruzione successiva a quella che aveva generato l'errore.

Esiste la possibilita' di fare una cosa simile in Gambas?

L'istruzione corrispondente a  "On Error Goto Label", come hai potuto constatare dal link che ti ha fornito il bravissimo vuott, è catch. Considera però che Gambas non è VB, perciò non troverai il Resume di VB. Considera pure che dentro una classe puoi mantenere solamente un rimando a catch, quindi se devi gestire più errori, dovrai organizzarti tu dentro la Catch per riconoscerli e gestire ciascuno in maniera appropriata. Poi bisogna vedere se ne hai proprio bisogno; ti dico così perchè io solitamente non la uso, preferisco gestirmi dei semafori, anche attraverso message.box, strutturate con due o tre pulsanti per permettere la scelta delle alternative all'utente. In caso di presenza di alternative automatiche utilizzo semafori logici, attraverso l'uso di variabili di tipo boolean, byte, string o integer.

Io consiglio sempre di prendere confidenza con Gambas senza pensare più a VB. Sono ambienti assai diversi, anche se apparentemente non sembra e, applicare le stesse tecniche di programmazione impiegate in VB, può produrre risultati e provocare errori inaspettati. Quindi inizialmente usalo con cautela e mentre lo usi, studialo. C'è molto da imparare. Io l'ho fatto a mie spese, apportando correzioni su correzioni e,  se dovessi scrivere ora il mio ContabFam  lo farei con una logica diversa.
 :ciao:
:ciao:

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Come si implementa il Resume di Visual Basic?
« Risposta #11 il: 12 Marzo 2013, 12:18:53 »
Quella logica applicata in VB non esiste in Gambas, come anche in tutti gli altri linguaggi, e per il mio parere è oltremodo pericolosa.

Ad ogni modo, Gambas utilizza (limitatamente) una gestione di errori simile a C++/Java, il cui controllo purtroppo è costretto all'interno della singola funzione/metodo.
E' comunque possibile centralizzare la gestione degli errori, utilizzando apposite classi statiche.

In ogni caso non è possibile saltare ad una specifica istruzione (a meno che non venga usato un GOTO, ma sarebbe un suicidio...).

Offline ZioCrick

  • Gamberetto
  • *
  • Post: 31
    • Mostra profilo
Re: Come si implementa il Resume di Visual Basic?
« Risposta #12 il: 12 Marzo 2013, 13:56:10 »
Grazie a Picavbg  e md9327 per le delucidazioni.  :)

Quella logica applicata in VB non esiste in Gambas, come anche in tutti gli altri linguaggi, e per il mio parere è oltremodo pericolosa.
Pero' a me, specialmente nel lato server delle applicazioni risultava parecchio comoda.

Citazione
E' comunque possibile centralizzare la gestione degli errori, utilizzando apposite classi statiche.
Infatti penso che mi inventero' qualcosa di quel genere.

Citazione
....  (a meno che non venga usato un GOTO, ma sarebbe un suicidio...).
Assolutamente d'accordo.   ;D  :2birre: