Toon posts:

Een acces97 Database comprimeren met script.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil graag wekelijks een acces97 database willen comprimeren op een Xp-pc waar een versie van acces2003 op staat. Nu heb ik een script gemaakt gevonden bewerkt.

Script!

rem batchbestand
<@ECHO OFF

echo --------------------------------- >>C:\cp\compact.log
echo - Comprimeren Database - >>C:\cp\compact.log
echo --------------------------------- >>C:\cp\compact.log
echo --------------------------------- >>C:\cp\compact.log
date /t >>C:\cp\compact.log
time /t >>C:\cp\compact.log
echo Comprimeren gestart >>C:\cp\compact.log
echo --------------------------------- >>C:\cp\compact.log

if exist C:\cp\****.ldb GOTO Ingebruik

Rem Kopieren van database naar de map backup
date /t >>C:\cp\compact.log
time /t >>C:\cp\compact.log
xcopy C:\cp\****.mdb C:\cp\backup\ /y >>C:\cp\compact.log

call cp.vbs

echo ---------------------------------->>C:\cp\compact.log
date /t >>C:\cp\compact.log
time /t >>C:\\cp\compact.log
echo Comprimeren beïndigd >> C:\cp\compact.log
echo ---------------------------------->>C:\cp\compact.log
GOTO einde

:Ingebruik
echo ---------------------------------- >>C:\cp\compact.log
date /t >>C:\cp\compact.log
time /t >>C:\cp\compact.log
echo Comprimeren niet uitgevoerd, database niet vrij >> C:\cp\compact.log
echo ---------------------------------- >>C:\cp\compact.log
:einde

Script:CP.VBS

Dim objScript
Dim objAccess
Dim strPathToMDB
Dim strTempDB
Dim strMsg
strPathToMDB = "C:\cp\***.mdb"
strTempDB = "C:\cp\***001.mdb"
Set objAccess = CreateObject("Access.Application.8")
objAccess.DBEngine.CompactDatabase strPathToMDB, strTempdb, , , ";PWD=sbb"
If Err.Number > 0 Then
strMsg = "The following error was encountered while compacting database:"
strMsg = strMsg & vbCrLf & vbCrLf & Err.Description
msgbox strMsg
Else
Set objScript= CreateObject("Scripting.FileSystemObject")
objScript.DeleteFile strPathToMDB
objScript.CopyFile strTempDB, strPathToMDB, True
objScript.DeleteFile strTempDB
End If
Set objAccess = Nothing
Set objScript = Nothing

Nu werkt dit script alleen op een xp-systeem waarop acces97 is geinstalleerd.
Is er een mogelijkheid om dat ook werkend te maken met een geinstaleerde acces2003??
Ik dacht dat het iets te maken had met het acces.application.8 maar kom daar niet uit.

Alvast bedankt.

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Wat dacht je van de .8 veranderen in .11 of weghalen?

Verwijderd

als ik de suggestie van Daos (bv. de .8 weghaal) test, dan blijkt dit (bij mijn setup - office 2003) inderdaad te werken. bizar, ik zou namelijk verwacht hebben dat dit niet zou werken.
m'n eerste ingeving was immers dat het externe DBEngine DAO-object vanaf office XP standaard niet meer gerefereerd wordt, waardoor de aanroep naar dit object vanaf deze versie ook zou mislukken. in dat kader zou een oplossing geweest zijn niet de omweg langs access te maken, maar rechtstreeks het dbengine object uit de DAO bibliotheek aan te spreken.
Visual Basic:
1
2
3
4
'....
set DAODBEngine=createobject("dao.dbengine.35")
daodbengine.CompactDatabase strPathToMDB, strTempdb, , , ";PWD=sbb"
'...

bij het aanmaken van het daodatabasemotorobject is het wel steeds noodzakelijk een versienummer mee te geven (oa. omdat de versies onderling niet volledig compatibel zijn). als je alleen xp & 2003 databases hebt, kan je de versie wijzigen van 35 naar 36.

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Het zit gewoon nog bij office 2003.

Dat MS het kwijt wil klopt. Volgens deze pagina gaat het niet meer werken op een 64-bit os. Volgens mij bedoelen ze daarmee code als createobject("dao.dbengine.35") (dus zonder Access).

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Verwijderd schreef op donderdag 05 april 2007 @ 20:51:
[...]. bizar, ik zou namelijk verwacht hebben dat dit niet zou werken.
m'n eerste ingeving was immers dat het externe DBEngine DAO-object vanaf office XP standaard niet meer gerefereerd wordt,...
Die referentie is alleen van belang voor de IDE en de compiler bij early binding. Omdat vbscript per definitie alleen late binding kent heb je daar dus niks mee van doen. :)

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Verwijderd

Lustucru schreef op vrijdag 06 april 2007 @ 00:43:
Die referentie is alleen van belang voor de IDE en de compiler bij early binding. Omdat vbscript per definitie alleen late binding kent heb je daar dus niks mee van doen. :)
klopt, ik heb het eens nagekeken met de copyfromrecordset methode in excel, een recordset object (maakt niet uit via dao of ado) in late binding blijkt inderdaad benaderbaar.
Visual Basic:
1
Range("a1").CopyFromRecordset CreateObject("dao.dbengine.36").OpenDatabase("d:\temp\test.mdb").openrecordset("select * from testtabel")
ik was in de veronderstelling dat aangezien de omweg gemaakt wordt via het excelrange object (of het accesstoepassingobject voor dbengine) deze enkel via early binding zouden beschikbaar zijn :) .

Verwijderd

Topicstarter
Het is gelukt met de oplossing van heretic :) Heel erg bedankt!
Pagina: 1