На данный момент в таблице 2600 записей.
В Grid около 120 строк.
Использую следующий код:
- Код: Выделить всё
- Public Sub ReadStocks()
 Dim StockName As String
 Dim MyDate As String
 Dim ggg As String
 'On Error GoTo TypeErr
 MyDate = "#" & Format(Me.txtStockList.Text, "MM\/dd\/yyyy") & "#"
 With Me.MSHFlexGrid1
 MyCount = 0
 Select Case Me.cmbStockList(0).Text
 Case "Склад П1"
 For MyRow = 2 To .Rows - 1
 rsSQL = "SELECT TOP 1 * FROM Prihod WHERE Data <= " & MyDate & " And Index='" & .TextMatrix(MyRow, 0) & _
 "' order by Data DESC, q DESC;"
 Set rs = db.OpenRecordset(rsSQL)
 If rs.RecordCount = 0 Then .TextMatrix(MyRow, 7) = "+++++++++++++++": GoTo P1
 
 .TextMatrix(MyRow, 4) = Format(rs.Fields(2), "# ##0.00")
 If CVDbl(.TextMatrix(MyRow, 4)) = 0 Then .TextMatrix(MyRow, 4) = ""
 P1:
 rs.Close
 Next MyRow
 Case "Склад Н1"
 For MyRow = 2 To .Rows - 1
 rsSQL = "SELECT TOP 1 * FROM UhodN1 WHERE Data <= " & MyDate & " And Index='" & .TextMatrix(MyRow, 0) & _
 "' order by Data DESC, q DESC;"
 Set rs = db.OpenRecordset(rsSQL)
 If rs.RecordCount = 0 Then .TextMatrix(MyRow, 7) = "+++++++++++++++": GoTo N1
 
 .TextMatrix(MyRow, 4) = Format(rs.Fields(2), "# ##0.00")
 If CVDbl(.TextMatrix(MyRow, 4)) = 0 Then .TextMatrix(MyRow, 4) = ""
 N1:
 rs.Close
 Next MyRow
 Case "Склад брака"
 For MyRow = 2 To .Rows - 1
 rsSQL = "SELECT TOP 1 * FROM UhodCR WHERE Data <= " & MyDate & " And Index='" & .TextMatrix(MyRow, 0) & _
 "' order by Data DESC, q DESC;"
 Set rs = db.OpenRecordset(rsSQL)
 If rs.RecordCount = 0 Then .TextMatrix(MyRow, 7) = "+++++++++++++++": GoTo CR
 
 .TextMatrix(MyRow, 4) = Format(rs.Fields(2), "# ##0.00")
 If CVDbl(.TextMatrix(MyRow, 4)) = 0 Then .TextMatrix(MyRow, 4) = ""
 CR:
 rs.Close
 Next MyRow
 End Select
 
 If rs.RecordCount = 0 Then GoTo ee
 
 .TextMatrix(MyRow, MyCol) = Format(rs.Fields(2), "# ##0.00")
 If CVDbl(.TextMatrix(MyRow, MyCol)) = 0 Then .TextMatrix(MyRow, MyCol) = ""
 ee:
 rs.Close
 Next MyRow
 MyCol = MyCol + 1
 Loop
 Set rs = Nothing
 Exit Sub
 End Select
 .col = 1
 .Sort = 1
 End With
 On Error Resume Next
 rs.Close
 Set rs = Nothing
 End Sub
При смене названия склада в ComboBox (при такой смене происходитчтение данных из таблицы и запись их в Grid) программа зависает на некоторое время (две - три секунды). При увеличении количества записей период зависания увеличивается.
Использую DAO 3.6.
Интересно следующее: причина притормоза в DAO или в коде? Притормоз наблюдается на компе с программой. Можно ли как то избавиться от подобного зависания? Ускорить запрос …









