FireDac 接続に使用される MS Access バージョンおよび/または dll 名を見つけるにはどうすればよいですか?

マーク・エルダー

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 は空白です。

ビクトリア

1. ドライバーのバージョンを取得する

ドライバーのバージョンは、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;

2.ドライバーがサポートするODBCのバージョンを取得します

あなたが使用することができます使用するドライバでサポートされている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;

3. ドライバーがアクセスするDBMS製品のバージョンを取得する

アクセスした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;

4. FireDAC 統合バージョン情報を取得する

FireDACが提供ClientVersionServerVersion介してアクセス可能なプロパティ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]

編集
0

コメントを追加

0

関連記事

分類Dev

MS Accessでhibernateを使用するにはどうすればよいですか?

分類Dev

MS Accessデータベースの現在のパス(ディレクトリ)を見つけるにはどうすればよいですか?

分類Dev

FireDACを使用してOracleへのODBC接続を設定するにはどうすればよいですか?

分類Dev

Access で DDE 接続を見つけて OLE 接続に更新するにはどうすればよいですか?

分類Dev

MS Access SQLを使用して等しくない条件を作成するにはどうすればよいですか?

分類Dev

dllの依存関係を見つけるにはどうすればよいですか?

分類Dev

MS Accessで要素が上下にリンクされているかどうかを確認するにはどうすればよいですか?

分類Dev

MS Outlookで「無視された」メッセージを見つけるにはどうすればよいですか?

分類Dev

MS Accessクエリでシステムユーザー名を直接使用するにはどうすればよいですか?

分類Dev

networkcomms DLLを見つけるにはどうすればよいですか、Githubで見つけることができません

分類Dev

MS Accessの単一のクエリで、あるフィールドの最小値と別のフィールドの関連する値を見つけるにはどうすればよいですか?

分類Dev

MS Access SQLでSQLコードを作成するにはどうすればよいですか?

分類Dev

MS ACCESS:フルネームがテキストボックスに返されるようにMS Accessのテーブルで環境ユーザー名を検索するにはどうすればよいですか?

分類Dev

MSExcelへの読み取り専用データ接続/ MSExcelからAccessで、MS Accessファイルが編集にロックされるのを防ぐにはどうすればよいですか?

分類Dev

親パスから拡張子が付いたファイル名を抽出するにはどうすればよいですか?MS Access VBA

分類Dev

MS Access SQLで合計金額を取得するにはどうすればよいですか?

分類Dev

ms-access 2007VBAでmod97を計算するにはどうすればよいですか

分類Dev

MS Access 2007-2013で数値の丸めを回避するにはどうすればよいですか?

分類Dev

MS Access DBでVLOOKUP機能を実現するにはどうすればよいですか?

分類Dev

Firedac Sqliteデータベース接続に挿入した後にイベントを作成するにはどうすればよいですか?

分類Dev

MS Access-1つのレコードセットに2つのクエリを集約するにはどうすればよいですか?

分類Dev

リストボックスで選択したアイテムをクエリ(MS Access)に関連付けるにはどうすればよいですか?

分類Dev

序数値を使用してDLLからプロシージャを見つけるにはどうすればよいですか?

分類Dev

VS2017プロジェクトに接続した後、MS Accessからランダムレコードを選択するにはどうすればよいですか?

分類Dev

MS-AccessボタンはfileModDate = f.DateLastModifiedを使用しています; fileModDateを今日の日付と比較するにはどうすればよいですか

分類Dev

MS Access 2019:更新前に重複レコードをチェックし、重複が見つかった場合は特定の手順を実行するにはどうすればよいですか?

分類Dev

MS Accessフォーム:コンボボックスの選択オプションを動的に変更するにはどうすればよいですか?

分類Dev

MS Accessをインストールせずに.mdbファイルを使用するにはどうすればよいですか?

分類Dev

MS Accessの関数とサブルーチンを標準モジュールに編成するにはどうすればよいですか?

Related 関連記事

  1. 1

    MS Accessでhibernateを使用するにはどうすればよいですか?

  2. 2

    MS Accessデータベースの現在のパス(ディレクトリ)を見つけるにはどうすればよいですか?

  3. 3

    FireDACを使用してOracleへのODBC接続を設定するにはどうすればよいですか?

  4. 4

    Access で DDE 接続を見つけて OLE 接続に更新するにはどうすればよいですか?

  5. 5

    MS Access SQLを使用して等しくない条件を作成するにはどうすればよいですか?

  6. 6

    dllの依存関係を見つけるにはどうすればよいですか?

  7. 7

    MS Accessで要素が上下にリンクされているかどうかを確認するにはどうすればよいですか?

  8. 8

    MS Outlookで「無視された」メッセージを見つけるにはどうすればよいですか?

  9. 9

    MS Accessクエリでシステムユーザー名を直接使用するにはどうすればよいですか?

  10. 10

    networkcomms DLLを見つけるにはどうすればよいですか、Githubで見つけることができません

  11. 11

    MS Accessの単一のクエリで、あるフィールドの最小値と別のフィールドの関連する値を見つけるにはどうすればよいですか?

  12. 12

    MS Access SQLでSQLコードを作成するにはどうすればよいですか?

  13. 13

    MS ACCESS:フルネームがテキストボックスに返されるようにMS Accessのテーブルで環境ユーザー名を検索するにはどうすればよいですか?

  14. 14

    MSExcelへの読み取り専用データ接続/ MSExcelからAccessで、MS Accessファイルが編集にロックされるのを防ぐにはどうすればよいですか?

  15. 15

    親パスから拡張子が付いたファイル名を抽出するにはどうすればよいですか?MS Access VBA

  16. 16

    MS Access SQLで合計金額を取得するにはどうすればよいですか?

  17. 17

    ms-access 2007VBAでmod97を計算するにはどうすればよいですか

  18. 18

    MS Access 2007-2013で数値の丸めを回避するにはどうすればよいですか?

  19. 19

    MS Access DBでVLOOKUP機能を実現するにはどうすればよいですか?

  20. 20

    Firedac Sqliteデータベース接続に挿入した後にイベントを作成するにはどうすればよいですか?

  21. 21

    MS Access-1つのレコードセットに2つのクエリを集約するにはどうすればよいですか?

  22. 22

    リストボックスで選択したアイテムをクエリ(MS Access)に関連付けるにはどうすればよいですか?

  23. 23

    序数値を使用してDLLからプロシージャを見つけるにはどうすればよいですか?

  24. 24

    VS2017プロジェクトに接続した後、MS Accessからランダムレコードを選択するにはどうすればよいですか?

  25. 25

    MS-AccessボタンはfileModDate = f.DateLastModifiedを使用しています; fileModDateを今日の日付と比較するにはどうすればよいですか

  26. 26

    MS Access 2019:更新前に重複レコードをチェックし、重複が見つかった場合は特定の手順を実行するにはどうすればよいですか?

  27. 27

    MS Accessフォーム:コンボボックスの選択オプションを動的に変更するにはどうすればよいですか?

  28. 28

    MS Accessをインストールせずに.mdbファイルを使用するにはどうすればよいですか?

  29. 29

    MS Accessの関数とサブルーチンを標準モジュールに編成するにはどうすればよいですか?

ホットタグ

アーカイブ