Compattare database access 2007

mercoledì 27 dicembre 2006 - 10.55

Amodio Profilo | Expert


salve a tutti
fino alla versione 2003 usavo la dll : jro
ma ora non va bene per il database access 2007 in quanto da errore "formato database non riconosciuto"

cosa posso usare?

grazie

Cteniza Profilo | Guru

Magari il mio blog ti può aiutare
http://community.visual-basic.it/lucianob/archive/2006/12/17/18246.aspx
Ovviamente devi avere caricato il driver
http://community.visual-basic.it/lucianob/archive/2006/12/17/18244.aspx

Amodio Profilo | Expert

ok
ora ho una difficilta'
come posso utilizzare i driver?
ovvero...quale dll devo referenziare?

grazie

Cteniza Profilo | Guru

Per la connessione al database devi semplicemente impostare la stringa corretta.
Non devi mettere riferimenti se non quelli necessari a jro.
Ovviamente se fai tutto da vb.net.
Ancora non hai detto "da dove" parti per fare la compattazione

Amodio Profilo | Expert

da dove parto? in che senso?

con jro e un database access 2003 bastava indicare il file da compattare e invocare il metodo compact

cosa intendi di preciso? è cambiato qualcosa^?

Cteniza Profilo | Guru

Se ad esempio apri access 2003 come applicazione e vuoi compattare un database 2007 non credo che ci riusciresti.
Quindi se parti da vb6 o vb.net il suggerimento dovrebbe funzionare.
Ovviamente se apri access 2007 come applicazione e durante la compattazione ottieni un errore il problema è tutt'altro.

Amodio Profilo | Expert

ok ok
parto da vb.net

Cteniza Profilo | Guru

Ho fatto delle verifiche.
Neanche mettendo la stringa di connessione corretta è possibile compattare, credo sia un bug non ancora corretto.
Magari puoi partire dal mio esempio.
'
' * Created by SharpDevelop.
' * User: Luciano
' * Date: 31/10/2005
' * Time: 10.18
' *
' * To change this template use Tools | Options | Coding | Edit Standard Headers.
'

Imports System
Imports JRO

Namespace CompactDatabaseAccess
Class MainClass
Private Const Connessione As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%1;Persist Security Info=False"
Public Shared Sub Main(ByVal args As String())
'If args.Length = 0 Then
' args = New String(2) {"dbprova.accdb", "dbprova2.accdb"}
'End If
If args.Length <> 2 Then
Console.WriteLine("Numero Parametri Errato")
Return
End If
CompactAccessDataBase(args(0), args(1), (args(0).ToLower().EndsWith("accdb")))
End Sub

Private Shared Sub CompactAccessDataBase(ByVal sourceFileName As String, ByVal destFileName As String, ByVal Access2007 As Boolean)
' Definizione delle stringhe di connessione per db origine e destinazione
Dim sourceConnection As String
Dim destConnection As String
If Not Access2007 Then
sourceConnection = "Provider=Microsoft.Jet.OLEDB.4.0Data Source=" + sourceFileName
destConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + destFileName
Else
sourceConnection = GeneraStringaConnessioneAccess2007(sourceFileName, "")
destConnection = GeneraStringaConnessioneAccess2007(destFileName, "")
End If

' creazione dell'oggetto (Microsoft Jet and Replication Object)
Dim je As New JRO.JetEngine()

Try
je.CompactDatabase(sourceConnection, destConnection)
Finally
je = Nothing
End Try
End Sub

''' <summary>
''' Genera la stringa di connessione per access 2007
''' </summary>
''' <param name="NomeDataBase">Nome del database completo di path</param>
''' <param name="Password">Password del database, eventualmente passare String.Empty</param>
''' <returns>La stringa già formattata</returns>
''' <remarks></remarks>

Private Shared Function GeneraStringaConnessioneAccess2007(ByVal NomeDataBase As String, ByVal Password As String) As String


Dim OutValue As String = Connessione.Replace("%1", NomeDataBase)

If Password <> "" Then

OutValue = OutValue + "Jet OLEDB:Database Password=" + Password
End If

Return OutValue

End Function
End Class
End Namespace

Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5