【问题标题】:A nightly task to backup a database to MS Access将数据库备份到 MS Access 的夜间任务
【发布时间】:2016-05-02 12:12:02
【问题描述】:

我正在尝试创建一个夜间任务,它将我的 SQL Server 数据库作为“夜间快照”下载到 MSAccess 2010 中,到目前为止,我已经让它工作了。

我创建了一个包含宏的空白数据库,它可以执行导入,然后优雅地退出。在我的用户名下效果很好:

@echo off
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c%%a%%b)
set dest=c:\temp\%mydate%-RAVEN.accdb
xcopy BLANK_RAVEN_WITH_MACROS.accdb %dest%* /Y
start "C:\Program Files (x86)\Microsoft Office\Office14\MSACCESS.EXE" %dest% /X IMPORT_RAVEN

但是,当我以 SYSTEM 用户身份运行任务时(注意——我不应该以自己的用户名身份运行任务),什么也没有发生。

作为记录,SYSTEM 用户确实有权访问我的其他数据库,并且 SYSTEM 帐户可以将 MS Access 空白文件复制到目标。但是,Access 没有任何反应。我只是看到 MSAccess 在后台无限期地作为 SYSTEM 运行。它永远不会退出

如何通过 SYSTEM 用户帐户运行 MSAccess 和运行宏?

【问题讨论】:

  • 为什么不使用 bcp 备份呢? Access 是否进行了一些额外的处理,如果是,是否可以不直接放在数据库中?
  • Bcp?他能举个例子吗?
  • 这是一个 Sybase 示例,但参数应该非常相似。这会将表备份到文件:bcp sales.dbo.order_header out c:/cdh/temp.dat -n -S myserver -U scott -P tiger。如果您需要恢复它,它将是 bcp <table> in 而不是 out-n 表示“本机”,意味着生成的文件将不可读,但它消除了任何定界错误,处理任何数据类型并且文件大小小于-c 可读输出
  • 顺便说一句,它也非常快,无论是备份还是恢复。

标签: sql-server database windows ms-access scheduled-tasks


【解决方案1】:

Microsoft Access 应用程序 (MSACCESS.EXE) 设计为由“真实”用户运行,因此它可能对其执行环境做出一些假设。其中一个假设可能是运行它的帐户具有可以存储和检索程序设置的标准位置,例如,文件系统中的 %USERPROFILE% 和注册表中的 HKEY_CURRENT_USER。如果在 SYSTEM 等帐户下运行时这些位置不可用,则 MSACCESS.EXE 可能会挂起。

如果可能,请创建一个具有最低必要权限的帐户并在该帐户下运行您的计划任务。

【讨论】:

  • 这在我的 IT 环境中是不可能的。有没有办法通过 ODBC 或一些类似数据库的调用来运行宏?
  • 宏?不。要运行宏,您需要一个 Access 实例,可以通过直接运行 MSACCESS.EXE(如您所做的那样)或通过带有 Access.Application 对象的 COM 自动化。您可以尝试 COM 自动化方法,看看它是否工作得更好,但如果应用相同的假设,我不会感到惊讶。
  • 如果不是宏,那么 Access 中的 VBA 代码呢?可以通过 ODBC 在数据库上执行吗?
  • 没有。 Access 数据库中的 VBA 代码也需要来自 Access 实例的资源。 (这就是自定义 VBA 函数不能用于从 Access 本身外部运行的查询的原因。)
  • 嗯,我想知道是否值得就此联系 Microsoft 支持。我想知道是否可以将它们链接到这个 stackoverflow 页面?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-23
  • 1970-01-01
  • 2013-04-28
  • 2018-01-30
  • 1970-01-01
  • 2023-02-23
相关资源
最近更新 更多