Capitolo 10. Cancellazione di un Record

                                                                                                                                                                                                         

10.1 Il bottone CMDDELE

 

L'ultima operazione importante per la gestione della Tabella è la cancellazione di un Record.

 

Vogliamo cioe’ creare un bottone, premendo il quale compaia la solita maschera a tutto schermo “ARTSK2”, che mostri tutti i dati del Record su cui eravamo posizionati in modo da permettere un controllo che questo è proprio il Record che vogliamo cancellare. A questo punto si deve poter procedere alla cancellazione oppure poter abbandonare l'operazione.

 

Continuando al solito modo in Cartella ESERCIZIO_08_09_10_ADO  passiamo al bottone a nome “CMDDELE”, Caption “Cancella”.

 

Per l’evento Click di questo bottone scriviamo:

 

Private Sub cmdDele_Click()

On Error GoTo errori

 

'prepara maschera

'----------------

arttext

artfresca

arttext

 

'controlla rete

'----------------

If art11!fliprete = 1 Then

MsgBox ("il Record è in uso. attendere e ritentare")

Exit Sub

End If

 

'blocca rete

'--------------------

art11!fliprete = 1

art11.Update

 

'mostra maschera

'--------------------

Artsk2.cmdConfDele.Visible = True

Artsk2.cmdAbandon.Visible = True

Artsk2.Show

Artsk1.Enabled = False

 

'routine errori

'------------------

Exit Sub

errori:

Select Case Err

Case 3167, 3021

MsgBox ("sorry. il Record nel frattempo è stato" & acapo & " cancellato da un altro utente !")

art11.MoveFirst

 

Case Else

MsgBox ("errore imprevisto No. " & Err)

End Select

 

End Sub

 

Come si vede la routine è abbastanza simile a quella vista per la lettura di un Record, con la differenza che qui si controlla che nessun altro utente in quel momento abbia aperto il Record (FLIPRETE=1), oltre al solito controllo standard che qualche altro utente non abbia nel frattempo eliminato il Record.

 

Anche qui per il bottone “CMDABANDON” del “ARTSK2” vale quanto visto per l’Editing di un Record esistente. In entrambi i casi, infatti, se si cambia idea e si decide di non modificare o di non cancellare il Record invocato con il “CMDEDIT” o con il “CMDDELE” , occorre riportare il Semaforo  “FLIPRETE” al valore zero per permettere ad altri utenti di accedere ad esso.

 

Private Sub cmdAbandon_Click()

 

If cmdConfEdit.Visible = True Or cmdConfDele.Visible = True Then

art11!FLIPRETE = 0

art11.Update

End If

 

Artsk1.Enabled = True

Unload Artsk2

End sub

 

 

10.2 Il bottone CMDCONFDELE

 

Per il bottone “CMDCONFDELE scriviamo invece in “ARTSK2” questa Subroutine:

 

Private Sub cmdConfDele_Click()

 

'cancella

'-------------------------

art11.Delete

DoEvents

 

‘bof

‘-------------------------

If art11.BOF() Then

artvuoto = True

Artsk1.butfalse

Artsk1.cmdexit.Enabled = True

Artsk1.cmdnew.Enabled = True

Artsk1.Enabled = True

Unload Artsk2

End If

 

'ritorna a video lists

'------------------------

Artsk1.Enabled = True

Unload Artsk2

 

End Sub

 

Come si vede, la routine di cancellazione elimina il Record ei il puntatore passa automaticamente al  Record precedente.

 

Nel caso che il Record cancellato sia proprio il primo della Tabella, si verifica l’evento BOF() (beginning of file) per cui si disabilitano tutti i bottoni di “ARTSK1” tranne quelli che permettono l’inserimento di un nuovo Record oppure l’uscita.

 

In condizioni normali, invece, dopo la cancellazione si opera  un rinfresco del RecordSet (basato sul nuovo posizionamento di Record) e si torna quindi sul  DataGrid in “ARTSK1” ove si vede la nuova situazione.

 

 

10.3 Apertura in VB.NET

 

Continuando al solito modo in Cartella ESERCIZIO_08_09_10_NET e  passiamo al bottone a nome “CMDDELE”, Caption “Cancella” di

“ARTSK1”:

 

Private Sub cmdDele_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdDele.Click

        On Error GoTo errori

        'rinfresca

        '----------------

       artfields()
       Artsk2.txtArtcodi.Text = art11_ARTCODI       

       artfresca()

       arttext()

 

        'controlla rete

        '----------------

        If art11_FLIPRETE = 1 Then

            MsgBox("il Record è in uso. attendere e ritentare")

            Exit Sub

        End If

        

         'blocca rete

        '----------------

         artfields()

         SQL1 = "UPDATE ARTFILE set FLIPRETE=1"

         SQL1 = SQL1 & " where ARTCODI = " & art11_ARTCODI & " "

         Updata()

 

         'mostra maschera

        '----------------

        Artsk2.txtArtcodi.Enabled = False

        Artsk2.cmdConfDele.Visible = True

        Artsk2.cmdAbandon.Visible = True

        Artsk2.Show()

        Me.Enabled = False

 

        'routine errori

        '------------------

        Exit Sub

errori:

        MsgBox("sorry. il Record nel frattempo è stato" & acapo & " cancellato da un altro utente !")

        art11.MoveFirst()

 

    End Sub

 

Anche qui si controlla che nessun altro utente in quel momento abbia aperto il Record (FLIPRETE=1), oltre al solito controllo standard che qualche altro utente non abbia nel frattempo eliminato il Record.

 

Passiamo quindi all’”ARTSK2” e vediamo il bottone “CMDCONFDELE”:

 

    Private Sub cmdConfDele_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdConfDele.Click

 

        On Error GoTo errori

        'cancella

        '---------------------------

        SQL1 = "DELETE from ARTFILE  where ARTCODI = " & art11_ARTCODI & " "

         Updata()

        art11.MovePrevious()

 

        'rinfresca

        '---------------------------

        artfields() 

        txtArtcodi.Text = art11_ARTCODI

        artfresca()

 

        'ritorna a video lista

        '---------------------------

        Artsk1.Enabled = True

        Me.Close()

 

        'errore di Tabella vuota

        '---------------------------------

        Exit Sub

 

errori:

        '---

        artvuoto = True

        Dt_ARTFILE.Clear()

        Da_ARTFILE.Fill(Dt_ARTFILE)

        art11.DataSource = Dt_ARTFILE

        Artsk1.DataGridView1.DataSource = art11

        '---

        Artsk1.butfalse()

        Artsk1.cmdExit.Enabled = True

        Artsk1.cmdNew.Enabled = True

        Artsk1.Enabled = True

        Me.Close()

 

    End Sub

 

La routine cancella il Record con una query SQL, effettua un rinfresco e ritorna ad “ARTSK1”.

 

Nel caso che il Record cancellato sia proprio l’ultimo rimasto e che quindi la Tabella rimanga vuota, si intercetta l’errore di “BOF”  con l’istruzione “ART11.MOVEPREVIOUS” e si lancia la “BUTFALSE” lasciando attivi solo i bottoni di nuovo inserimento e di uscita.

 

 

 

Fine del Capitolo 10. cancellazione di un Record