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.

Rispondi quotando