2015-06-23 71 views
0

我試圖鏈接Oracle表使用下面的Visual Basic 6.0代碼訪問:使用VB6在Access中鏈接到Oracle表:錯誤3000?

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的表中訪問手動鏈接。

另外(正如我在評論中指出的),更改連接字符串中的某些信息(如故意提供不正確的用戶名)會導致不同的錯誤(3146:連接失敗)。這使我相信與數據庫的連接起作用,因爲它似乎能夠區分好的和壞的證書。

+1

該連接字符串看起來不正確 - 特別是'ConnectString'應該是格式'(DESCRIPTION =(ADDRESS =(PROTOCOL = TCP)(HOST = server) (PORT = 7001))(CONNECT_DATA =(SERVICE_NAME = MYDB)))'。 [請點擊此處](https://www.connectionstrings.com/microsoft-odbc-for-oracle/)獲取正確的格式。祝你好運。 –

+0

謝謝你的回覆!我試圖從tnsnames.ora文件中複製你建議格式的字符串,但它沒有幫助。相反,我得到了另一個錯誤消息(3151:無法連接到...)。對於鏈接到的頁面上的所有格式,我都會得到同樣的錯誤。 我認爲問題中的格式適用於連接到數據庫,因爲當我更改ConnectString,Uid或Pwd的值以更改incorect時,它會給我另一個錯誤消息(3146:連接失敗)。 – Anders

回答

1

嘗試使用此連接字符串並忽略「世界」。部分

ODBC; DRIVER = {甲骨文orahome32}; UID =用戶id; PWD =密碼; SERVER =服務器; DBQ =服務器

(I今天早些時候有麻煩與留下的DBQ出連接)

或者,也許你現有的工作,但不管......我想訪問喜歡你一舉創建默認的表,而不是打破上去所以.....

取而代之的是:

Set objTable = objDB.CreateTableDef(strLocalTable) 

objTable.Connect = strConnect 
objTable.SourceTableName = strServerTable 

試試這個:

Set objTable = objDB.CreateTableDef(strLocalTable, dbAttachSavePWD, strServerTable, strConnect) 

(注:dbAttachSavePWD將有助於避免用戶收到提示輸入密碼每次觸及該表的時間;如果不需要,請將其留出)

+0

謝謝你的回答!但是到目前爲止,我還沒有運氣。你的連接字符串給我3146:連接失敗的錯誤。我不認爲我安裝了「Oracle in orahome32」驅動程序,所以我應該在放棄之前先嚐試找到一個。當涉及到Append線時,更緊湊的CreateTableDef給出了和以前相同的錯誤(3000,unkown)。我仍然非常感謝這一努力。 – Anders

+0

啊,呃。如果您能夠手動將表連接到該mdb,那麼他們可能可以將表複製到其他數據庫而不是創建它們?您可以使用查詢嚮導在遠程數據庫上創建表或運行以下SQL:SELECT BASE_TABLE_NAME。* INTO base IN'C:\ path \ to \ base.mdb'FROM BASE_TABLE_NAME; – PractLogical