1

DSNを介してOracleデータベースに接続するアプリケーションがあります。最初の接続試行が失敗した場合は、DSNが存在することを確認します。存在しない場合は、SQLConfigDataSourceコマンドを使用して作成します。

このコマンドでは、引数の1つとしてドライバー名が必要です。私のマシンには11gドライバーがあるので、次のように動作します。

const
  cDriver = 'Oracle in OraDb11g_home1' + #0;
var
  strAttr: string;
begin
  strAttr := 'DSN=' + DSNName + #0 +
             'SERVER=' + TNSName + #0;
  SQLConfigDataSource(0,ODBC_ADD_SYS_DSN,PChar(cDriver),PChar(strAttr));
end;

ただし、クライアントマシンのOracleのバージョンが異なる場合や、Oracleホームの名前が異なる場合があります。任意のマシンで使用するドライバーをどのように判断できますか?

私はDelphiを使用していますが、これはとにかく単なるAPI呼び出しであるため、それほど重要ではありません。

4

2 に答える 2

2

ここに示すように、レジストリ内のリストを使用することになりました。

function TDSNManager.GetOracleDriverName: string;
var
  reg : TRegistry;
  drivers: TStringList;
  i: integer;
begin
  drivers := TStringList.Create;
  reg := nil;
  try
    reg := TRegistry.Create;
    reg.RootKey := HKEY_LOCAL_MACHINE;
    if reg.OpenKey('SOFTWARE\ODBC\ODBCINST.INI',False) then begin
      reg.GetKeyNames(drivers);
    end;
  finally
    FreeAndNil(reg);
  end;  //try-finally

  for i := 0 to drivers.Count - 1 do begin
    if 0 < Pos('ORACLE IN',Uppercase(drivers[i])) then begin
      Result := drivers[i];
      Break;
    end;
  end;
end;
于 2009-05-18T15:37:49.433 に答える
1

SQLDrivers呼び出しを詳しく調べて、使用しているシステムにインストールされているドライバーを取得する方法を確認してください。

于 2009-05-14T15:14:52.727 に答える