LoginSignup
0
0

More than 3 years have passed since last update.

[VBA] Access2007 32Bit Later Microsoft Office XX.0 Access Database Engine Object Libraryを参照設定せずに使う

Posted at

Access2007以降の参照設定 Microsoft Office XX.0 Access DEOLができないとき

32Bit版は回避方法があります。

専門的にはLate Biding 遅延バインディングとよばれるもの

Dao120Engine
Sub Dao120Engine()
Dim DAO120 As Object: Set DAO120 = CreateObject("DAO.DBEngine.120")
Dim cDB120: Set cDB120 = DAO120.Workspaces(0).Databases(0)
Dim tdfs120: Set tdfs120 = cDB120.TableDefs
Dim Qs120: Set Qs120 = cDB120.QueryDefs
Dim tdf120, Q120: Set tdf120 = tdfs120("tablename")
Dim dRS120: Set dRS120 = cDB120.OpenRecordset(tdf120.Name, 2) 'dbOpenDynaset = 2
Dim flds120: Set flds120 = dRS120.Fields
Dim fld120_1, fld120_2, ifld120 'As Long
Dim sPath120 'As String
sPath120 = Left(cDB120.Name, InStrRev(cDB120.Name, "\")) '返るPath(String)は末尾に"\"がつきます。
Stop
dRS120.Close
Set dRS120 = Nothing
Set DAO120 = Nothing
Stop
End Sub

これで一通りのことはできます。

長所

この方法は64Bit版には使えません。64BitだとVBScriptを32Bit強制起動で使えますが、VBAでは使えません。
しかし、この方法はAccess2007以降でMicrosoft Office XX.0 Access Database Engine Object Libaryを参照しないため、Accessのバージョン違いによる参照設定切れを回避することができます。

WorksSpace周りの知識

WorkSpaces

https://docs.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/workspaces-members-dao
Workspaces コレクションには、DBEngine オブジェクトの、表示されているアクティブなすべての Workspace オブジェクトが含まれます。非表示の Workspace オブジェクトはコレクションに追加されず、割り当てられている変数によって参照されます。

メソッド
ADD
新しい Workspace を Workspaces コレクションに追加します。
Delete
指定された Workspace を Workspaces コレクションから削除します。

Refresh
このオブジェクトではサポートされていません。
Refresh メソッドは、持続的でないコレクション ( Connection オブジェクトの Connections、 Databases、 Recordsets、 Workspaces、 QueryDefs の各コレクションなど) では使用できません。

プロパティ
Count
指定したコレクション内のオブジェクトの数を取得します。 値の取得のみ可能です
注釈
コレクションのメンバーは0 から順に番号が割り当てられるため、For i=0 Next ループを使用する場合は常に 0 から始めて、 Count -1 で終了させないとエラーになります。~~Count プロパティより 1 小さい値で終わらせる必要があります。 ~~Count プロパティをチェックせずにコレクションのメンバーをループ処理するには、 For Each...Next コマンドを使用できます。
Count プロパティの設定値は、Null になることはありません。値が 0 の場合、そのコレクションにはオブジェクトがありません。

Workspace オブジェクト (DAO)

‎適用先: Access 2013、Office 2013
Workspace オブジェクトは、ユーザー用に名前付きセッションを定義します。これには開いているデータベースが含まれ、同時実行トランザクションのメカニズムを提供し、Microsoft Access ワークスペースの場合は、セキュリティが設定されたワークグループをサポートします。

注釈
  • Workspace オブジェクトは、アプリケーションが Microsoft Access データベース エンジンを使用してデータを操作する方法を定義する非永続的なオブジェクトです。現在のセッションの管理、または追加のセッションの開始に、 Workspace オブジェクトを使用します。セッションでは、複数のデータベースまたは接続を開き、トランザクションを管理できます。たとえば、以下の操作を実行できます。
  • Name 、 UserName 、および Type の各プロパティを使用して、名前付きセッションを確立します。セッションでは、複数のデータベースを開き、ネストされたトランザクションの 1 つのインスタンスを実行できる適用範囲が作成されます。
  • Close メソッドを使用して、セッションを終了します。
  • OpenDatabase メソッドを使用して、 Workspace で 1 つまたは複数の既存のデータベースを開きます。
  • BeginTrans 、 CommitTrans 、および Rollback の各メソッドを使用して、 Workspace 内のネストされたトランザクションの処理を管理し、複数の Workspace オブジェクトを使用して、複数のトランザクション、同時実行トランザクション、および重なり合うトランザクションを実行します。
  • Workspace オブジェクトを初めて参照または使用すると、自動的に既定のワークスペース DBEngine.Workspaces(0) が作成されます。 この既定のワークスペースの Name プロパティと UserName プロパティの設定は、"#Default Workspace#" と "Admin" です。 セキュリティが有効になっている場合、 UserName プロパティの設定はログオンしたユーザーの名前になります。
  • トランザクションを使用する場合、 Workspace オブジェクトで複数の Database オブジェクトが開かれていると、指定した Workspace オブジェクトのすべてのデータベースが影響を受けます。たとえば、 BeginTrans メソッドを使用し、あるデータベースの複数のレコードを更新した後、別のデータベースのレコードを削除します。次に、 Rollback メソッドを使用すると、更新と削除の両方の操作がキャンセルされ、ロールバックされます。複数の Database オブジェクトにまたがってトランザクションを個別に管理するには、追加の Workspace オブジェクトを作成します。
  • CreateWorkspace メソッドを使用して、 Workspace オブジェクトを作成できます。新しい Workspace オブジェクトを作成した後、それを Workspaces コレクションから参照する必要がある場合は、オブジェクトを Workspaces コレクションに追加する必要があります。 新規に作成された Workspace オブジェクトは、 Workspaces コレクションに追加しなくても使用できます。ただし、オブジェクトに割り当てたオブジェクト変数で参照する必要があります。
  • コレクション内の Workspace オブジェクトを、コレクションで付けられたインデックスまたは Name プロパティの設定値で参照するには、次のいずれかの構文を使います。 `DBEngine.Workspaces(0) `DBEngine.Workspaces("name")`` `DBEngine.Workspaces![name]`

Workspace メンバー

BeginTrans

新しいトランザクションを開始します。 読み取り/書き込みのデータベースです。

CommitTrans

現在のトランザクションを終了し、変更を保存します。
Rollback
現在のトランザクションを終了し、Workspace オブジェクト内のデータベースを現在のトランザクションが開始された時点の状態に戻します。

OpenConnection

注: ODBCDirect ワークスペースは、Microsoft access 2013 ではサポートされていません。 Microsoft Access データベース エンジンを使用しないで外部データ ソースにアクセスする場合は、ADO を使用してください。
ODBC データ ソースの Connection オブジェクトを開きます (ODBCDirect ワークスペースのみ)。

CreateDatabase

新しい Database オブジェクトを作成し、そのデータベースをディスクに保存し、開かれた Database オブジェクトとして返します (Microsoft Access ワークスペースのみ)。

OpenDatabase

Workspace オブジェクト内で指定されたデータベースを開き、そのデータベースを表す Database オブジェクトへの参照を返します。

Close

開いている Workspace を閉じます。

Connections

指定された Workspace の現在の接続を表す Connections コレクションを取得します。 読み取り専用です。

Databases

指定された Workspace の開いているデータベースを表す Databases コレクションを取得します。 値の取得のみ可能です。

DefaultCursorDriver

注: ODBCDirect ワークスペースは、Microsoft access 2013 ではサポートされていません。 Microsoft Office Access データベース エンジンを使用しないで外部データ ソースにアクセスする場合は、ADO を使用してください。

OpenConnection メソッドまたは OpenDatabase メソッドによって作成された接続で使用されるカーソル ドライバーの種類を設定または取得します (ODBCDirect ワークスペースのみ)。
IsolateODBCTrans

同じ Microsoft Access データベース エンジンに接続された ODBC データ ソースに関連する複数のトランザクションが分離されているかどうかを示す値を設定または取得します (Microsoft Access ワークスペースのみ)。

LoginTimeout

ODBC データベースへのログオン試行でエラーが発生するまでの秒数を設定または取得します。

Name

指定したオブジェクトの名前を取得または設定します。オブジェクトがコレクションに追加されていない場合、値の取得および設定が可能です。文字列型 ( String) の値を使用します。オブジェクトがコレクションに追加されている場合、値の取得のみ可能です。文字列型 ( String) の値を使用します。

Properties

指定したオブジェクトの Properties コレクションを取得します。値の取得のみ可能です。

Type

オブジェクトの操作の種類またはデータ型を示す値を設定あるいは取得します。値の取得のみ可能です。整数型 (Integer) の値を使用します。

DAO Workspace Type Enum

https://docs.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/workspacetypeenum-enumeration-dao
DAO.WorkspaceTypeEnum
CreateWorkspace メソッドで、作成するワークスペースの種類を指定するために使用します。

Const dbUseJet = 2
Const dbUseODBC = 1

※VBEでF2を押すとConst dbUseODBC = 1が出てくるが一切記述がない。他にあればのちに追加する。

カーソルの列挙 (DAO)

Const dbUseClientBatchCursor = 3

Always uses the FoxPro Cursor Library. This option is required for performing batch updates.
常に FoxPro カーソル ライブラリを使用します。一括更新を実行する場合には、このオプションを必ず指定する必要があります。

Const dbUseDefaultCursor = -1 (&HFFFFFFFF)

(既定値) サーバーがサーバー側カーソルをサポートする場合は、サーバー側カーソルを使用します。それ以外の場合は、ODBC カーソル ライブラリを使用します。
Const dbUseNoCursor = 4
Opens all cursors (that is, Recordset objects) as forward-only type, read-only, with a rowset size of 1. Also known as "cursorless queries."
すべてのカーソル (つまり Recordset オブジェクト) を、行セットのサイズが 1 である前方のみの読み取り専用カーソルとして開きます。 カーソルの少ない"クエリとも呼ばれます。"

Const dbUseODBCCursor = 1

Always uses the ODBC Cursor Library. This option provides better performance for small result sets, but degrades quickly for larger result sets.
常に ODBC カーソル ライブラリを使用します。このオプションは、結果セットが小さい場合にはパフォーマンスが高くなりますが、結果セットが大きくなるとパフォーマンスが急激に低下します。

Const dbUseServerCursor = 2

Always uses server-side cursors. For most large operations this option provides better performance, but might cause more network traffic.
常にサーバー側カーソルを使用します。大規模な操作のほとんどでは、このオプションによって高いパフォーマンスが得られますが、ネットワーク トラフィックが増える可能性があります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0