JavascriptProva

sabato 21 aprile 2018

INSERT e UPDATE database Access mediante VB.NET

Vediamo se riesco a decifrare il codice per inserire un record nella tabella del database.

L'ho scritto.
Imports System.Data.OleDb
Public Class Form1
    Dim con As New OleDb.OleDbConnection
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        con.ConnectionString = "Provider=microsoft.jet.oleDB.4.0;" &
            "data source=C:\Users\Antonello\Documents\tavoloDB.mdb"
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If Not con.State = ConnectionState.Open Then
            con.Open()
        End If
        Dim cmd As New OleDb.OleDbCommand
        cmd.Connection = con
        cmd.CommandText = "INSERT INTO Tabella (nome,cognome) VALUES('BINGO','BONGO')"
        cmd.ExecuteNonQuery()

        con.Close()


    End Sub
End Class


Ora distruggo il mandala e lo ricostruisco una prima volta.

Ecco la mia ricostruzione:
Imports System.Data.OleDb
Public Class Form1
    Dim con As New OleDb.OleDbConnection

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        con.ConnectionString = "Provider=microsoft.jet.oleDB.4.0;" &
        "data source=C:\Users\Antonello\Documents\tavoloDB.mdb"
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If Not con.State = ConnectionState.Open Then
            con.Open()
        End If
        Dim cmd As New OleDb.OleDbCommand
        cmd.Connection = con
        cmd.CommandText = "INSERT INTO Tabella(nome,cognome) VALUES('PINCO', 'PALLINO')"
        cmd.ExecuteNonQuery()
        con.Close()
    End Sub
End Class
In rosso, la riga che ho dimenticato, ottenendo il risultato "connessione non inizializzata".
Ripeto il Mandala:
Imports System.Data.OleDb
Public Class Form1
    Dim con As New OleDb.OleDbConnection
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        con.ConnectionString = "Provider=microsoft.jet.oleDB.4.0;" &
            "data source=C:\users\antonello\documents\tavoloDB.mdb"
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If Not con.State = ConnectionState.Open Then
            con.Open()
        End If

        Dim cmd As New OleDb.OleDbCommand
        cmd.Connection = con
        cmd.CommandText = "INSERT INTO Tabella(nome,cognome) VALUES('TIZIO','CAIO')"
        cmd.ExecuteNonQuery()
        con.Close()
    End Sub
End Class
Questa volta me la sono cavata solo con un errore di sintassi SQL nel CommandText (VALUE al posto di VALUES).


Ora provo a cambiare il comando SQL per vedere se posso updatare piuttosto che inserire un nuovo dato.
Ecco:
Imports System.Data.OleDb
Public Class Form1
    Dim con As New OleDb.OleDbConnection
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        con.ConnectionString = "Provider=microsoft.jet.oleDB.4.0;" &
            "data source=C:\users\antonello\documents\tavoloDB.mdb"
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If Not con.State = ConnectionState.Open Then
            con.Open()
        End If

        Dim cmd As New OleDb.OleDbCommand
        cmd.Connection = con
        cmd.CommandText = "UPDATE Tabella2 SET nome = 'ABDULLAH'," &
        "cognome ='AKBAR' WHERE id=2;"
        cmd.ExecuteNonQuery()
        con.Close()
    End Sub
End Class
Ho dovuto creare una nuova tabella con il contatore chiamato id perché con l'underscore _id ottenevo un messaggio di errore nella clausola WHERE. Dunque in Access l'underscore non è ammesso, diversamente da quanto accade in Java Android dove è consigliabile.
Questo codice ha funzionato!
Ora su questa tabella di database:
id nome cognome
1 MARIO ROSSI
2 ABDULLAH AKBAR
3 GIUSEPPE VERDI
4 CICCIO PAGNOTTA
5 JOE FETECCHIA
faccio un esercizio: aggiungere PIPPO CAROGNA e sostituire il nome arabo con un nome greco.
Vai!

Ho provato:
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If Not con.State = ConnectionState.Open Then
            con.Open()
        End If

        Dim cmd As New OleDb.OleDbCommand
        cmd.Connection = con
        cmd.CommandText = "INSERT INTO Tabella2(nome, cognome) VALUES('PIPPO','CAROGNA')"
        cmd.ExecuteNonQuery()
        cmd.CommandText = "UPDATE Tabella SET nome='MIKIS',cognome='PARALIRIGORIS'" &
            "WHERE id=2"
        cmd.ExecuteNonQuery()
        con.Close()
    End Sub
ma ottengo errore. Il primo comando me lo esegue, quindi probabilmente il problema sta nel secondo comando. Forse sbaglio qualcosa nell'esecuzione in serie di più comandi.

Ecco, forse ho capito: devo dichiarare come New anche il secondo comando.
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If Not con.State = ConnectionState.Open Then
            con.Open()
        End If

        Dim cmd As New OleDb.OleDbCommand
        cmd.Connection = con
        cmd.CommandText = "INSERT INTO Tabella2(nome, cognome) VALUES('PIPPO','CAROGNA')"
        cmd.ExecuteNonQuery()
        Dim cmd2 As New OleDb.OleDbCommand
        cmd2.Connection = con
        cmd2.CommandText = "UPDATE Tabella2 SET nome='MIKIS',cognome='PARALIRIGORIS'" &
            " WHERE id=2"
        cmd2.ExecuteNonQuery()
        con.Close()
    End Sub
Ho trovato questa soluzione. Non capisco perché non posso usare la variabile cmd per i due comandi...

Comunque la tabella è cambiata:
id nome cognome
1 MARIO ROSSI
2 MIKIS PARALIRIGORIS
3 GIUSEPPE VERDI
4 CICCIO PAGNOTTA
5 JOE FETECCHIA
12 PIPPO CAROGNA
Rimetto un altro nome al numero 2, cancello l'ultimo record (il fatto che riporta l'id = 12 testimonia i vari tentativi con ripetute cancellazioni del record che era stato aggiunto), e riprovo.

Provo così:
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If Not con.State = ConnectionState.Open Then
            con.Open()
        End If

        Dim cmd As New OleDb.OleDbCommand
        cmd.Connection = con
        cmd.CommandText = "INSERT INTO Tabella2(nome, cognome) VALUES('PIPPO','CAROGNA')"
        cmd.ExecuteNonQuery()
        cmd = New OleDb.OleDbCommand
        cmd.CommandText = "UPDATE Tabella2 SET nome='GIULIO',cognome='CESARE'" &
            " WHERE id=2"
        cmd.ExecuteNonQuery()
        con.Close()
...e ottengo l'errore La proprietà connection non è stata inizializzata.

Allora la inizializzo.
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If Not con.State = ConnectionState.Open Then
            con.Open()
        End If

        Dim cmd As New OleDb.OleDbCommand
        cmd.Connection = con
        cmd.CommandText = "INSERT INTO Tabella2(nome, cognome) VALUES('PIPPO','CAROGNA')"
        cmd.ExecuteNonQuery()
        cmd = New OleDb.OleDbCommand
        cmd.Connection = con
        cmd.CommandText = "UPDATE Tabella2 SET nome='GIULIO',cognome='CESARE'" &
            " WHERE id=2"
        cmd.ExecuteNonQuery()
        con.Close()
    End Sub
Non ho avuto messaggi di errore.
Ora vediamo la tabella:
id nome cognome
1 MARIO ROSSI
2 GIULIO CESARE
3 GIUSEPPE VERDI
4 CICCIO PAGNOTTA
5 JOE FETECCHIA
13 PIPPO CAROGNA
14 PIPPO CAROGNA
Perfetto! La duplicazione di PIPPO CAROGNA è dovuta al fatto che ho dimenticato di eliminare il record aggiunto quando l'esecuzione è stata interrotta per il primo errore.
Ho dimenticato una clausola WHERE nell'UPDATE, e mi ha updatato tutti i records con un solo valore. Cancello manualmente e ricostruisco la tabella a mano (gli ID sono tutti sbagliati).
Ecco la nuova tabella:
id nome cognome
16 MARIO ROSSI
17 GIULIO CESARE
18 GIUSEPPE VERDI
19 CICCIO PAGNOTTA
20 JOE FETECCHIA
21 PIPPO CAROGNA
Ora vediamo con questo codice:
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If Not con.State = ConnectionState.Open Then
            con.Open()
        End If

        Dim cmd As New OleDb.OleDbCommand("INSERT INTO Tabella2(nome,cognome) VALUES('ANTONIO','CICCETTI')", con)
        Dim cmd2 As New OleDb.OleDbCommand("UPDATE Tabella2 SET nome='YOUSSEF',cognome='KHANZIR'" &
                                           " WHERE id=17", con)
        cmd.ExecuteNonQuery()
        cmd2.ExecuteNonQuery()
        con.Close()
    End Sub
Vediamo...

id nome cognome
16 MARIO ROSSI
17 YOUSSEF KHANZIR
18 GIUSEPPE VERDI
19 CICCIO PAGNOTTA
20 JOE FETECCHIA
21 PIPPO CAROGNA
23 ANTONIO CICCETTI
Ho dovuto cambiare da 2 a 17 per via del casino che ho combinato con gli ID cancellando e riscrivendo manualmente.

Nessun commento:

Posta un commento