2015-06-13 8 views
0

У меня есть файл JScript, который вызывается cscript, и этот скрипт является доказательством концепции, которое создает новую базу данных Access 2007, импортирует набор модулей VBA в базу данных, а затем запускает подпрограмму из импортированных модулей.«Unspecified Error» 80004005 при создании новой базы данных Access, только на другой рабочей станции

Этот скрипт работает безупречно на моем собственном компьютере. У меня установлен Office 2013. Тем не менее, я привнес этот сценарий в машину коллеги и попросил его запустить его. На своей машине, мы получаем ошибку, которая выглядела как-то, createdb.js (22, 1): Unspecified error и код ошибки 80004005. Мой код ниже:

'use strict'; 

/** 
* AcNewDatabaseFormat Enumeration 
* Used with the NewCurrentDatabase method to specify the database format of the newly created database. 
*/ 
var acModule = 5, 
    dbText = 10, 
    acNewDatabaseFormat = { 
     UserDefault: 0, 
     Access2000: 9, 
     Access2002: 10, 
     Access12: 12 
    }; 

var fs = new ActiveXObject('Scripting.FileSystemObject'); 
var access = new ActiveXObject('Access.Application'); 
var basePath = fs.GetParentFolderName(WScript.ScriptFullName); 
var db, prop, vcsFolder, fCur, module; 

//Create DB and set up some superficial things. 
access.NewCurrentDatabase(basePath + '\\ImportTest.accdb', acNewDatabaseFormat.Access12, null, "", ""); 
//access.OpenCurrentDatabase(basePath + '\\ImportTest.accdb'); 
db = access.CurrentDb(); 
prop = db.CreateProperty('AppTitle', dbText, 'My New Database'); 
db.Properties.Append(prop); 
prop = db.CreateProperty('StartUpForm', dbText, 'Main Form'); 
db.Properties.Append(prop); 
db.Properties('UseMDIMode') = 1; 

//Add MSAccess-VCS modules 
vcsFolder = fs.GetFolder(basePath + '\\MSAccess-VCS'); 
fCur = new Enumerator(vcsFolder.files); 
for (; !fCur.atEnd(); fCur.moveNext()) { 
    module = fCur.item().Name.replace('.bas', ''); 
    access.LoadFromText(acModule, module, fCur.item()); 
} 

access.Run('ImportAllSource'); 
access.Quit(); 

линии 22, символ 1 является access.NewCurrentDatabase(basePath + '\\ImportTest.accdb', acNewDatabaseFormat.Access12, null, "", "");. Office (и Access!) 2007 установлен на его машине. Мы пробовали другие AcNewDatabaseFormat s без везения. Что может быть здесь проблемой?

+0

У вас нет доступа для записи, где находится «basePath». –

+0

Я тоже думал об этом. НО, мы копируем папку на свои рабочие столы и, когда папка скопирована, текущий пользователь становится владельцем папки и файлов внутри. Они могут изменять сценарии и создавать новые файлы с помощью параметра «Новый» в контекстном меню в скопированной папке, поэтому у нас есть доступ на запись к «basePath». –

ответ

1

Поскольку вы не используете какой-либо из дополнительных параметров, просто оставьте их:

access.NewCurrentDatabase(basePath + '\\ImportTest.accdb', acNewDatabaseFormat.Access12); 

Вам нужно только указать значение для необязательных параметров, если есть и другие параметры, которые вы хотите использовать позже в список аргументов.

+0

Спасибо! И теперь, в режиме «Доступ вывернутый», теперь он говорит мне, что не может найти процедуру, которую я рассказываю Run() на машине моего коллеги! Но это вопрос для другого вопроса - эта конкретная проблема была решена. –