So benissimo che il Titolo non esplicita quello che dirò, ma non ho trovato altre possibili spiegazioni.
La procedura che sto scrivendo, prevede che un DB di Access 2007 sia residente su di un Server di Rete (il Server si chiama S:\) e che, in determinate situazioni, questo DB venga compattato e poi copiato in una cartella sulle Root dei diversi utilizzatori. Funziona benissimo.
Quando però provo a farlo funzionare sul mio PC di casa, che ovviamente non è una Rete, sono costretto a simulare la Rete stessa; ho partizionato l'HD e una delle partizioni l'ho chiamata, appunto S:\. Anche sul PC di casa funziona tutto, tranne quando chiedo di compattare il DB. Per qualche ragione che non riesco a identificare, la Sub che esegue la compattazione mi dice che un DB è già aperto. Devo ancora specificare che questa anomalia si verifica SOLO se lancio il programma dall'eseguibile, mentre se lo lancio da Visual Studio (in Debug o in Release) l'errore non si presenta.
Questo mi impedisce di fare le necessarie verifiche.
La mia impressione è che, non dovendo il sistema accedere al Server reale, la procedura si svolga troppo rapidamente, ma non ho certezze.
Allego il Codice per il quale viene segnalato l'errore:
codice:
Public Sub CompattaDB()
Try
If File.Exists(dbTemporaneo) Then
Kill(dbTemporaneo)
End If
Dim Conn As New OleDb.OleDbConnection(CnDBServer)
If Conn.State <> ConnectionState.Closed Then
Conn.Close()
Conn = Nothing
End If
Thread.Sleep(1000)
LblAvviaImp.Text = "Compattazione dei Files"
Application.DoEvents()
Dim MioEngine As New Microsoft.Office.Interop.Access.Dao.DBEngine
Dim DbScr As String = DB_Server
Dim DbDes As String = dbTemporaneo
MioEngine.CompactDatabase(DbScr, DbDes)
If Conn.State <> ConnectionState.Closed Then
Conn.Close()
Conn = Nothing
End If
Dim ConnT As New OleDb.OleDbConnection(cnStrAccess & dbTemporaneo)
If ConnT.State <> ConnectionState.Closed Then
ConnT.Close()
ConnT = Nothing
End If
Thread.Sleep(1000)
File.Copy(dbTemporaneo, DB_Server, overwrite:=True)
Catch ex As Exception
MsgBox("Errore durante il tentativo di compattazione del database nella Sub ''CompattaDB'': " & ex.Message)
If File.Exists(dbCopiaBackup) Then
File.Copy(dbCopiaBackup, DB_Server, overwrite:=True)
End If
End Try
End Sub
Come potete vedere ci ho messo di tutto e di più per chiudere i DB e per rallentare l'esecuzione, ma senza risultato. Non è che mi preoccupi più di tanto visto che non devo usarlo a casa, però mi piacerebbe capire come fare per evitare l'errore, perché pur sempre di errore si tratta. Non vorrei, ad esempio, che se un giorno arrivassero PC molto più performanti il problema si presentasse.
Grazie in anticipo a chi vorrà aiutarmi.