溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

VB6 程序連Ora-06413解決手札

發(fā)布時(shí)間:2020-07-07 16:47:10 來源:網(wǎng)絡(luò) 閱讀:1755 作者:snowhill 欄目:關(guān)系型數(shù)據(jù)庫(kù)

原由

Win7 x64平臺(tái),Vb6程序啟動(dòng),直接啟用不了;

Vb6比較古老了,應(yīng)當(dāng)是石器時(shí)代的產(chǎn)物;這錯(cuò)誤一看應(yīng)當(dāng)與oracle環(huán)境變量有關(guān),而朋友確認(rèn)裝了oracle 9i client 32位。

經(jīng)過:

由于程序?qū)懙谋容^扯淡,沒有對(duì)錯(cuò)誤異常拋出正確的信息,幸好手上還有源碼,按f8單步執(zhí)行看了一下,下面調(diào)試部分直接報(bào):ora-06413:連接未打開??戳舜a,比較通用的一個(gè)用ado打開數(shù)據(jù)庫(kù)的代碼,增加紅色部分,重新生成vb程序,省得每次都單步調(diào)試。

Function OpenDBConnection(cn AsADODB.Connection, strCnn As String) As Boolean
   On Error GoTo OpenMainSybaseError
   Set cn = New ADODB.Connection
   With cn
      .CursorLocation = adUseClient
     .ConnectionString = strCnn
     .ConnectionTimeout = 10
     .Properties("Prompt") = adPromptNever
     .Open
   End With
   OpenDBConnection = True
    MsgBox "dbconnectstring is " + strCnn
   Exit Function
OpenMainSybaseError:
    MsgBox Err.Description
   OpenDBConnection = False
End Function

再次啟動(dòng)程序好了,錯(cuò)誤直接甩出來:ORA-06413連接未打開

看了下連接字符串:

Provider=MSDAORA;data source=ora;UserId=cxf1;Password=test;Unicode=True

用的msdaora,tnsping ora了一下,沒有問題;那么問題來了,msdaora的問題?這個(gè)驅(qū)動(dòng)在官方確實(shí)有說明

https://www.microsoft.com/en-US/download/details.aspx?id=20065

只有2003xp的版本了,不過后來檢查

C:\Program Files (x86)\Common Files\System\Ole DB

貌似64位下直接有這三個(gè)文件:msdaOra.dll,msdaosp.dll,msdaOrar.dll 并不需要額外的驅(qū)動(dòng);

但既然懷疑到這了,嘗試用了OraOleDb.Oracle.1,換了個(gè)錯(cuò)誤 ,居然報(bào)tns-12514,看樣子還是與環(huán)境變量有關(guān)。后面的故事比較無聊,純屬安裝卸載,卸了ora92版本,重新安裝oracle 10g client,依舊,卸載10g client11g 依舊,32位都不行,要不試試64位,裝上11g 64位,直接報(bào)驅(qū)動(dòng)沒啟用:

VB6 程序連Ora-06413解決手札

有點(diǎn)病急亂投醫(yī)了,好了,理理思路:

1 64位肯定不行,因?yàn)槟菚r(shí)32位的vb壓根兒不知道64位的事情;

2 10g的32位client既然能到tsn-12514證明,這個(gè)驅(qū)動(dòng)應(yīng)當(dāng)是可用的,只是環(huán)境變量不對(duì);

重新上了下oracle的官網(wǎng),說提供了32位的odac驅(qū)動(dòng),

http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html

好家伙,直接下載了個(gè)10G的最低版本,為啥最低,各位懂的,vb6這個(gè)元老用老的不出錯(cuò);結(jié)果裝不上,正常,10g嘛,裝在64位上要更改oraparam.ini,

[Certified Versions]

#You can customise error message shown for failure,provide value for CERTIFIED_VERSION_FAILURE_MESSAGE

Windows=4.0,5.0,5.1,5.2,6.0,6.1

好,OK裝上了,測(cè)試ODBC,一切正常,萬事OK,一開程序,依舊報(bào)ora-06413.

沒轍了,看看sqlnet.log,發(fā)現(xiàn):

***********************************************************************
Fatal NI connect error 6413, connecting to:
 (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=115.29.114.XXX)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)(CID=(PROGRAM=C:\test()\ttest.exe)(HOST=SNOWIND-PC)(USER=snowind))))
 
 VERSION INFORMATION:
         TNSfor 32-bit Windows: Version 10.2.0.1.0 - Production
 Time: 12-12月-2016 21:20:45
 Tracing not turned on.

基本猜出問題所在了(哎,靠猜的-_-!!)。

打開調(diào)式程序,再次數(shù)據(jù)鏈接屬性:

VB6 程序連Ora-06413解決手札

VB6 程序連Ora-06413解決手札

VB6 程序連Ora-06413解決手札

終于成功了(可以放×××了)。

結(jié)論:

沒事別在路徑里加括號(hào),不然你會(huì)死的很沒面子;代碼里加點(diǎn)異常處理也不會(huì)增加很大的工作量,亦可造福后人;




向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI