链接ODBC表在Access 2007
问题描述:
我有一个Access 2002应用程序,它通过ODBC使用此代码链接Oracle表:链接ODBC表在Access 2007
Set HRSWsp = CreateWorkspace("CONNODBC", "", "", dbUseODBC)
Set HRSConn = HRSWsp.OpenConnection("HRSCONN", dbDriverPrompt, , "ODBC;")
DoCmd.TransferDatabase acLink, "Database ODBC", HRSConn.Connect, acTable, "SCHEMA.TABLE", "TABLE", False, True
不幸的是,Access 2007中已经不接受这种语法,说是适用于ODBCDirect不支持(运行时错误3847)并建议使用ADO而不是DAO。 有人能告诉我如何修改此代码以满足Access 2007?
答
我发现我可以解决我的问题在一个非常简单的方法,通过删除前两个语句和修改第三是这样的:
DoCmd.TransferDatabase acLink, "ODBC Database", "ODBC;DRIVER=Microsoft ODBC for Oracle;SERVER=myserver;UID=myuser;PWD=mypassword", acTable, "SCHEMA.TABLE", "TABLE", False, True
这样的表将不提示任何东西联系起来。如果我将连接字符串保留为一个简单的“ODBC”,Access会要求指定odbc连接和其他缺少的参数,从而获得我尝试使用前面的语句执行的相同操作。
答
试试这个:
Dim tbl As New ADOX.Table
Dim cat As New ADOX.Catalog
cat.ActiveConnection = _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[x:\your_access_db.mdb];Jet OLEDB:Engine Type=4"
tbl.NAME = "[Access_table_name]"
Set tbl.ParentCatalog = cat
tbl.Properties("Jet OLEDB:Create Link") = True
tbl.Properties("Jet OLEDB:Link Provider String") = "ODBC;Driver={Microsoft ODBC For Oracle};Server=OracleServerName;Uid=[user];Pwd=[password];"
tbl.Properties("Jet OLEDB:Cache Link Name/Password") = True
tbl.Properties("Jet OLEDB:Remote Table Name") = "[Oracle_Schema].[Table]"
cat.Tables.Append tbl
cat.ActiveConnection.Close
替换括号([]
)与你的信息文本。
我发现了一个更短的方式来做我所需要的。无论如何,我感谢你的帮助。谢谢! – 2008-11-27 08:29:01
这段代码没有意义。它使用ADO创建一个ODBC链接表。 DAO更适合这一点。 – 2008-12-02 05:33:53