自动将Oracle用户表导出到MS Access

时间:2009-01-26 00:27:20

标签: ms-access export

这可以是将一些用户表(DDL和数据)从Oracle数据库导出到Microsoft Access数据库的简单方法。自动,这意味着无需用户交互。

UPDATE :Access数据库上的链接表会引发用户/密码对话框以连接oracle,这不是一个有效的选项。

3 个答案:

答案 0 :(得分:4)

您可以在MS Access中设置链接表,它指向实际的Oracle数据而不是复制它。这样,数据始终是最新的。

否则,您需要创建一个预定的进程,或者每次打开MS Access数据库时都可以通过VBA代码执行导入。

个人而言,我会选择链接表。

答案 1 :(得分:0)

警告

关于以下代码的一些注释:

  1. 它不会检查表格是否已经先链接。如果是,您将得到一个您将不得不处理的错误。

  2. 用户名和密码以明文形式传递,这存在安全风险。有人可以打开您的数据库代码并获取连接到数据库所需的所有信息。可能会造成一些伤害。如果这对您很重要,您需要将Access数据库编译为MDE并进行分发,或者找到一些加密/解密连接信息的方法。

  3. 答案

    您可以使用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数据库/应用程序从那里获取它。