VB Aggiornamento record access da vb.net

Stato
Discussione chiusa ad ulteriori risposte.

System_error

Utente Electrum
11 Aprile 2012
350
69
24
187
Ultima modifica:
Salve a tutti, sto realizzando un programma per la gestione delle entrate, delle uscite e delle fatture per la mia società.
Ho riscontrato due errori importanti, il primo, che è anche quello più urgente è che:
Quando inserisco tutti i dati nel datagridview, mi fa in automatico la somma delle entrate e delle uscite, per poi sommarle al saldo totale, e fin qui tutto ok.
Il problema sorge quando voglio modificare un record dalla colonna "Entrate" o "Uscite", mi modifica il record, ma non aggiorna il saldo totale, come posso fare per far si che si aggiorni tutto in automatico? avevo pensato di sostituire il database di access con una tabella excel, ma non si trovano guide in giro per creare un programma simile con excel.
Il secondo problema è:
Quando apro il programma e aggiungo nuovi record è tutto ok, se dopo averne aggiunto uno provo a eliminarlo o a modificarlo mi da l'errore "Violazione di concorrenza".
Se però chiudo il programma e lo riapro me lo cancella o me lo aggiorna.
Come posso fare? grazie in anticipo a tutti.
Vi posto un po di codici:
-----Bottone aggiungi nuovo
MovimentiBindingSource.AddNew()
MovimentiBindingSource.EndEdit()
Exit Sub


-----Bottone salva
Dim dbcomm As OleDbCommand = dbconn.CreateCommand
saldobox.Text = "0"
dbconn.Open()

dbcomm.CommandType = CommandType.Text

dbcomm.CommandText = "select SUM(Entrate), SUM(Uscite), SUM(Saldo) from movimenti"

Dim reader As OleDbDataReader

reader = dbcomm.ExecuteReader

While reader.Read
entrate = reader(0) + entratebox.Text
uscite = reader(1) + uscitebox.Text
saldo1 = entrate - uscite
saldo = saldo1
Label7.Text = entrate
Label8.Text = uscite
Label9.Text = saldo1
Label15.Text = saldo
saldobox.Text = saldo
Label16.Text = "SALDO = " + Label15.Text + " €"
End While

reader.Close()
dbconn.Close()
MovimentiBindingSource.EndEdit()
MovimentiTableAdapter1.Update(MovimentiDataSet5)
MovimentiDataSet.AcceptChanges()


-----bottone cancella
MovimentiBindingSource.RemoveCurrent()
MovimentiBindingSource.EndEdit()
MovimentiTableAdapter1.Update(MovimentiDataSet5)
MovimentiDataSet.AcceptChanges()


-----bottone chiudi
MovimentiBindingSource.EndEdit()
MovimentiTableAdapter1.Update(MovimentiDataSet5)
MovimentiDataSet.AcceptChanges()
Me.Close()​
Qualcuno sa aiutarmi?
 
Scusa potresti postare tutto il codice? Comunque da quello che posso capire penso sia un problema di connessioni con il database, nel senso che hai una sessione aperta da qualche altra parte che non chiudi e quando provi a fare una modifica di da quell'errore.
 
Si, ti posto tutto il codice.
Per il problema dell'aggiornamento sai come posso fare?


Imports System
Imports System.Data
Imports System.Data.OleDb
Imports ADOX

Public Class Form1
Dim connessione As ADOX.Catalog = New ADOX.Catalog
Dim archiviomovimenti As New OleDbConnection("Provider = Microsoft.JET.OLEDB.4.0;Data Source = C:\Users\Public\movimenti.accdb")
Dim archiviofornitori As New OleDbConnection("Provider = Microsoft.JET.OLEDB.4.0;Data Source = C:\Users\Public\fornitori.accdb")
Dim entrate As Decimal
Dim uscite As Decimal
Dim saldo As Decimal
Dim saldo1 As Decimal

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Form2.Show()
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'TODO: questa riga di codice carica i dati nella tabella 'MovimentiDataSet5.movimenti'. È possibile spostarla o rimuoverla se necessario.
Me.MovimentiTableAdapter1.Fill(Me.MovimentiDataSet5.movimenti)
'TODO: questa riga di codice carica i dati nella tabella 'FornitoriDataSet2.fornitori'. È possibile spostarla o rimuoverla se necessario.
Me.FornitoriTableAdapter.Fill(Me.FornitoriDataSet.fornitori)
Me.Hide()
Form2.Show()
Dim dbcomm As OleDbCommand = dbconn.CreateCommand
dbconn.Open()

dbcomm.CommandType = CommandType.Text

dbcomm.CommandText = "select SUM(Entrate), SUM(Uscite), SUM(Saldo) from movimenti"

Dim reader As OleDbDataReader

reader = dbcomm.ExecuteReader

While reader.Read
entrate = reader(0)
uscite = reader(1)
saldo1 = entrate - uscite
saldo = 0
saldo = saldo + saldo1
Label7.Text = entrate
Label8.Text = uscite
Label9.Text = saldo1
Label15.Text = saldo
Label16.Text = "SALDO = " + Label15.Text + "€"
End While

reader.Close()
dbconn.Close()
End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnaggnuovo.Click
On Error GoTo SaveErr
MovimentiBindingSource.AddNew()
MovimentiBindingSource.EndEdit()
SaveErr:
Exit Sub
End Sub


Private Sub btninserisci_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnsalva.Click
'On Error GoTo SaveErr
Dim dbcomm As OleDbCommand = dbconn.CreateCommand
saldobox.Text = "0"
dbconn.Open()

dbcomm.CommandType = CommandType.Text

dbcomm.CommandText = "select SUM(Entrate), SUM(Uscite), SUM(Saldo) from movimenti"

Dim reader As OleDbDataReader

reader = dbcomm.ExecuteReader

While reader.Read
entrate = reader(0) + entratebox.Text
uscite = reader(1) + uscitebox.Text
saldo1 = entrate - uscite
saldo = saldo1
Label7.Text = entrate
Label8.Text = uscite
Label9.Text = saldo1
Label15.Text = saldo
saldobox.Text = saldo
Label16.Text = "SALDO = " + Label15.Text + " €"
End While

reader.Close()
dbconn.Close()
MovimentiBindingSource.EndEdit()
MovimentiTableAdapter1.Update(MovimentiDataSet5)
MovimentiDataSet.AcceptChanges()
'SaveErr:
'MsgBox("Errore")
'entrate = entratebox.Text
'uscite = uscitebox.Text
'saldo = entrate - uscite

Exit Sub
End Sub


Private Sub btnaggiorna_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnprecedente.Click
MovimentiBindingSource.MovePrevious()
End Sub

Private Sub btnsuccessivo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnsuccessivo.Click
MovimentiBindingSource.MoveNext()
End Sub

Private Sub btncancella_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btncancella.Click
'On Error GoTo SaveErr
MovimentiBindingSource.RemoveCurrent()
MovimentiBindingSource.EndEdit()
MovimentiTableAdapter1.Update(MovimentiDataSet5)
MovimentiDataSet.AcceptChanges()
'SaveErr:
'MsgBox("Errore")

Exit Sub
End Sub


Private Sub btnchiudi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnchiudi.Click
'On Error GoTo SaveErr
MovimentiBindingSource.EndEdit()
MovimentiTableAdapter1.Update(MovimentiDataSet5)
MovimentiDataSet.AcceptChanges()
Me.Close()
'SaveErr:
'MsgBox("Errore")

Exit Sub
End Sub


Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
FornitoriBindingSource.MovePrevious()
End Sub

Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
FornitoriBindingSource.MoveNext()
End Sub

Private Sub Button3_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
On Error GoTo SaveErr
FornitoriBindingSource.AddNew()
FornitoriBindingSource.EndEdit()
FornitoriTableAdapter.Update(FornitoriDataSet)
SaveErr:
MsgBox("Errore")
Exit Sub
End Sub


Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
On Error GoTo SaveErr
FornitoriBindingSource.EndEdit()
FornitoriTableAdapter.Update(FornitoriDataSet)
SaveErr:
MsgBox("Errore")
Exit Sub
End Sub


Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
On Error GoTo SaveErr
FornitoriBindingSource.RemoveCurrent()
FornitoriBindingSource.EndEdit()
FornitoriTableAdapter.Update(FornitoriDataSet)
SaveErr:
MsgBox("Errore")
Exit Sub
End Sub


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Me.Close()
On Error GoTo SaveErr
FornitoriBindingSource.EndEdit()
FornitoriTableAdapter.Update(fornitoriDataSet)
SaveErr:
MsgBox("Errore")
Exit Sub
End Sub


Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim dbcomm As OleDbCommand = dbconn.CreateCommand
dbconn.Open()

dbcomm.CommandType = CommandType.Text

dbcomm.CommandText = "select SUM(Entrate), SUM(Uscite), SUM(Saldo) from movimenti"

Dim reader As OleDbDataReader

reader = dbcomm.ExecuteReader

While reader.Read
entrate = reader(0)
uscite = reader(1)
saldo1 = entrate - uscite
saldo = 0
saldo = saldo + saldo1
Label7.Text = entrate
Label8.Text = uscite
Label9.Text = saldo1
Label15.Text = saldo
Label16.Text = "SALDO = " + Label15.Text
End While

reader.Close()
dbconn.Close()
End Sub

Private Sub Button7_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
Dim result = MsgBox("ATTENZIONE!" + vbCrLf + "Se si modificano manualmente alcuni campi (Entrate, Uscite, Saldo) i dati delle somme potrebbero non corrispondere, contiuare?", MsgBoxStyle.YesNo, "ATTENZIONE!")
If result = MsgBoxResult.Yes Then
'Try
'MessageBox.Show(dbcx.Message)
'Dim customErrorMessage As String
'customErrorMessage = "Concurrency violation" & vbCrLf
'customErrorMessage += CType(ex.Row.Item(0), String)
'MessageBox.Show(customErrorMessage)

MovimentiBindingSource.EndEdit()
MovimentiTableAdapter1.Update(MovimentiDataSet5)
MovimentiDataSet.AcceptChanges()
'End Try
Else
MsgBox("Operazione annullata", MsgBoxStyle.Information, "Informazione")
End If
End Sub
End Class
 
Ho aggiunto una textbox e l'ho associata al campo id della mia tabella, e mi sono accorto che quando aggiungo un nuovo record la textbox assume un valore negativo, cioè -1 per il primo, -2 per il secondo e così via.
Se chiudo e riapro il programma il valore dell'id torna normale, se quello precedente era 50 quelli aggiunti adesso sono diventati 51 il primo, 52 il secondo ecc.
Potrebbe essere questo che mi genera quell'errore?
 
Stato
Discussione chiusa ad ulteriori risposte.