Добрый день. Есть запрос на вывод данных в Excel:
sq = "SELECT dbo_DATA.DATE, dbo_DATA.DATE, [Спр_кодов 80020 и ASKP].[Наименование объекта], dbo_DATA.REGID, [Спр_кодов 80020 и ASKP].[Тип объекта], [Спр_кодов 80020 и ASKP].[Уровень напряжения], [Спр_кодов 80020 и ASKP].Направление, Спр_ЧПН.Час, dbo_DATA.COUNT, dbo_DATA.H1, dbo_DATA.H2, dbo_DATA.H3, dbo_DATA.H4, dbo_DATA.H5, dbo_DATA.H6, dbo_DATA.H7, dbo_DATA.H8, dbo_DATA.H9, dbo_DATA.H10, dbo_DATA.H11, dbo_DATA.H12, dbo_DATA.H13, dbo_DATA.H14, dbo_DATA.H15, dbo_DATA.H16, dbo_DATA.H17, dbo_DATA.H18, dbo_DATA.H19, dbo_DATA.H20, dbo_DATA.H21, dbo_DATA.H22, dbo_DATA.H23, dbo_DATA.H24, dbo_DATA.H25, dbo_DATA.H26, dbo_DATA.H27, dbo_DATA.H28, dbo_DATA.H29, dbo_DATA.H30, dbo_DATA.H31, dbo_DATA.H32, dbo_DATA.H33, dbo_DATA.H34, dbo_DATA.H35, dbo_DATA.H36, dbo_DATA.H37, dbo_DATA.H38, dbo_DATA.H39, dbo_DATA.H40, dbo_DATA.H41, dbo_DATA.H42, dbo_DATA.H43, dbo_DATA.H44, dbo_DATA.H45, dbo_DATA.H46, dbo_DATA.H47, dbo_DATA.H48 "
sq = sq & "FROM (dbo_DATA LEFT JOIN Спр_ЧПН ON dbo_DATA.DATE = Спр_ЧПН.Дата) INNER JOIN [Спр_кодов 80020 и ASKP] ON dbo_DATA.REGID = [Спр_кодов 80020 и ASKP].Идентификатор "
sq = sq & "WHERE (((dbo_DATA.Date)>=#" & f_date_am(d1) & "# And (dbo_DATA.Date)<=#" & f_date_am(d2) & "#) AND (([Спр_кодов 80020 и ASKP].[Отчет, где используется])=""баланс""));"
Set zap = CurrentDb.OpenRecordset(sq)
If zap.RecordCount <> 0 Then
zap.MoveFirst
While zap.EOF <> True
For i = 1 To 56
j = 2 + zap.RecordCount
l2.Cells(j, i) = zap.Fields(i).Value
Next i
zap.MoveNext
Wend
End If
Set zap = Nothing
И все вроде хорошо, все работает. Но выводит вез сортировки по нужны полям.
Добавляю последней строкой сортировку по нужным полям:
sq = sq & "ORDER BY dbo_DATA.DATE, dbo_DATA.REGID;"
И начинаются проблемы. Поскольку recordcount не считает число записей до обращения к ним. Из- за добавления строки с сортировкой : sq = sq & "ORDER BY dbo_DATA.DATE, dbo_DATA.REGID;" , обращение ко всем записям произошло. И нарушаются параметры вывода в цикле
Set zap = CurrentDb.OpenRecordset(sq)
If zap.RecordCount <> 0 Then
zap.MoveFirst
While zap.EOF <> True
For i = 1 To 56
j = 2 + zap.RecordCount
l2.Cells(j, i) = zap.Fields(i).Value
Next i
zap.MoveNext
Wend
End If
Set zap = Nothing
Ведь каждый раз zap.RecordCount не становится на один больше ,а это теперь просто конечное число записей. Какой выход из ситуации???
Попытался переписать цикл:
Set zap = CurrentDb.OpenRecordset(sq)
If zap.RecordCount <> 0 Then
zap.MoveFirst
While zap.EOF <> True
For i = 1 To 56
For j = 3 To zap.RecordCount
l2.Cells(j, i) = zap.Fields(i).Value
Next j
Next i
zap.MoveNext
Wend
End If
Set zap = Nothing
Но проблема в другом условие While zap.EOF <> True никогда не выполняется. цикл получается бесконечный.
Как решить вопрос с сортировкой по первому пути? или как поставить условие While по второму пути?
https://www.sql.ru/forum/1307931/recordcount-v-cikle-opredelenie-kolichestva-zapisey-recordset