从脚本自动填充 Access 数据库
Posted
技术标签:
【中文标题】从脚本自动填充 Access 数据库【英文标题】:Automatically populate an Access database from a script 【发布时间】:2011-12-14 08:16:58 【问题描述】:我有一个脚本,可以将数据库中的数据下载到一系列 CSV 文件中。下载后,必须将它们加载到 Access 数据库中进行报告(我使用 DoCmd.TransferText,并保存了文本导入规范)。每次我运行生成数据并下载到 CSV 的作业时,我通常需要加载到未填充版本的 Access 数据库的新副本中。有没有办法在批处理脚本中自动执行此操作?
简而言之,我需要能够:
将未填充的 Access 文件复制到名称中带有时间戳的新文件中 将目录中与模式匹配的某些 CSV 文件(例如“data_for_reporting_2_20111024_135142.csv”)加载到 Access 文件中。【问题讨论】:
是否可以从其他数据库直接导入 Access ...而不使用 CSV 文件作为中间步骤?如果是这样,这应该更简单。 @HansUp:这在技术上是可行的,但由于 CSV 报告已经被其他用户/工具生成和使用,我宁愿利用我已经拥有的,特别是因为可以大量数据,我不想花时间等待提取两次。它还需要:在使用这些报告的用户的计算机上安装 Oracle 驱动程序(大量管理开销),或者将数据从提取数据库复制到另一个更静态的数据库,这可能有效,但似乎步骤太多。我想让这个过程尽可能简单。 【参考方案1】:我认为你可以使用 VBScript 来做你需要的事情。
将未填充的 Access 文件复制到带有时间戳的新文件中 名字
FileSystemObject.CopyFile "c:\somefolder\template.mdb", "c:\dest\new.mdb"
见CopyFile Method。
加载某些与模式匹配的 CSV 文件(例如 “data_for_reporting_2_20111024_135142.csv”)在目录中放入 访问文件。您可以检查 CSV 文件夹的 Files Collection,确定其中哪些文件名与您的目标模式匹配,然后使用每个匹配的文件名运行 DoCmd.TransferText。
您将从 Access 应用程序实例运行 DoCmd.TransferText:
Option Explicit
Dim appAccess
Dim strMdb
Const cstrFolder = "c:\dest\"
strMdb = "new.mdb"
Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase cstrFolder & strMdb, False
所以,从该实例变量中执行 Transfertext:
appAccess.DoCmd.TransferText [your options]
编辑:这对我来说在 VBA 中创建和测试会更快。所以我想我会用它来代替 VBScript。
在模板 MDB 的标准模块中创建一个函数 SnarfCSV。然后创建一个宏 mcrSnarfCSV,将 SnarfCSV 函数作为其运行代码操作。然后将模板 MDB 复制到新的 MDB 后,使用/x
命令行开关打开新的 MDB 以运行宏。
"Path to MSACCESS.EXE" "Path to your db file" /x mcrSnarfCSV
【讨论】:
好的,那么如何从脚本中调用这一切呢?最终,我想将此作为我脚本的最后一行添加为执行prepare_access_reports.bat
的最后一行,然后就像我有新的访问报告一样。
哦,废话!当您第一次说“我有一个脚本”时,我以为您指的是 VBScript。对不起,我对.bat
太生疏了
嗯,目前一切都从 SQLPlus 脚本运行,但看起来我可以使用 host
命令调用 VBScript,ala host "wscript.exe test.vbs"
,所以这可能仍然有效......我会必须学习一点VBScript,然后试一试。 VBScript 通常是默认部署的吗?如果我可以在用户的机器上安装新组件,我会首先使用 Oracle 客户端。
老实说,我不确定它是否始终可用。我不需要安装任何额外的东西来在 Windows 7 和 2003 上运行 VBScript。我目前没有其他 Windows 版本。
vbscript 应该在基本上任何 Windows 机器上安装并运行。这是“Windows Script Host”的功能。可以阻止 vbscript 文件运行,某些安全软件可能会这样做。通常通过更改 .vbs 文件关联来完成。简而言之,您通常不必担心您的 .vbs 文件无法正常工作。也可以从命令行(批处理文件)调用它们。以上是关于从脚本自动填充 Access 数据库的主要内容,如果未能解决你的问题,请参考以下文章
MS Access:我想要一个启用数据输入的表单来自动填充自动编号,目前我得到的只是(新)