CONTROLLO ERRORI PRIMA DI ESEGUIRE PROGRAMMA

di il
4 risposte

CONTROLLO ERRORI PRIMA DI ESEGUIRE PROGRAMMA

Salve a tutti..!!
Ho scritto un piccolo programma nel quale vengono eseguite una serie di istruzioni controllate con un Try Catch.
Il mio problema è che se ad un certo punto del programma viene generata una eccezione il programma mi avvisa ed esce dalla rouine, ma le istruzioni prima dell'errore sono state eseguite ed io vorrei che questo non accadesse.
Esiste un modo per controllare prima se ci sono eccezioni e poi eseguire il tutto..??

Esempio:
blocco di istruzioni 1 - OK
blocco di instruzioni 2- OK
blocco di istruzioni 3- OK
blocco di istruzioni 4 - OK
errore.................
blocco di istruzioni 5 - NO
blocco di istruzioni 6 - NO
ecc.........

Nell'esempio si evince che se l'eccezione viene generata dopo il blocco di istruzioni 4 queste sonio state già eseguite ma il resto non verrà eseguito.
Io vorrei che il programma venisse eseguito tutto o venisse eseguito proprio.
Qualcuno ha un'idea di come poter farlo..??
Grazie a tutti ..!!

4 Risposte

  • Re: CONTROLLO ERRORI PRIMA DI ESEGUIRE PROGRAMMA

    Posta il codice
  • Re: CONTROLLO ERRORI PRIMA DI ESEGUIRE PROGRAMMA

    If RDOTextBox.Text = "" Or ENTETextBox.Text = "" Or DESCRIZIONETextBox.Text = "" Or DATA_SCMaskedTextBox.Text = "" Or ORA_SCMaskedTextBox.Text = "" _
    Or IMPORTOTextBox.Text = "" Then
    FORM_ERROR.Label1.Text = "Attenzione Campo obbligatorio..!!"
    FORM_ERROR.Label2.Text = "ERRORE DI COMPLILAZIONE "
    FORM_ERROR.ShowDialog()
    Exit Sub
    End If
    Dim lotti As Integer = Me.LOTTITextBox.Text
    'Exit Sub
    ' mythread = New System.Threading.Thread(AddressOf mostra)
    ' Me.Visible = False
    'mythread.Start()
    Me.Panel2.Visible = True
    Me.UseWaitCursor = True
    Me.ProgressBar1.Maximum = 35
    Try
    'CREO LE DIRECTORY - PROCEDURA 1
    Me.ProgressBar1.Value = 1 : Me.Label2.Text = "Creo la directory...."
    Dim directory_gare As String = HOME.ToolStripStatus_directory.Text & "\PREVENTIVI" & "\" & Year(Now)
    Dim cartella_generale As String = directory_gare & "\" & "PD" & "-" & Replace(Trim(UCase(ENTETextBox.Text)), ",", "_") & "-" & Trim(RDOTextBox.Text) '& "-L_" & i
    If System.IO.Directory.Exists(cartella_generale) Then
    FORM_ERROR.Label1.Text = "La Cartella " & cartella_generale & " Esiste Gia'!"
    FORM_ERROR.Label2.Text = "ERRORE DI COMPLILAZIONE "
    Me.UseWaitCursor = False
    FORM_ERROR.ShowDialog()
    Exit Sub
    End If

    'CREO IL FILE CARTELLA GARA - PROCEDURA 2
    Me.ProgressBar1.Value = 2 : Me.Label2.Text = "Creo il file cartella...."

    Me.UseWaitCursor = True
    System.IO.File.Copy(My.Settings.DIR_MODELLI & "\CARTELLINA_PREVENTIVO.doc", cartella_generale & "\CARTELLINA_PREVENTIVO" & "_" & RDOTextBox.Text & ".doc")
    Dim WORD_FILE As documento_word.Application
    Dim CARTELLA_GARA As documento_word.Document
    WORD_FILE = CreateObject("word.Application")
    ' WORD_FILE.Visible = True
    CARTELLA_GARA = WORD_FILE.Documents.Open(cartella_generale & "\CARTELLINA_PREVENTIVO" & "_" & RDOTextBox.Text & ".doc")
    CARTELLA_GARA.Range.Bookmarks("SCADENZA_GARA").Range.Text = DATA_SCMaskedTextBox.Text & " - " & ORA_SCMaskedTextBox.Text
    CARTELLA_GARA.Range.Bookmarks("RDO").Range.Text = RDOTextBox.Text
    CARTELLA_GARA.Range.Bookmarks("ENTE").Range.Text = ENTETextBox.Text
    CARTELLA_GARA.Range.Bookmarks("DESCRIZIONE").Range.Text = DESCRIZIONETextBox.Text

    CARTELLA_GARA.Range.Bookmarks("IMPORTO").Range.Text = Me.IMPORTOTextBox.Text
    CARTELLA_GARA.Range.Bookmarks("DATA_PRESA_IN_CARICO").Range.Text = DATA_PRESA_IN_LAVLabel1.Text

    CARTELLA_GARA.Range.Bookmarks("UTENTE").Range.Text = HOME.ToolStripStatus_utente.Text

    CARTELLA_GARA.Save()
    CARTELLA_GARA.Close()

    CARTELLA_GARA = Nothing
    WORD_FILE.Quit()
    'COPIO E COMPILO IL PROSPETTO CALCOLI
    Me.ProgressBar1.Value = 3 : Me.Label2.Text = "Creo il prospetto calcoli ...."
    System.IO.File.Copy(My.Settings.DIR_MODELLI & "\PR_C_.xlsm", cartella_generale & "\PR_C_" & RDOTextBox.Text & ".xlsm")
    'APRO IL PROSPETTO SCRIVO E SALVO-------------------------------------------------
    Dim oExcel As Object = CreateObject("Excel.Application")
    Dim oBook As Object = oExcel.workbooks.open(cartella_generale & "\PR_C_" & Me.RDOTextBox.Text & ".xlsm")
    Dim oSheet As Object = oBook.Worksheets("LOTTO 1")
    oSheet.Range("A1").Value = Replace(Trim(Me.ENTETextBox.Text), ",", "_") '& " LOTTO " & i & " DI " & lotti

    oSheet.Range("H1").value = Me.IMPORTOTextBox.Text
    With oExcel
    .DisplayAlerts = False
    oBook.SaveAs(cartella_generale & "\PR_C_" & Me.RDOTextBox.Text & ".xlsm")
    .DisplayAlerts = True
    End With

    oSheet = Nothing
    oBook.close()
    oBook = Nothing
    oExcel.QUIT()
    oExcel = Nothing

    ' SALVO IN DATABASE - - PROCEDURA 3
    Me.ProgressBar1.Value = Me.ProgressBar1.Value + 1 : Me.Label2.Text = "Aggiorno il Database...."
    Me.CODICELabel1.Text = "PD_" & Year(Now) & "_" & Me.RDOTextBox.Text
    Me.LINK_CARTLinkLabel.Text = cartella_generale
    Me.Validate()
    Me.GARE_TBindingSource.EndEdit()
    Me.TableAdapterManager.UpdateAll(Me.DB_ADESADataSet1_OK)
    Me.Validate()
    Me.T_DOCUMENTIBindingSource.EndEdit()
    Me.T_DOCUMENTITableAdapter.Update(Me.DB_ADESADataSet1_OK.T_DOCUMENTI)
    Me.ProgressBar1.Value = Me.ProgressBar1.Maximum : Me.Label2.Text = "Finisco...."
    Me.Dispose()
    Me.UseWaitCursor = False 'mythread.Abort()

    'MESSAGGIO CONFERMA - PROCEDURA 4
    FORM_ERROR.PictureBox1.Visible = False : FORM_ERROR.PictureBox2.Visible = True
    FORM_ERROR.Label1.Text = "Gara inserita con successo..!!"
    FORM_ERROR.Label2.Text = "INSERIMENTO PREVENTIVO"
    FORM_ERROR.ShowDialog()


    Attività_in_lavorazione.Button4.PerformClick()
    Catch ex As Exception
    Me.Panel2.Visible = False
    Me.UseWaitCursor = False
    FORM_ERROR.Label1.Text = ex.Message
    FORM_ERROR.Label2.Text = "ERRORE - " & ex.Source
    FORM_ERROR.ShowDialog()
    End Try

    Me.UseWaitCursor = False
    Me.Panel2.Visible = False
  • Re: CONTROLLO ERRORI PRIMA DI ESEGUIRE PROGRAMMA

    Metti il codice dentro l'apposito tag "</>"
  • Re: CONTROLLO ERRORI PRIMA DI ESEGUIRE PROGRAMMA

    Prom ha scritto:


    Il mio problema è che se ad un certo punto del programma viene generata una eccezione il programma mi avvisa ed esce dalla rouine, ma le istruzioni prima dell'errore sono state eseguite ed io vorrei che questo non accadesse. [...]
    Io vorrei che il programma venisse eseguito tutto o venisse eseguito proprio.
    La soluzione che richiedi sembra affine al concetto transazionale di un database, ma prima di approfondire bisogna vedere se ha senso nel tuo contesto, o se non si possa risolvere il tutto in un altro modo.

    Dal codice che hai scritto, si direbbe che tutto sia legato a condizioni che potresti appunto verificare prima di procedere.

    Ad esempio, piuttosto che chiedere di annullare la creazione di una directory appena eseguita perché non trovi un file in una certa posizione, non ha molto senso: anticipa il controllo di tutte le condizioni che potrebbero fare fallire il tuo processo, verificando l'esistenza delle directory, dei file e delle risorse che ti occorrono, e che i valori specificati dall'utente - se ce ne sono - risultino formalmente corretti; dopodiché, esegui le istruzioni che "alterano" lo stato del sistema solo dopo aver completato il processo di validazione preventivo.

    A mio avviso, sarebbe molto più semplice rispetto al dover gestire una "transazione" o codificare anche un eventuale "rollback" di tutte le operazioni che hai eseguito e a cui non puoi dare un seguito a causa dell'errore riscontrato.

    Ciao!
Devi accedere o registrarti per scrivere nel forum
4 risposte