Ja, het is 2019, maar online kom je nog heel veel oude Access-databases, zoals Access 2000, Access 2002 en Access 2003 tegen. Allen met een .mdb-extensie. Nieuwere versies van Access gebruiken een andere bestandsextensie: .accdb. Hoe converteer je online Access 2003 naar 2007+? Lees verder! …

Voordat we verder gaan moet je de scope van dit artikel even begrijpen. De Microsoft Jet Database Engine is de database-engine achter Access, om het versimpeld te zeggen. Wat je wilt is Jet OLEDB:Engine Type=5 updaten (bijwerken) naar Jet OLEDB:Engine Type=6, dus niet zo zeer Access 2003 naar bijvoorbeeld Access 2010.

Daarom wil je de bestandsindeling van Access omzetten, of zogezegd:

Een Access MDB-database converteren naar de ACCDB-bestandsindeling

En dat converteren van Jet-versie naar de ACCDB-bestandsindeling kan met een klein classic ASP-script. Een voorwaarde is dat minimaal de driver Microsoft Access database engine 2007 is geïnstalleerd in de webserver IIS, maar bij voorkeur een nieuwere zoals Microsoft Access Database Engine 2010 Redistributable of Microsoft Access Database Engine 2016 Redistributable.

<%
Dim objFSO
Dim objEngine
Dim strLckFile
Dim strSrcName
Dim strDstName
Dim strBackup
strLckFile = "D:\www\pad\naar\database\db.ldb"
strSrcName = "D:\www\pad\naar\database\db.mdb"
strDstName = "D:\www\pad\naar\database\db.accdb"
strBackup = "D:\www\pad\naar\database\db_backup.accdb"
Set objEngine = CreateObject("DAO.DBEngine.120")
Set objFSO = CreateObject("Scripting.FileSystemObject")
If Not (objFSO.FileExists(strLckFile)) Then
If (objFSO.FileExists(strBackup)) Then
objFSO.DeleteFile strBackup
End If
If (objFSO.FileExists(strDstName)) Then
objFSO.DeleteFile strDstName
End If
objFSO.CopyFile strSrcName, strBackup
' dbVersion120 = 128
objEngine.CompactDatabase strSrcName, strDstName, , 128
End If
%>

Bron: @HansUp op Stack Overflow.

Verander de vier variabelen strLckFile, strSrcName, strDstName en strBackup. Merk hierbij op dat strSrcName het bronbestand is en strDstName het doelbestand (de nieuwe database). Sla dan het bestand op als bijvoorbeeld convert.asp, en upload het naar jouw website.

Als je hierna je het script uitvoert in de browser, dan zul je zien dat db.accdb een nieuw bestand is, gemaakt met db.mdb Access database als invoer. Ook is de bestandsgrootte van het .accdb Office Access-bestand iets groter.

Beschik je over Microsoft Office Access dan kun je de oude database openen en en kiezen voor opslaan als.

Office Access versieVersienummerJet versie
Access 200210.04.0 SP1
Access 200311.04.0 SP1
Access 200712.0ACE 12
Access 201014.0ACE 14
Access 201315.0ACE 14
Access 201616.0ACE 16
Access 201917.0

Gebruik je écht nog Access databases op jouw website? Get real en converteer ze om naar Microsoft SQL Server of minstens MySQL.

Access-database online comprimeren met ASP

Je kunt met classic ASP een Access-database ook comprimeren, of verkleinen. Hierdoor presteert de database en ASP beter. Gebruik hiervoor de volgende code:

<%
' Dit ASP script verkleint (compact) een Access
' database. Hierna redirect het script naar een op te geven
' pagina, bijvoorbeeld als onderdeel van een CMS.
'
' Wijzig "example.com" in je eigen inlognaam en de database
' naam "database.mdb" naar de naam van de database.

Dim LoginNaam, DatabaseNaam, strKlaarURL
Dim strDataBaseFile, strTempFile, strBackupFile
Dim fso, dbEngine, dbVersie, SourceFile, DuplicateFile, CompactedFile

' Uw loginnaam
LoginNaam = "example.com"
DatabaseNaam = "database.mdb" ' of database.accdb

' Database versie (gebruik enkel "2007" of "2003" als string)
dbVersie = "2007"

' Bron database bestand
strDataBaseFile = "z:\Sites\www\" & LoginNaam & "\database\" & DatabaseNaam

' Compacted database bestand
strTempFile = "z:\Sites\www\" & LoginNaam & "\database\tmp_" & DatabaseNaam

' Eventueel Backup bestandsnaam
' voorzie de juiste regel van een comment-teken!

' de bestandsnaam of url van de pagina waarnaar
' het script moet doorverwijzen zodra het klaar is.
strKlaarURL = "default.asp"

' Onder deze regel hoeft je niets aan te passen, tenzij
' je het maken van een backup wilt uitschakelen
' ---------------------------------------------------------------------
'
' I know, that I have to use
'
' CreateObject("DAO.DBEngine.120") to access an accdb file and
' CreateObject("DAO.DBEngine.36") for mdb files
'
Dim Jet_Conn_Partial
If dbVersie = "2007" Then
Jet_Conn_Partial = "Provider=Microsoft.ACE.OLEDB.12.0;Jet OLEDB:Engine Type=6;Data source="
Set dbEngine = CreateObject("DAO.DBEngine.120")
strBackupFile = Replace(strDataBaseFile, "accdb","addbBAK")
Else
Jet_Conn_Partialold = "Provider=Microsoft.Jet.OLEDB.4.0; Data source="
Set dbEngine = Server.CreateObject("JRO.JetEngine")
strBackupFile = Replace(strDataBaseFile, "mdb","BAK")
End If
Set fso = CreateObject("Scripting.FileSystemObject")

If (fso.FileExists(strDataBaseFile)) Then
Set SourceFile = fso.GetFile(strDataBaseFile)

If (fso.FileExists(strTempFile)) Then
Set DuplicateFile = fso.GetFile(strTempFile)
DuplicateFile.Delete

' Eventuele melding
Response.Write "Bestaande tempfile is verwijderd!"
End If

'Eventueel Backup maken
SourceFile.Copy strBackupFile

If dbVersie = "2007" Then
dbEngine.CompactDatabase strDataBaseFile, strTempFile
Else
dbEngine.CompactDatabase Jet_Conn_Partial & strDataBaseFile, Jet_Conn_Partial & strTempFile
End If

SourceFile.Delete
Set CompactedFile = fso.GetFile(strTempFile)
CompactedFile.Copy strDataBaseFile
CompactedFile.Delete

' het script verwijst door naar de volgende pagina zodra het klaar is met
' het compacten van de database.
' Response.Redirect strKlaarURL

' of, geef een tekstuele bevestiging (comment de Response.Redirect regel hierboven)
Response.Write strDataBaseFile & " verkleind."

Set CompactedFile = Nothing
Set SourceFile = Nothing

Else
Response.Write "<b>" & strDataBaseFile & "</b> - Het bestand is niet gevonden!"
End If

Set fso = Nothing
Set dbEngine = Nothing
%>
Leave a Comment

Comments

No comments yet. Why don’t you start the discussion?

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *