Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Запрос в теле программы возвращает только 1 запись  [new]
Katarina_kiev
Guest
Умоляю помогите!
Запрос в теле программы возвращает только 1 запись, запрос как объект базы данных точно такой же - больше.

Как сделать чтобы запрос в программе возвращал реальное кол-во записей?

Спасибо заранее!
24 июн 04, 19:06    [764273]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в теле программы возвращает только 1 запись  [new]
Alexander Popov
Member

Откуда:
Сообщений: 663
Что то не совсем понятно.
И запрос можно опубликовать.
24 июн 04, 19:14    [764285]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в теле программы возвращает только 1 запись  [new]
Katarina_kiev
Guest
Запрос ЭЛЕМЕНТАРНЫЙ
Set q = db.CreateQueryDef("", "SELECT * FROM priluki") - в теле программы и

SELECT * FROM priluki текст запроса.

в базе - 160 000 записей.

Так вот в программе RecordCount = 1.

я уже устала бороться. Запрос был с параметрами сначала, потом я методом исключения искала ошибку. и нашла...
24 июн 04, 19:18    [764292]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в теле программы возвращает только 1 запись  [new]
Alexander Popov
Member

Откуда:
Сообщений: 663
С recordCount свои заморочки лучше попробуй проверить количество записей
через rs.EOF
+ Поиск по форуму по ключевому слову RecordCount
(много интересного)
24 июн 04, 19:28    [764304]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в теле программы возвращает только 1 запись  [new]
Лифчик
Member

Откуда:
Сообщений: 1699
Если на основе запроса формируется рекордсет, то в свое время умные люди подсказали мне сделать rst.movelast, а потом rst.movefirst. Тогда RecordCount показывает правильное количество записей
24 июн 04, 19:40    [764323]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в теле программы возвращает только 1 запись  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Лифчик
Если на основе запроса формируется рекордсет, то в свое время умные люди подсказали мне сделать rst.movelast, а потом rst.movefirst. Тогда RecordCount показывает правильное количество записей

Но эта операция требует времени, поэтому стОит взвесить, нужен ли этот RecordCount.
24 июн 04, 19:41    [764325]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в теле программы возвращает только 1 запись  [new]
katarina_kiev
Guest
EOF = false

даже если я говорю курсору пойти на 54677 запись...

но мне нужно поочереди просмотреть строки из этого запроса...
что делать?
24 июн 04, 19:42    [764326]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в теле программы возвращает только 1 запись  [new]
katarina_kiev
Guest
с походом сначала в конец а потом в начало - работает...

и жело тут не во времени...
просто через задний проход как-то...
некрасивенько и неаккуратненько!
24 июн 04, 19:45    [764331]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в теле программы возвращает только 1 запись  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
katarina_kiev
EOF = false

даже если я говорю курсору пойти на 54677 запись...

но мне нужно поочереди просмотреть строки из этого запроса...
что делать?

Я обычно пишу так:

set rs=...
if not rs.bof then
do until rs.eof
...
rs.movenext
loop
end if
rs.close

Никакой recordcount здесь не нужен.
24 июн 04, 19:49    [764336]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в теле программы возвращает только 1 запись  [new]
katarina_kiev
Guest
спасибо большое!

я даже не надеялась на такой быстрый и классный ответ!

спасибо!
24 июн 04, 19:53    [764341]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в теле программы возвращает только 1 запись  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
:^)
24 июн 04, 19:53    [764342]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в теле программы возвращает только 1 запись  [new]
Лифчик
Member

Откуда:
Сообщений: 1699
Ну а я теперь буду писать примерно так: ...24/06/04 19:49 Саныч подсказал мне...итд
24 июн 04, 20:12    [764359]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в теле программы возвращает только 1 запись  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Лифчик
Ну а я теперь буду писать примерно так: ...24/06/04 19:49 Саныч подсказал мне...итд

А как же ты писал до сих пор??? Неужели так:

set rs=...
if not rs.bof then
rs.movelast
n=rs.recordcount
rs.movefirst
for i=1 to n
...
next
end if
rs.close

???
24 июн 04, 20:15    [764361]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в теле программы возвращает только 1 запись  [new]
(c)VIG
Member

Откуда:
Сообщений: 1507
автор
set rs=...
if not rs.bof then
rs.movelast
n=rs.recordcount
rs.movefirst
for i=1 to n
...
next
end if
rs.close
???

Саныч, ты зря смеешься. Не самый плохой вариант.И во многих случаях гораздо более быстрый.
24 июн 04, 20:24    [764370]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в теле программы возвращает только 1 запись  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Я не смеюсь. Я только спросил у Лифчика, писал ли он... ну и далее по тексту.
24 июн 04, 20:25    [764374]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в теле программы возвращает только 1 запись  [new]
Лифчик
Member

Откуда:
Сообщений: 1699
Саныч, долго искал, зачем мне RecordCount точный понадобился. Оказывается, в одном месте деляю ReDim одного массива на основании точного значения. А зачем это - самому теперь надо разбираться. Забыл :( Но в обычных ситуациях RecordCount конечно не нужен, достаточно знать, что он >0
24 июн 04, 20:47    [764395]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в теле программы возвращает только 1 запись  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Лифчик
Саныч, долго искал, зачем мне RecordCount точный понадобился. Оказывается, в одном месте деляю ReDim одного массива на основании точного значения. А зачем это - самому теперь надо разбираться. Забыл :( Но в обычных ситуациях RecordCount конечно не нужен, достаточно знать, что он >0

Да нет, с этим все понятно. Ты мне скажи, чем тебя так поразил мой пост от 19:49.
24 июн 04, 20:54    [764401]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в теле программы возвращает только 1 запись  [new]
(c)VIG
Member

Откуда:
Сообщений: 1507
Зато теперь Лифчик может писать
" до 24/06/04 19:49 и после 24/06/04 20:24 я писал... "
24 июн 04, 20:57    [764405]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в теле программы возвращает только 1 запись  [new]
Лифчик
Member

Откуда:
Сообщений: 1699
Саныч
чем тебя так поразил мой пост от 19:49.

Поразил тем же, чем и автора топика
автор
я даже не надеялась на такой быстрый и классный ответ!


Ты даешь ответ сразу более глубокий, потому что знаешь, чего челу надо (телепатия) В данном случае ты дал наводящий вопрос:
Саныч
Но эта операция требует времени, поэтому стОит взвесить, нужен ли этот RecordCount.
, из ответа на который понятно, что автору сам RecordCount не нужен. Это мастерство-с
24 июн 04, 21:09    [764412]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в теле программы возвращает только 1 запись  [new]
Geo
Member

Откуда:
Сообщений: 6883
Кстати, Лифчик прав:
help a97
Свойство RecordCount не показывает, сколько записей содержится в динамическом или статическом объекте Recordset до обращения ко всем записям. После обращения к последней записи набора значение свойства RecordCount становится равным полному числу неудаленных записей в объекте Recordset или TableDef. Для принудительного обращения к последней записи следует вызвать для объекта Recordset метод MoveLast. Кроме того, определить примерное число записей, которые будут возвращены в запросе, позволяет функция Count языка SQL.

Примечание. Заполнение с помощью метода MoveLast объекта Recordset при его открытии отрицательно сказывается на быстродействии. Если точное определение значения свойства RecordCount не требуется сразу после открытия объекта Recordset, рекомендуется подождать, пока объект Recordset будет заполнен в результате выполнения остальной программа, а уже потом обращаться к свойству RecordCount.
24 июн 04, 21:11    [764413]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в теле программы возвращает только 1 запись  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Чего только не узнаешь о себе...
24 июн 04, 21:12    [764414]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в теле программы возвращает только 1 запись  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
А я все кручу в голове (циклом) вот это:

(c)VIG
Не самый плохой вариант.И во многих случаях гораздо более быстрый.

Не могу понять, когда так может получиться.
24 июн 04, 21:15    [764416]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в теле программы возвращает только 1 запись  [new]
Geo
Member

Откуда:
Сообщений: 6883
В случае, если действительно надо узнать кол-во записей, movelast пожалуй будет работать быстрее, чем movenext:loop.
24 июн 04, 21:17    [764420]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в теле программы возвращает только 1 запись  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Geo
В случае, если действительно надо узнать кол-во записей, movelast пожалуй будет работать быстрее, чем movenext:loop.

Нет сомнения.
24 июн 04, 21:18    [764421]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в теле программы возвращает только 1 запись  [new]
(c)VIG
Member

Откуда:
Сообщений: 1507
Владимир Саныч
А я все кручу в голове (циклом) вот это:

(c)VIG
Не самый плохой вариант.И во многих случаях гораздо более быстрый.

Не могу понять, когда так может получиться.

Да все просто. В конструкции
do while not rs.EOF
.....
loop
на каждой итерации проверяется значение свойства EOF обьекта Recordset
А обращение к свойству операция более медленная чем чтение значения переменной. На больших обьемах данных потери в производительности могут достигать 25-30%.
24 июн 04, 21:55    [764431]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft Access Ответить