powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Recordcount в цикле. определение количества записей recordset.
15 сообщений из 15, страница 1 из 1
Recordcount в цикле. определение количества записей recordset.
    #39761842
mikle08es2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Есть запрос на вывод данных в 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 по второму пути?
...
Рейтинг: 0 / 0
Recordcount в цикле. определение количества записей recordset.
    #39761844
DarkMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikle08es2Добрый день. Есть запрос на вывод данных в Excel:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
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


mikle08es2И все вроде хорошо, все работает. Но выводит вез сортировки по нужны полям.
Добавляю последней строкой сортировку по нужным полям:
Код: sql
1.
sq = sq & "ORDER BY dbo_DATA.DATE, dbo_DATA.REGID;"


mikle08es2И начинаются проблемы. Поскольку recordcount не считает число записей
до обращения к ним. Из- за добавления строки с сортировкой :
Код: sql
1.
sq = sq & "ORDER BY dbo_DATA.DATE, dbo_DATA.REGID;" 


, обращение ко всем записям произошло. И нарушаются параметры вывода в цикле
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
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


mikle08es2Ведь каждый раз zap.RecordCount не становится на один больше ,а это теперь просто конечное число записей. Какой выход из ситуации???
Попытался переписать цикл:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
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


mikle08es2Но проблема в другом условие While zap.EOF <> True никогда не выполняется. цикл получается бесконечный.
Как решить вопрос с сортировкой по первому пути? или как поставить условие While по второму пути?
...
Рейтинг: 0 / 0
Recordcount в цикле. определение количества записей recordset.
    #39761859
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMan,
не помешал бы пробел перед order
sq = sq & " ORDER BY dbo_DATA.DATE, dbo_DATA.REGID;"
...
Рейтинг: 0 / 0
Recordcount в цикле. определение количества записей recordset.
    #39761860
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMan,

да и это не логично
Set zap = CurrentDb.OpenRecordset(sq)
If zap.RecordCount <> 0 Then
zap.MoveFirst
j=2
do While zap.EOF =false
j=j+1
For i = 1 To 56
l2.Cells(j, i) = zap.Fields(i).Value
Next i
zap.MoveNext
loop
End If
Set zap = Nothing
...
Рейтинг: 0 / 0
Recordcount в цикле. определение количества записей recordset.
    #39761861
DarkMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПЕНСИОНЕРКАDarkMan,
не помешал бы пробел перед order
sq = sq & " ORDER BY dbo_DATA.DATE, dbo_DATA.REGID;"
Вы меня не прекращаете радовать своим чувством юмора. Если Вы чмели заметить ,я лишь отредактировал сообщение ТС , заключив код в тэги CSV . :))
...
Рейтинг: 0 / 0
Recordcount в цикле. определение количества записей recordset.
    #39761862
DarkMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пенсионерка,
Кстати чего и Вам желал бы. Сами понимате,что отредактированные сообщения оегче читать.
...
Рейтинг: 0 / 0
Recordcount в цикле. определение количества записей recordset.
    #39761863
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikle08es2Но проблема в другом условие While zap.EOF <> True никогда не выполняется. цикл получается бесконечный.

А ты то хоть смотрел что в zap.RecordCount перед тем как его использовать ?
В твоем варианте там может быть все что угодно и даже минус 1
Как минимум не хватает MoveLast
Замечания к RecordCount
...
Рейтинг: 0 / 0
Recordcount в цикле. определение количества записей recordset.
    #39761868
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikle08es2,
Выдержка из HELP:" Свойство RecordCount не показывает, сколько записей содержится в динамическом или статическом объекте Recordset до обращения ко всем записям. "
Вы же обращаетесь в процедуре к этому свойству(которое до получения его значения будет при наличии записей=1. Позтому j = 2+ zap.RecordCount аналогично j=2+1.)
и вообще можно и такую конструкцию:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
a=1
j=3 'как я понял это столбец
Do Until rs.EOF
L2.cells(a,j)=RS![поле]
a=a+1
rs.MoveNext
Loop 
...
Рейтинг: 0 / 0
Recordcount в цикле. определение количества записей recordset.
    #39761875
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вернее так:
a=1
j=3 'как я понял это столбец
Do Until rs.EOF
L2.cells(a,j)=RS!Fields(a)' или RS!Fields(a+самиОпределите)
a=a+1
rs.MoveNext
Loop
...
Рейтинг: 0 / 0
Recordcount в цикле. определение количества записей recordset.
    #39761877
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikle08es2Поскольку recordcount не считает число записей до обращения к ним. какая гадость, эта ваша заливная рыба ©
...
Рейтинг: 0 / 0
Recordcount в цикле. определение количества записей recordset.
    #39761881
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikle08es2,
можно решить проблему так
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
' ...
const StroDobav&=2
dim NomStrok&, i%
With zap 
.movelast
NomStrok=.recordcount+1
do until .BOF
l2.rows(StroDobav).Insert
l2.Cells(StroDobav, 1) =NomStrok
                     For i = 2 To 57
                        l2.Cells(StroDobav, i) = .Fields(i-1)
                     Next
NomStrok=NomStrok-1
.movePrevious
Loop
end with


чем удобно - это может быть накопительный файл - куда ссыпаются данные в постоянном потоке и при этом свежие данные всегда сверху и нумерация идет по нарастающей.
и лучше все таки избавиться от таких перлов: "...dbo_DATA.DATE, dbo_DATA.DATE..."
"dbo_DATA.COUNT" - не нужно использовать зарезервированные слова
...
Рейтинг: 0 / 0
Recordcount в цикле. определение количества записей recordset.
    #39761935
mikle08es2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag,
Там число записей, около 20 000
...
Рейтинг: 0 / 0
Recordcount в цикле. определение количества записей recordset.
    #39761947
mikle08es2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКА,
Спасибо, как всегда помогли.


Все гениальное просто, особенно когда хорошо в чем то разбираешься.
...
Рейтинг: 0 / 0
Recordcount в цикле. определение количества записей recordset.
    #39761949
mikle08es2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alecko,

спасибо, вроде тоже работает.
...
Рейтинг: 0 / 0
Recordcount в цикле. определение количества записей recordset.
    #39762259
1. У Recordset-а есть св-во AbsolutePosition. Показывает значения от 0 до RecordCount-1. В вашем случае он бодходит вам идеально.
2. Зачем вы, вообще, пошли по пути поячеечного внесения данных? Это, как минимум, долго.
Если нет МЕМО полей, то метод листа CopyFromRecordset зальет вам все данные одной строкой кода.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Recordcount в цикле. определение количества записей recordset.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]