使用VB6链接到Access中的Oracle表:错误3000?

时间:2015-06-23 10:05:47

标签: oracle ms-access vb6 access-vba database-connection

我正在尝试使用以下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:连接失败)。这使我相信与数据库的连接有效,因为它似乎能够区分好的和坏的凭证。

1 个答案:

答案 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将有助于避免用户每次触摸表时都会被提示输入密码;如果不需要,请将其保留;