现在,我只是在使用powershell,但我打算将此概念移植到JScript并在.NET
中使用ActiveXObject('Access.Application')
jsc。我已使用$accessapp.DoCmd.OpenQuery("MyQuery")
打开查询,并且可以看到它已使用$accessapp.CurrentData.AllQueries("MyQuery")
加载。我想使用$accessapp.DoCmd.OutputTo(acOutputQuery, "MyQuery",<acFormat>, <file>)
,但是由于某些原因,我不断收到错误消息:
Unexpected token 'acOutputQuery' in expression or statement
仅运行$accessapp.DoCmd.OutputTo
即可显示出预期的结果:
void OutputTo (AcOutputObjectType, Variant, Variant, Variant, Variant, Variant, Variant, AcExportQuality)
我所见过的所有资源,包括Microsoft OutputTo documentation都以这种方式使用acOutputObjectType
,所以我很困惑。
答案 0 :(得分:1)
好的,抱歉,我花了一段时间才回来。感谢@HansUp引导我走上正确的道路。我使用了他发布的AcOutputObjectType enumeration 链接以及MS Constants Enumeration。我将同时提供一个powershell示例和一个MS JScript示例。在这里,我将this.videoPlayer
和acOutputQuery
分别用作xcFormatTXT
和1
,但是上面两个链接中还有许多其他内容。
powershell:
"MS-DOS"
MS JScript:
$acc = New-Object -com Access.Application
$acc.OpenCurrentDatabase("<path_to_file>.accdb")
$acc.DoCmd.OpenQuery("MyQuery")
$acc.DoCmd.OutputTo(1,"MyQuery","MS-DOS", "<path_to_output_file>.txt")
这两个既快又脏。由于现在可以在JScript中进行此操作,因此我可能会制作一个function writeToTextFile(dbPath,queryName,outputPath){
var acc = new ActiveXObject("Access.Application"); //create new COM instance
acc.OpenCurrentDatabase(dbPath+".accdb"); //open the database
if(!acc.CurrentData.AllQueries(queryName).IsLoaded){
acc.DoCmd.OpenQuery(queryName); //load the query if it is not loaded yet
}
acc.DoCmd.OutputTo(1,queryName,"MS-DOS",outputPath+".txt"); //write to file
}
函数,该函数将格式作为参数。我考虑过使用一个对象将名称字符串映射到枚举,但是我不知道它实际上有多有用。我想,如果您愿意,也可以将输出对象作为参数,但是我现在只打算使用查询对象。