SELECTクエリを介してテーブルの説明(テーブル>テーブルのプロパティを右クリックすると表示されるものと同じ)にアクセスする方法を探していました。
MSysObjects を使用してみましたが、それを使用してテーブルの名前しか取得できません。
クエリを使用してこれを行うことは可能ですか、それとも VBA が必要ですか?
Remou が言うように、クエリから取得することはできません (ただし、それを返す関数をクエリに含めることはできます)。別の関数を次に示します。
Public Function GetTableDescr(stTableName As String) As String
On Error Resume Next
GetTableDescr = CurrentDb.TableDefs(stTableName).Properties("Description").Value
End Function
以下は、すべての非システム テーブルを日付と説明とともに返すクエリです (上記の関数を使用)。
SELECT MSysObjects.Name, msysobjects.datecreate, msysobjects.dateupdate, GetTableDescr([Name]) AS Description
FROM MSysObjects
WHERE (((MSysObjects.Name) Not Like "~*") AND((MSysObjects.Name) Not Like "MSys*") and ((MSysObjects.Type)=1));
最後に、クエリに対してほぼ同じ機能を実行できます。私が見つけたトリックは、継承されていない説明のみを返すことです。それ以外の場合、クエリに説明がない場合は、クエリされたオブジェクトの説明を取得します。
Public Function GetQueryDescr(stQryName As String) As String
On Error Resume Next
If CurrentDb.QueryDefs(stQryName).Properties("Description").Inherited = False Then
GetQueryDescr = CurrentDb.QueryDefs(stQryName).Properties("Description").Value
End If
End Function
Error Resume Next
オブジェクトに説明があるまでプロパティは null であるため、Onが必要です。
テーブル スキーマまたは TableDef プロパティから説明を取得できますが、標準のクエリは機能しないと思います。
Set rs = CurrentProject.Connection.OpenSchema(adSchemaTables, _
Array(Empty, Empty, "Rules", Empty))
Debug.Print rs!Description