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 FETECCHIAfaccio 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 CAROGNARimetto 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 CAROGNAPerfetto! 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 CAROGNAOra 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 CICCETTIHo 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