我创建了以下代码,我将来要使用它来获取表格中所有字段的列表:
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过程返回的内容,为什么我会收到此错误?
由于
答案 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访问,那么你应该能够通过循环链接表并动态重建一个直通查询来使用这个例子
答案 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