【发布时间】:2017-01-24 17:06:06
【问题描述】:
谁能告诉我这段代码有什么问题?我检查了所有行是否有拼写错误——这不是问题。所有表和查询都按照它们存在于数据库中的方式编写。任何帮助表示赞赏。
Private Sub LoadArray()
'---------------------------
'---------------------------
'This procedure loads text into the 3rd column of the array
'---------------------------
'---------------------------
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim rsFiltered As DAO.Recordset
Dim strSQL As String
Dim i As Integer
strSQL = "SELECT tblProperties.Name, tbl1OpportuniyType.Type, qryPropertiesALLTypesALLTbls.TotalUnits, " _
& "qryPropertiesALLTypesALLTbls.EventStartTimeEachDay, qryPropertiesALLTypesALLTbls.EventEndTimeEachDay, " _
& "qryPropertiesALLTypesALLTbls.EventStartDate, qryPropertiesALLTypesALLTbls.EventStopDate, " _
& "qryPropertiesALLTypesALLTbls.TechOpsGroup, qryPropertiesALLTypesALLTbls.TechOpsResource " _
& "FROM tbl1OpportuniyType RIGHT JOIN (qryPropertiesALLTypesALLTbls INNER JOIN tblProperties ON qryPropertiesALLTypesALLTbls.[PropertyComplex_ID] = tblProperties.[PropertyComplex_ID]) ON tbl1OpportuniyType.[OpportunityType_ID] = tblProperties.OpportunityType " _
& "WHERE (((qryPropertiesALLTypesALLTbls.EventStartDate) Is Not Null));"
'Debug.Print strSQL
Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL)
'This line ensures that the recordset is populated
If Not rs.BOF And Not rs.EOF Then
'Loops through the Array using dates for the filter
For i = LBound(myArray) To UBound(myArray)
If myArray(i, 1) Then
'Filters recordset with array dates
rs.Filter = "[EventStartDate]= " & myArray(i, 0)
'Open up new recordset based on filter
Set rsFiltered = rs.OpenRecordset
'Loop through new recordset
Do While (Not rsFiltered.EOF)
'Adds text to the 3rd column of the array
myArray(i, 2) = myArray(i, 2) & vbNewLine _
& rsFiltered!Type & " - " & vbNewLine _
& rsFiltered!Name & " " _
& rsFiltered!EventStartDate & " - " _
& rsFiltered!EventStopDate & " " _
& rsFiltered!EventStartTimeEachDay & " - " _
& rsFiltered!TechOpsGroup & " " _
& rsFiltered!TechOpsResource & " " _
& vbNewLine
rsFiltered.MoveNext
Loop
End If
Next i
End If
rsFiltered.Close
rs.Close
'Sets objects to nothing
Set rsFiltered = Nothing
Set rs = Nothing
Set db = Nothing
End Sub
【问题讨论】:
-
您收到什么错误?另外,为什么要使用两个记录集?我不确定您的预期结果是什么,但您应该能够通过将方法保持在一个记录集来精简您的代码。另外...您可以尝试在循环之前添加 rs.movelast 和 rs.movefirst 。这样一来,您始终指向收藏中的第一条记录。
-
这篇文章可以比我更好地解释记录集。 accessallinone.com/…
-
我希望您的查询中出现错误。删除查询中的变量并用表中的虚拟数据填充它们并对其进行测试。如果可行,则开始一一添加变量,直到将它们全部替换。这样,您就可以有效地隔离代码中出错的地方。用我的一位导师的话来说,软件开发人员 90% 的工作是寻找丢失的分号。
-
查询 qryPropertiesALLTypesALLTbls 是否引用了打开的表单 (forms!someform!somecontrol)? Debug.print strSQL,然后将其复制/粘贴到查询设计器的 SQL 视图中并运行它。源头会显露出来。
-
关于 qryPropertiesALLTypesALLTbls 的问题不是是否有必要。它是否包含一个打开表单的引用(forms!someform!somecontrol)?错误到底发生在哪一行?