Comincio ammettendo le mie carenze:
- provengo da VB6 che conosco non tanto quanto vorrei
- sto faticosamente cercando di convertire in VB.Net un mio programma
- nel programma importo dati tramite un driver ODBC e li uso per popolare Tabelle di Access 2000
- l’import dei dati e il successivo popolamento delle Tabelle avviene in questa forma:

codice:
    Public Sub ImportTipologie()

        Dim rsTipologie As New ADODB.Recordset()
        Dim rsPicam As New ADODB.Recordset()
        Dim sSQLPicam As String, sSQLAccess As String

        sSQLPicam = "SELECT Count(tip_cli_for) From Tipol"
        rsPicam.Open(sSQLPicam, CnPicam, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)
        ' Per informazione CnPicam = "DSN=PicamDev;DBQ=S:\Picam7\ARC\S00;CODEPAGE=1252" - Questa è la connessione al file ODBC

        PB = rsPicam(0).Value
        ProgressBarImport.Maximum = PB

        rsPicam.Close()
        rsPicam = Nothing

        rsPicam = New ADODB.Recordset()

        sSQLPicam = "SELECT tip_cli_for, tip_cod, tip_des FROM Tipol"
        rsPicam.Open(sSQLPicam, CnPicam, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)

        sSQLAccess = "DELETE Tipologie.* FROM Tipologie"
        rsTipologie.Open(sSQLAccess, CnDBserver, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)
        ' Per informazione CnDBserver="Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=S:\ArchivioAccess.mdb"

        sSQLAccess = "SELECT Cli_Fo, CodTp, Tipologia FROM Tipologie"
        rsTipologie.Open(sSQLAccess, CnDBserver, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)

        rsPicam.MoveFirst()

        Do Until rsPicam.EOF
            ProgressBarImport.PerformStep()
            rsTipologie.AddNew()
            rsTipologie("Cli_Fo").Value = Trim(rsPicam("tip_cli_for").Value)
            rsTipologie("CodTp").Value = Trim(rsPicam("tip_cod").Value)
            rsTipologie("Tipologia").Value = Trim(rsPicam("tip_des").Value)
            rsTipologie.Update()
            rsPicam.MoveNext()
            Application.DoEvents()
        Loop

        If rsPicam.State <> ConnectionState.Closed Then
            rsPicam.Close()
            rsPicam.ActiveConnection = Nothing
            Application.DoEvents()
        End If

        If rsTipologie.State <> ConnectionState.Closed Then
            rsTipologie.Close()
            rsTipologie.ActiveConnection = Nothing
            Application.DoEvents()
        End If

    End Sub

Sono conscio del fatto che il sistema che uso è magari un poco obsoleto, ma è più o meno quello che facevo in VB6 dove funzionava alla grande.
Siccome il grande numero di dati gestito determina una notevole espansione del DB, ho la necessità di compattarlo.
Ovviamente con l’accesso alle Tabelle si “apre” i DB di Access con conseguente creazione di un File.ldb
Qui nasce il problema, perché qualche tabella non riesce a chiudersi e di conseguenza anche il DB rimane aperto e la compattazione non può avvenire.
Tra parentesi, ho notato che le Tabelle più ostiche da chiudere sono quelle che istanzio con le Query di Eliminazione.
Ho provato anche in questo modo:
codice:
 Public Function ChiudiDB(PathDB As String)

        Dim Connessione As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=S:\" & PathDB)
        Connessione.Open()
        If Connessione.State <> ConnectionState.Closed Then
            Connessione.Close()
            Application.DoEvents()
        End If

        ChiudiDB = 0

    End Function
istanziando la procedura appena prima della compattazione, ma non c’è verso, se il DB è aperto ed è presente il File.ldb non c’è niente da fare, non si chiude.
Sono convinto che i maestri mi diranno di ricominciare a studiare tutto dall’inizio (e io ci sto provando, sui testi di Balena!!) ma se ci fosse una soluzione drastica per chiudere un DB di Access 2000 aperto, sarei decisamente più contento (non ditemi di chiudere la Form!!)
Per pura informazione, sto importando Dati da una versione del programma di contabilità Picam (Olidata) piuttosto datata.
Qualcuno mi può aiutare?
Ovviamente accetto ogni critica e sono pronto a cospargermi il capo di cenere ma abbiate pazienza, oltre che neofita di VB.Net sono anche "anziano": a febbraio sono 70 e l'età non aiuta.