Delphi 11.2下32位Oracle ODBC连接异常问题求助
Delphi 11.2 ADO连接32位Oracle的ODBC异常问题
环境与连接配置
- 操作系统:Windows 10
- 开发环境:Delphi 11.2
- 需求:保留旧程序使用的ODBC连接方式,建立32位Oracle连接
OLE DB连接字符串(可正常连接)
Provider=OraOLEDB.Oracle;Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=[HOST])(PORT=[PORT]))(CONNECT_DATA=(SID=[SID])(SERVER=DEDICATED)));User ID=[USERNAME];Password=[PASSWORD];
ODBC连接字符串(连接失败)
Driver={Microsoft ODBC for Oracle};Server=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=[HOST])(PORT=[PORT]))(CONNECT_DATA=(SID=[SID])(SERVER=DEDICATED)));User ID=[USERNAME];Password=[PASSWORD];
异常现象
- 直接使用上述ODBC连接字符串时,报错:
[Microsoft][ODBC driver for Oracle][Oracle]Error while trying to retrieve text for error ORA-01019.,且观察到ADO会将{Microsoft ODBC for Oracle}解析为MSDASQL提供程序 - 临时规避方法:先通过OLE DB连接Oracle并断开后,再使用ODBC连接即可正常工作,但程序重启后问题复现
- 反向操作触发另一个异常:先连接ODBC再连接OLE DB,会抛出*
Catastrophic failure.*异常
所用Delphi ADO连接代码
ADO := TADOConnection.Create(Nil); Try ADO.ConnectionString := ConnectionStr; ADO.LoginPrompt := False; Try Try ADO.Connected := True; if ADO.Connected then MessageBox(0, Pchar('Connected to Database.' + sLineBreak + sLineBreak + 'Using Provider: ' + ADO.Provider + sLineBreak + sLineBreak + 'Connection String:' + sLineBreak + ConnectionStr + sLineBreak + sLineBreak + 'Used Conncetions String:' + sLineBreak + ADO.ConnectionString), Pchar('Connected'), MB_OK+MB_ICONINFORMATION); Result := True; Except On E: Exception do raise Exception.Create('Failed to connect.' + sLineBreak + sLineBreak + 'Using Provider: ' + ADO.Provider + sLineBreak + sLineBreak + 'Connection String:' + sLineBreak + ConnectionStr + sLineBreak + sLineBreak + 'Used Conncetions String:' + sLineBreak + ADO.ConnectionString + sLineBreak + SLineBreak + 'Error:' + sLineBreak + E.Message); end; Finally if ADO.Connected then ADO.Connected := False; end; Finally ADO.Free; end;
求助
希望找到无需依赖OLE DB临时初始化的方案,彻底解决ODBC直接连接Oracle失败的问题。
内容的提问来源于stack exchange,提问作者Henrik Larsen
相关产品推荐
相关产品推荐

