Microsoft Access データベースへの FireDac 接続があります。次のように接続で Parms を構成しています。
Connection.Params.Add('DriverID=MSAcc');
Connection.Params.Add('Database=' + FDatabasePath);
Connection.Connected := true;
通常、これはうまく機能します。ただし、場合によっては、古い MS Access ドライバーがインストールされています。その状況を検出し、ユーザーに警告して、新しいドライバーをインストールできるようにしたいと考えています。
FireDac が検出して接続に使用したドライバーのバージョン、または少なくとも VendorLib 名を取得するにはどうすればよいですか?
接続を開く前に、Phys 接続リンクで VendorLib を指定できることを知っています。私はそれをしたくない。FireDac には、システム上で最も関連性の高いドライバーを見つけて使用するプロセスを実行してもらいます。ただし、それが完了したら、最終的にどのドライバーを使用したかを知りたいと思います。
接続が開いた後、ActualDriverId または VendorLib プロパティが設定されることを期待して、TFDPhysMSAccessDriverLink を作成しようとしました。ただし、ActualDriverId は MsAcc であり、VendorLib は空白です。
ドライバーのバージョンは、DriverVersionプロパティを使用して序数形式で取得するか、DRIVER_VERプロパティを使用して文字列 (ドライバーの説明も含めることができます) として取得できます。照会されたSQL_DRIVER_VER情報タイプは、次のように記述された ODBC API にあります。
SQL_DRIVER_VER (ODBC 1.0)
ドライバーのバージョンと、オプションでドライバーの説明を含む文字列。少なくとも、バージョンは ##.##.#### の形式です。最初の 2 桁はメジャー バージョン、次の 2 桁はマイナー バージョン、最後の 4 桁はリリース バージョンです。
FireDAC を使用すると、次の方法で取得できます。
uses
FireDAC.Phys.ODBCWrapper;
procedure TForm1.Button1Click(Sender: TObject);
var
DriverVerStr: string;
DriverVerInt: TFDVersion;
ODBCConnection: TODBCConnection;
begin
ODBCConnection := TObject(FDConnection.CliObj) as TODBCConnection;
DriverVerStr := ODBCConnection.DRIVER_VER;
DriverVerInt := ODBCConnection.DriverVersion;
Memo.Lines.Add(Format('DriverVerStr: %s', [DriverVerStr]));
Memo.Lines.Add(Format('DriverVerInt: %d', [DriverVerInt]));
end;
あなたが使用することができます使用するドライバでサポートされているODBCのバージョンを取得するにはDriverODBCVersionの序数値、または取得するプロパティをDRIVER_ODBC_VERを文字列値を取得することを。クエリされたSQL_DRIVER_ODBC_VERデータ型情報は次のように記述されます。
SQL_DRIVER_ODBC_VER (ODBC 2.0)
ドライバーがサポートする ODBC のバージョンの文字列。バージョンは ##.## の形式で、最初の 2 桁がメジャー バージョンで、次の 2 桁がマイナー バージョンです。SQL_SPEC_MAJOR および SQL_SPEC_MINOR は、メジャー バージョン番号とマイナー バージョン番号を定義します。このマニュアルで説明されている ODBC のバージョンでは、これらは 3 と 0 であり、ドライバーは「03.00」を返す必要があります。
FireDAC を使用すると、次の方法で取得できます。
uses
FireDAC.Phys.ODBCWrapper;
procedure TForm1.Button1Click(Sender: TObject);
var
ODBCVerStr: string;
ODBCVerInt: TFDVersion;
ODBCConnection: TODBCConnection;
begin
ODBCConnection := TObject(FDConnection.CliObj) as TODBCConnection;
ODBCVerStr := ODBCConnection.DRIVER_ODBC_VER;
ODBCVerInt := ODBCConnection.DriverODBCVersion;
Memo.Lines.Add(Format('ODBCVerStr: %s', [ODBCVerStr]));
Memo.Lines.Add(Format('ODBCVerInt: %d', [ODBCVerInt]));
end;
アクセスしたDBMS製品のバージョンは、DBMS_VERプロパティで取得できます。ODBC API は、クエリされたSQL_DBMS_VER情報タイプを次のように記述します。
SQL_DBMS_VER (ODBC 1.0)
ドライバーがアクセスするDBMS製品のバージョンを示す文字列。バージョンは ##.##.#### という形式で、最初の 2 桁がメジャー バージョン、次の 2 桁がマイナー バージョン、最後の 4 桁がリリース バージョンです。ドライバーは、DBMS 製品バージョンをこの形式で表示する必要がありますが、DBMS 製品固有のバージョンを追加することもできます。たとえば、「04.01.0000 Rdb 4.1」。
FireDAC を使用すると、次の方法で取得できます (解析された順序のバージョン番号を返すプロパティがないため、自分で順序値に解析してみましょう)。
uses
FireDAC.Stan.Util, FireDAC.Phys.ODBCWrapper;
procedure TForm1.Button1Click(Sender: TObject);
var
DBMSVerStr: string;
DBMSVerInt: TFDVersion;
ODBCConnection: TODBCConnection;
begin
ODBCConnection := TObject(FDConnection.CliObj) as TODBCConnection;
DBMSVerStr := ODBCConnection.DBMS_VER;
DBMSVerInt := FDVerStr2Int(DBMSVerStr);
Memo.Lines.Add(Format('DBMSVerStr: %s', [DBMSVerStr]));
Memo.Lines.Add(Format('DBMSVerInt: %d', [DBMSVerInt]));
end;
FireDACが提供ClientVersionとServerVersion介してアクセス可能なプロパティConnectionMetaDataIntfのコネクションオブジェクトのインターフェースプロパティを。
ODBC ドライバーの場合、ClientVersionプロパティは、ドライバーが単一層ドライバーでない場合はドライバー バージョン (セクション 1 で説明) を返し、それ以外の場合は DBMS 製品バージョン (セクション 3 で説明) を返します。ServerVersionのリターンは常にODBCドライバの(ここではセクション3に記載されている)製品のバージョンをDBMS。
例えば:
procedure TForm1.Button1Click(Sender: TObject);
var
Metadata: IFDPhysConnectionMetadata;
begin
Metadata := FDConnection.ConnectionMetaDataIntf;
try
Memo.Lines.Add(Format('ClientVersion: %d', [Metadata.ClientVersion]));
Memo.Lines.Add(Format('ServerVersion: %d', [Metadata.ServerVersion]));
finally
Metadata := nil;
end;
end;
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加