2

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

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 过程返回的内容,为什么我会收到此错误?

谢谢

4

3 回答 3

1

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

Dim fld As DAO.Field

也许它可以帮助另一个人。

此致

于 2015-06-18T21:32:14.597 回答
0

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

Dim fldloop as object

否则你可以重写这一行:

For Each fld In fldLoop

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

并忘记一起标注一个单独的变量


更新:

也许这对 SQL Server 会更有用,如果您只能通过 MS Access 访问,那么您应该能够通过循环访问链接表并动态重建 aa Pass Through Query 来使用此示例

SQL Server 中“描述表”的等价物是什么?

于 2013-06-13T14:43:54.860 回答
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
于 2013-06-17T20:22:37.713 回答