这可以是将一些用户表(DDL和数据)从Oracle数据库导出到Microsoft Access数据库的简单方法。自动,这意味着无需用户交互。
UPDATE :Access数据库上的链接表会引发用户/密码对话框以连接oracle,这不是一个有效的选项。
答案 0 :(得分:4)
您可以在MS Access中设置链接表,它指向实际的Oracle数据而不是复制它。这样,数据始终是最新的。
否则,您需要创建一个预定的进程,或者每次打开MS Access数据库时都可以通过VBA代码执行导入。
个人而言,我会选择链接表。
答案 1 :(得分:0)
关于以下代码的一些注释:
它不会检查表格是否已经先链接。如果是,您将得到一个您将不得不处理的错误。
用户名和密码以明文形式传递,这存在安全风险。有人可以打开您的数据库代码并获取连接到数据库所需的所有信息。可能会造成一些伤害。如果这对您很重要,您需要将Access数据库编译为MDE并进行分发,或者找到一些加密/解密连接信息的方法。
您可以使用ADOX链接表而不提示输入用户ID和密码。首先,设置对“ Microsoft ADO Ext.2.8 for DDL and Security ”libary(VBA编辑器中的Tools \ References ...)的引用。如果在可用引用列表中没有看到此条目,请浏览“msadox.dll”并手动添加。您的版本号可能会有所不同,具体取决于您的Access版本(我在这里使用2003)。
然后,您可以使用此类代码链接到Oracle表:
Sub LinkOracleTable(Server, UserID, Password, Schema, TableName)
Dim tbl As New ADOX.Table
Dim cat As New ADOX.Catalog
Set cat.ActiveConnection = CurrentProject.Connection
With tbl
.Name = TableName
Set .ParentCatalog = cat
.Properties("Jet OLEDB:Create Link") = True
.Properties("Jet OLEDB:Link Provider String") = "ODBC;" & _
"Driver={Microsoft ODBC For Oracle};" & _
"Server=" & Server & ";" & _
"Uid=" & UserID & ";" & _
"Pwd=" & Password & ";"
.Properties("Jet OLEDB:Cache Link Name/Password") = True
.Properties("Jet OLEDB:Remote Table Name") = Schema & "." & TableName
End With
cat.Tables.Append tbl
cat.ActiveConnection.Close
End Sub
您可以像这样调用sub:
LinkOracleTable "TNS Service Name", "UserName", "Password", "MySchema", "MyTable"
答案 2 :(得分:0)
Oracle可以使用UTL_FILE写入平面文件。 然后,您需要将它们带到Access数据库可以上载的位置。
Oracle标准版和企业版包含一个JVM,因此您可以在那里使用Java代码通过JDBC连接到Access并以这种方式推送数据。
同时查找异构连接和数据库链接 http://www.oracle-base.com/articles/9i/HSGenericConnectivity9i.php 如果您的Oracle数据库位于可以处理ODBC的服务器上,那么这可能只是一个选项。
最后,根据之前的评论,您可以将数据推送到单独的架构甚至是单独的Oracle数据库(例如免费的Oracle Express版本),并让Access数据库/应用程序从那里获取它。