На данный момент в таблице 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 или в коде? Притормоз наблюдается на компе с программой. Можно ли как то избавиться от подобного зависания? Ускорить запрос …