我正在尝试使用以下Visual Basic 6.0代码链接Oracle表以进行访问:
Dim objApp, objDB, objTable As Object
Dim strFile, strConnect, strLocalTable, strServerTable As String
strFile = "C:\path\to\base.mdb"
strLocalTable = "local"
strServerTable = "BASE.TABLE_NAME"
strConnect = "ODBC;Driver={Microsoft ODBC for Oracle};ConnectString=name.world;Uid=username;Pwd=password;"
Set objApp = CreateObject("Access.Application")
objApp.OpenCurrentDatabase strFile
Set objDB = objApp.CurrentDb()
Set objTable = objDB.CreateTableDef(strLocalTable)
objTable.Connect = strConnect
objTable.SourceTableName = strServerTable
objDB.TableDefs.Append objTable 'Generates 3000 Error
objDB.TableDefs.Refresh
在我从第二行到最后一行(由我从瑞典语中松散翻译)"运行时错误3000:保留错误(-7778)。此错误没有消息。"
关于为什么会出现这种情况的任何想法?我被告知此代码之前已经有效,因此可能与更新的软件存在某种版本冲突。数据库采用Access 2000格式,并且计算机上安装了Access 2013(但是,将数据库保存为Access 2013没有帮助)。或者连接字符串是否有问题?
编辑:我尝试在连接字符串中使用DSN:
strConnect = "ODBC;Driver={Microsoft ODBC for Oracle};DSN='test';"
我得到了同样的错误,即使我可以使用那个DSN在Access中手动链接表。
另外(正如我在评论中所述)更改连接字符串中的某些信息(如故意提供不正确的用户名)会导致不同的错误(3146:连接失败)。这使我相信与数据库的连接有效,因为它似乎能够区分好的和坏的凭证。
答案 0 :(得分:1)
尝试使用此连接字符串并省略'世界'。部分
ODBC; DRIVER = {Oracle in orahome32}; UID = userId; PWD = password; SERVER = servername; dbq = servername
(我今天早些时候因连接导致dbq问题而遇到麻烦)
或者也许你现有的一个会工作,但无论如何......我认为Access喜欢你一次性创建表默认而不会破坏它......
而不是:
Set objTable = objDB.CreateTableDef(strLocalTable)
objTable.Connect = strConnect
objTable.SourceTableName = strServerTable
试试这个:
Set objTable = objDB.CreateTableDef(strLocalTable, dbAttachSavePWD, strServerTable, strConnect)
(注意:dbAttachSavePWD将有助于避免用户每次触摸表时都会被提示输入密码;如果不需要,请将其保留;