我们正在将Access数据库与Java一起用于项目。我们在Access数据库中有一些宏,我们需要从Java运行它们。有没有办法从Java执行这些宏?
答案 0 :(得分:4)
以下代码适用于Windows 8.1上的NetBeans 8。它写一个临时的VBScript文件,然后使用cscript.exe运行它:
package runaccessmacro;
import java.io.*;
public class RunAccessMacro {
public static void main(String[] args) {
String dbFilePath = "C:\\Users\\Public\\Database1.accdb";
String vbsFilePath = System.getenv("TEMP") + "\\javaTempScriptFile.vbs";
File vbsFile = new File(vbsFilePath);
PrintWriter pw;
try {
pw = new PrintWriter(vbsFile);
pw.println("Set accessApp = CreateObject(\"Access.Application\")");
pw.println("accessApp.OpenCurrentDatabase \"" + dbFilePath + "\"");
pw.println("accessApp.DoCmd.RunMacro \"doRidLogUpdate\"");
pw.println("accessApp.CloseCurrentDatabase");
pw.println("accessApp.Quit");
pw.close();
Process p = Runtime.getRuntime().exec("cscript /nologo \"" + vbsFilePath + "\"");
p.waitFor();
BufferedReader rdr =
new BufferedReader(new InputStreamReader(p.getErrorStream()));
int errorLines = 0;
String line = rdr.readLine();
while (line != null) {
errorLines++;
System.out.println(line); // display error line(s), if any
line = rdr.readLine();
}
vbsFile.delete();
if (errorLines == 0) {
System.out.println("The operation completed successfully.");
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
注意:
这只适用于安装了Microsoft Access(实际应用程序,而不仅仅是Access数据库引擎)的Windows计算机。
" bitness"运行Java代码的JVM应该与" bitness"匹配。安装的Access版本(即64位或32位)。
在某些情况下可能需要进行一些调整,例如,默认情况下,Web服务器执行的Java代码可能会被禁止外出到cscript.exe。