2

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.RecordsetTypeOf adoRsColumns Is Recordset、テストは false と評価され、目的のコードは実行されません。TypeNameMSDN の記事に記載されているように、TypeOf ... Isより高速であるため、 の出力との文字列比較には頼っていません。

ご協力いただきありがとうございます。

4

1 に答える 1