У меня есть список в форме, которая загружается с использованием следующего кода, который вызывается непосредственно из события form_load только один раз.listbox загружает больше данных, чем должно было
Private Sub LoadList()
Dim rs As DAO.Recordset
Dim db As DAO.Database
Dim strSQL As String
Dim condition As String
Set db = CurrentDb
condition = " WHERE Schedule_ID = " & ScheduleID
strSQL = "SELECT Shifts.Shift_ID, Shifts.Start_Date_Time, Shifts.End_Date_Time, Locations.Location_Name FROM Shifts, Locations " & _
"WHERE Schedule_ID = " & ScheduleID & " AND Locations.Location_ID = Shifts.Location ORDER BY Start_Date_Time"
'Set Recordset Query
Set rs = db.OpenRecordset(strSQL)
RecCount = recordCount("Shifts", condition)
Me.lblCount.Caption = "Shift Count: " & RecCount
rs.MoveFirst
For i = 0 To RecCount - 1
Me.lstShifts.AddItem rs!Shift_ID & ";" & rs!Start_Date_Time & " TO " & rs!End_Date_Time & " AT " & rs!Location_Name
rs.MoveNext
Next i
'Close Connections and Reset Variables
rs.Close
Set rs = Nothing
Set db = Nothing
listdirty = False
End Sub
В базе данных всего десять записей, и все же список загружает данные три раза (всего 30). Я прошел через код, а в переменной RecCount он был правильно инициализирован до десяти, а цикл for повторяется в десять раз, как ожидалось. Этот элемент LoadList не вызывается более одного раза, поэтому я не понимаю, почему записи отображаются в списке несколько раз. Есть идеи?
Добавить 'Debug.Print strSQL', запустить код, скопировать текст оператора SELECT из окна Immediate и вставить его в SQL View нового запроса в конструкторе запросов. Когда вы запускаете этот запрос, сколько строк оно возвращается? – HansUp
Он возвращает 10 строк. – Alan
Ничего себе, это сработало. Я не знал, что вы можете сформировать SQL-запрос таким образом. Кстати, я обнаружил, что вызывало дублирование записей в списке. Когда я посмотрел на свойство RowSource в списке, он был заполнен существующими данными. Как это произошло, я не знаю. Конечно, ваше решение намного лучше. Спасибо – Alan