|
|||||||
Почему я не могу использовать "CompactDatabase" в DAO.DBEngine.36 с помощью VBscript?
Время создания: 14.10.2019 06:44
Текстовые метки: VBA_Access, Compress
Раздел: Разные закладки - VBA - Access - Compress
Запись: xintrea/mytetra_db_adgaver_new/master/base/1571024640ms1e9evg59/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
'Работает из Excel '===================================================================== Sub test_SjatBazuDannihAccess() strPathDb = Range("strPathDb").Value 'путь к основной базе Call SjatBazuDannihAccess(strPathDb) End Sub '--------------------------------------------------------------------- Sub SjatBazuDannihAccess(ByVal strPathDb As String) 'http://qaru.site/questions/1048800/why-cant-i-use-compactdatabase-in-daodbengine36-using-vbscript Dim objFSO Dim objEngine Dim strDstName Dim strPassword 'strPassword = "" '"foo" strPathFolderTemp = w_OS.fun_strPathFolderTemp() 'папка для создания временной базы
strDstName = strPathFolderTemp & "MyDatabaseTemporary.accdb" 'определить имя файла+расширение Dim strBackup As String, strPath As String, strName As String, strExt As String strPath = m_CDC_BUMPER.FnStrPathInFullPath(strPathDb) strName = m_CDC_BUMPER.FnStrNameInFullPath(strPathDb) strExt = m_CDC_BUMPER.FnStrExtInFullPath(strPathDb) strBackup = strPath & "Backup_" & strName '& strExt Set objEngine = CreateObject("DAO.DBEngine.120") 'Set acc2007 = 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 strPathDb, strBackup
''dbVersion120 = 128 objEngine.CompactDatabase strPathDb, strDstName, , 128, "" '";pwd=" & strPassword
objFSO.DeleteFile strPathDb objFSO.MoveFile strDstName, strPathDb 'End If 'LckFile End Sub '===================================================================== Почему я не могу использовать "CompactDatabase" в DAO.DBEngine.36 с помощью VBscript? Я пытаюсь сделать небольшой VBScript, который сжимает файл базы данных MS Access 2007. Код, который у меня есть: Set acc2007 = CreateObject("DAO.DBEngine.36") acc2007.CompactDatabase "C:\test.accdb", "C:\test2.accdb", Nothing, Nothing, ";pwd=test" Set acc2007 = Nothing Я получаю эту ошибку, когда я запускаю три строки с помощью "cscript test.vbs" из 32-разрядного cmd.exe: C:\test.vbs(10, 1) DAO.DbEngine: непризнанный формат базы данных 'C:\test.accdb'. База данных была создана с MS Access 2007, когда я открываю ее, дважды щелкнув значок, я набираю пароль "test", а затем я нормально открываю. Он говорит "Access 2007" вверху, поэтому он имеет правильный формат. Здесь документация о функции, которую я пытаюсь использовать: http://msdn.microsoft.com/en-us/library/bb220986.aspx Объект DAO.DBEngine.36 создан успешно, так как я не получаю никаких ошибок в этой строке. Что может быть неправильным? +5 database ms-access vbscript compression Mike 28 июн. '10 в 15:26 источник поделиться DAO 3.6 не поддерживает новый формат базы данных ACCDB. Вместо этого попробуйте DAO.DBEngine.120. Вот пример, который работает в моей системе. Dim objFSO Dim objEngine Dim strLckFile Dim strSrcName Dim strDstName Dim strPassword strLckFile = "C:\Access\webforums\foo.laccdb" strSrcName = "C:\Access\webforums\foo.accdb" strDstName = "C:\Access\webforums\compacted.accdb" strBackup = "C:\Access\webforums\foobackup.accdb" strPassword = "foo" 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, ";pwd=" & strPassword objFSO.DeleteFile strSrcName objFSO.MoveFile strDstName, strSrcName End If 'LckFile Примечание. Я решил сделать резервную копию моей базы данных до компактности. В конце я удаляю исходную (некомпактную) базу данных и переименовываю сжатый в исходное имя. Если вас это не интересует, вы можете упростить это, удалив материал objFSO. Изменить: пересмотрен для проверки файла блокировки; если ничего не найдено. +6 HansUp 28 июн. '10 в 15:42 источник поделиться Вышеуказанная команда не будет работать для Access 2007 и 2010. В то время как все версии Windows, возвращающиеся к 2000 году и, возможно, даже Windows 98, поставляются с копией движка Jet для Access 2007 и выше, если вы используете формат NEW (accdb), тогда вам нужно используйте новую версию движка Jet под названием ACE. Обратите внимание, что этот механизм данных НЕ установлен по умолчанию в Windows, поэтому вам нужно загрузить его из Microsoft . Конечно, если у вас уже установлен Access 2007, то у вас есть новый движок Jet (ACE), и вам НЕ нужно загружать и устанавливать программное обеспечение, упомянутое выше. Новое имя объекта, которое вам нужно, DAO.DBEngine.120, поэтому измените свой код на: Set acc2007 = CreateObject("DAO.DBEngine.120") Обратите внимание, что также доступна 64-разрядная версия. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|