Access データベース生成の自動化を構築するのに役立つ ADOX.Catalog オブジェクトを作成する一連のサポート サブ関数を含む関数を構築しています。
私のユーザーベースには常に同じバージョンのオフィスアプリケーションがあるとは限らないため、私は自分のアプリケーションに遅延バインディングを使用するのが好きです。
私のパブリック関数は、いくつかのオブジェクトをパラメーターとして受け入れますが、処理を開始する前に、それらが実際に ADODB.Recordset オブジェクトであることを確認する必要があります。開始するためにhttps://msdn.microsoft.com/en-us/library/s4zz68xc.aspxの msdn 記事を参照し、記事の推奨に従って使用しようとしてIf TypeOf ... Is ADODB.Recordset
いますが、次のエラーが生成されます。
Compile error:
User-defined type not defined
これが私のコードのスニペットです。問題のある最初の行はTypeOf adoRsColumns Is ADODB.Recordset
次のとおりです。
Public Function ADOX_Table_Factory( _
ByVal strTblName As String, _
Optional ByVal adoRsColumns As Object, _
Optional ByVal adoRsIndexes As Object, _
Optional ByVal adoRsKeys As Object _
) As Object
'Init objects/variables.
Set ADOX_Table_Factory = CreateObject("ADOX.Table")
'Begin interactions with the new table object.
With ADOX_Table_Factory
.Name = strTblName
'Check if we've received an ADO recordset for the column(s).
If TypeOf adoRsColumns Is ADODB.Recordset Then
'Check that the recordset contains rows.
If Not (adoRsColumns.BOF And adoRsColumns.EOF) Then
'Loop through the column definitions.
Do
.Columns.Append ADOX_Column_Factory(adoRsColumns.Fields(0), adoRsColumns.Fields(1), adoRsColumns.Fields(2), adoRsColumns.Fields(3))
Loop Until adoRsColumns.EOF
End If
End If
私のグーグルは、このエラーを回避するのに役立つ結果をもたらしませんでした. ADO ライブラリへの参照を設定すると、このコードが機能することを確認しました。関数を介してTypeName
、オブジェクトが として名前で識別されることも確認しましRecordset
た。ただし、に置き換えるTypeOf adoRsColumns Is ADODB.Recordset
とTypeOf adoRsColumns Is Recordset
、テストは false と評価され、目的のコードは実行されません。TypeName
MSDN の記事に記載されているように、TypeOf ... Is
より高速であるため、 の出力との文字列比較には頼っていません。
ご協力いただきありがとうございます。