SQLGetInfo()
で 使用できますInfoType=SQL_DRIVER_NAME
これが次のようになることを願っています:
Status := SQLGetInfo(ConnEnv, SQL_DRIVER_NAME, PAnsiChar(DriverName), 255, NameLen);
ただし、この機能はすでに接続されているデータベースで機能します。
私SQLDrives()
の環境では、この関数も DLL 名を返しません。そこで、レジストリから読み取ろうとしたところ、次のように機能しました。
DLLName := RegGetStringDirect(HKEY_LOCAL_MACHINE, 'SOFTWARE\ODBC\ODBCINST.INI\' + DriverName, 'Driver');
ドライバーの場合:IBM INFORMIX ODBC DRIVER
私は得ました:C:\informix\bin\iclit09b.dll
ドライバーの場合:SQL Server
私は得ました:C:\WINDOWS\system32\SQLSRV32.dll
RegGetStringDirect()
レジストリから何かを読み取るための Windows API に基づく私の関数です。
編集:
Ron Schuster による「SQL Server」ODBC ドライバーの dll 名を読み取る 2 つの関数は、コメントから移動されました。
procedure TForm1.Button1Click(Sender: TObject);
//using Windows API calls
var
KeyName, ValueName, Value: string;
Key: HKEY;
ValueSize: Integer;
begin
ValueName := 'Driver';
KeyName := 'SOFTWARE\ODBC\ODBCINST.INI\SQL Native Client';
if RegOpenKeyEx(HKEY_LOCAL_MACHINE, PChar(KeyName), 0, KEY_READ, Key) = 0 then
if RegQueryValueEx(Key, PChar(ValueName), nil, nil, nil, @ValueSize) = 0 then begin
SetLength(Value, ValueSize);
RegQueryValueEx(Key, PChar(ValueName), nil, nil, PByte(Value), @ValueSize);
ShowMessage(Value);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
//using TRegistry class
var
KeyName, ValueName, Value: string;
Reg: TRegistry;
begin
ValueName := 'Driver';
KeyName := 'SOFTWARE\ODBC\ODBCINST.INI\SQL Native Client';
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKeyReadOnly(KeyName) then begin
Value := Reg.ReadString(ValueName);
ShowMessage(Value);
end;
finally
Reg.Free;
end;
end;