返回字段对象 - Access 2007 VBA

时间:2013-06-13 14:33:00

标签: vba ms-access-2007

我创建了以下代码,我将来要使用它来获取表格中所有字段的列表:

Private Sub btnGetFields_Click()


   Dim myDBS As Database
   Dim fldLoop As Fields
   Dim fld As Field
   Dim relLoop As Relation
   Dim tdfloop As TableDef

   Set myDBS = CurrentDb

   With myDBS

  ' Display the attributes of a TableDef object's
  ' fields.
  Debug.Print "Attributes of fields in " & _
    .TableDefs("ALT_IDENTIFIER").Name & " table:"

  'Error occurs in line below
  Set fldLoop = .TableDefs("ALT_IDENTIFIER").Fields 

  For Each fld In fldLoop
     Debug.Print "  " & fld.Name & " = " & _
        fld.Attributes
  Next fld

.Close
   End With

End Sub

但是当我运行代码时,我得到了Type Mistmatch - Runtime Error 13

为什么呢? fldloop是一个Fields对象 - 即一个字段对象的集合对吗?这是TableDefs.Fields过程返回的内容,为什么我会收到此错误?

由于

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,我通过将“Field”改为“DAO.Field”解决了这个问题:

Dim fld As DAO.Field

也许这有助于另一个人。

祝你好运

答案 1 :(得分:0)

有时在Access中将值传递给它们的文字类型会导致这些类型的错误,不知道为什么,快速修复通常是将变量标注为开放数据类型,例如:

Dim fldloop as object

否则你可以重写这一行:

For Each fld In fldLoop

For Each fld In .TableDefs("ALT_IDENTIFIER").Fields

并且忘记将所有单独的变量标注在一起


更新:

也许这对SQL Server更有用,如果你只能通过MS Access访问,那么你应该能够通过循环链接表并动态重建一个直通查询来使用这个例子

What is the equivalent of 'describe table' in SQL Server?

答案 2 :(得分:0)

发现问题:我收到错误的原因是因为我没有提到确切的字段。虽然我仍然不确定为什么在分配了Fields值的Fields对象上抛出了错误。

以下是代码:

   Dim f As Field
   Dim fldTableDef As Field
   Dim Rst As DAO.Recordset
   Dim numField As Integer

   Dim linkedTable As String
   linkedTable = "ALT_IDENTIFIER"

   Set Rst = CurrentDb.OpenRecordset(linkedTable)
   numField = Rst.Fields.Count

   'Loop through
   Dim index As Integer

   For index = 0 To numField - 1
        If Rst.Fields(index).Type = dbDate Then
            Debug.Print "Field: " & Rst.Fields(index).Name; " = Date/Time" & Rst.Fields(index).Value
        End If
   Next