Cercando di riuscire nella transizione da Access a un applicativo sviluppato in .NET, sono passato da Cà a VB.NET che sembrava avermi dato qualche risultato.
Sto seguendo gli articoli ".Net la gestione del database Microsoft Access tramite VB.Net e C#" di Emanuele Mattei(sant'uomo) con VS 2022.
Seguiti gli articoli l'applicazione funzionava.
Fatte altre prove con funzionalità semplici(richiamo di una form, passaggio di parametri tra due form, ecc.) ho cercato di provare un altro componente necessario i Report.
Individuate due soluzioni: Reportviewer e Crystal Report.
Seguendo il sant'uomo sopra citato, ho seguito gli articoli con l'installazione e i primi tentativi.
Sono cominciati gli errori che hanno portato a che l'applicazione sviluppata non funzionasse più.
Cercando di fare un passo indietro ho disinstallato il Reportviewer.
Gli errori sono continuati.
Disinstallato VS 2022 e reinstallato.
Ripreso dall'inizio lo sviluppo seguendo l'articolo per la gestione del database.
Sviluppati gli oggetti(secondo articolo) che vengono popolati con i dati di Access e il codice per estrarre i dati al caricamento della Form.
Si ripresenta l'errore "Errore: Eccezione lanciata da un componente esterno".
Disinstallato VS 2022 cercando di ripulire, seguendo le indicazioni
Installato VS 2026. Senza risultato l'errore si ripresenta.
Su un altro pc il progetto si avvia e presenta i dati.
Questo è il codice presente
Imports System.Data.OleDb
Public Class frmInizio
Dim strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=K:\VBasic\Dati.accdb"
Private Sub CaricaDati()
Try
'carico le combobox
Using sqlConnessione As New OleDbConnection(strConn)
sqlConnessione.Open()
Using CommandSql As New OleDbCommand("Select ID, Denominazione FROM Clienti", sqlConnessione)
Using dtaAdapter As New OleDbDataAdapter(CommandSql)
Using dttDati As New DataTable()
dtaAdapter.Fill(dttDati)
CmbClienti.ValueMember = "ID"
CmbClienti.DisplayMember = "Denominazione"
CmbClienti.DataSource = dttDati.DefaultView
End Using
Using dttDati As New DataTable
dtaAdapter.SelectCommand = New OleDbCommand("Select ID, NumeroFattura FROM Fatture", sqlConnessione)
dtaAdapter.Fill(dttDati)
CmbFattura.ValueMember = "ID"
CmbFattura.DisplayMember = "NumeroFattura"
CmbFattura.DataSource = dttDati.DefaultView
End Using
Using dttDati As New DataTable
dtaAdapter.SelectCommand = New OleDbCommand("SELECT fat.*, cli.*, ord.* FROM ((Fatture fat left join Clienti cli on fat.idclienti = cli.id) left join ordini ord on fat.id = ord.idfattura)", sqlConnessione)
dtaAdapter.Fill(dttDati)
DtgDati.DataSource = dttDati
End Using
End Using
End Using
End Using
Catch ex As Exception
MessageBox.Show("Errore: " + ex.Message, "Gestione Errore", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Private Sub FrmInizio_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Try
CaricaDati()
Catch ex As Exception
MessageBox.Show("Errore: " + ex.Message, "Gestione Errore", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
End Class
Nella finestra di controllo immediato è presente il messaggio:
Eccezione generata: 'System.Runtime.InteropServices.SEHException' in System.Data.dll
Non ho trovato una soluzione al problema