Странное поведение RecordCount :\

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
MZX
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 08.10.2004 (Пт) 10:43

Странное поведение RecordCount :\

Сообщение MZX » 12.10.2004 (Вт) 13:47

Приветствую.
База в Access 2003.

Открываю рекордсет, запрашиваю количество записей (их с десяток), а он мне пишет -1. Хотя если убрать проверку кол-ва записей в IF...THEN, то все нормально заполняется :\
Пока обхожу это с помощью err, но все-таки хочется понять - что не так? И как быть, чтобы RecordCount показывал реальное число записей?

Вот пример кода:

Код: Выделить всё
lstWorkersAll.Clear
SELString = "SELECT Workers.WorkerNAME FROM Workers"
"WHERE NOT EXISTS(SELECT * FROM WorkerByGroup WHERE WorkerID = Workers.WorkerID)"
mRS.Source = SELString
mRS.Open
  if mRS.RecordCount>0 then
    mRS.MoveFirst
    Do While Not mRS.EOF
      lstWorkersAll.AddItem mRS.Fields(0)
      mRS.MoveNext
    Loop 
  end if
mRS.Close

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 12.10.2004 (Вт) 13:57

открывай клиентский курсор и будет все нормально

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 12.10.2004 (Вт) 14:09

Или другой вариант, делай запрос два раза, в первом заменяя select ... на select count(*).
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 12.10.2004 (Вт) 15:35

Ну советчики! :lol:

В общем делай так:

1. почитай на будущее Help по RecordCount

2. в твоем случае он даром не нужен. Вставляй следующий код:

Код: Выделить всё
mRS.Open
Do Until mRS.EOF
      lstWorkersAll.AddItem mRS.Fields(0)
      mRS.MoveNext
Loop 
mRS.Close
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.10.2004 (Вт) 15:46

Ну тогда уж movelast сразу...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 12.10.2004 (Вт) 15:49

Ну тогда уж movelast сразу...


Да зачем ему оно тут - ему ведь достаточно пробежаться по Recordset-у для заполнения списка. Для этого получать RecordCount совершенно не нужно. А вот курсор лучше пользовать статический, чтобы сервер поменьше дергать...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 12.10.2004 (Вт) 16:14

RecordCount нужен, если записей много, а он хочет организовать прогрессбар.
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 12.10.2004 (Вт) 16:16

Записей у него с десяток - см. первое письмо ;)
Да и дюже много записей в ListBox по определению не загрузить...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 12.10.2004 (Вт) 16:31

Ну как сказать :)
Из VB можно загрузить свыше 30 тысяч строк, тоже не мало. Но это ограничение VB (т.к. ListIndex есть Integer). А вообще в нем может быть свыше 4 миллиардов записей.
С VB3 был пример, как загрузить (очень быстро, несколько секунд на Pentium 166) несколько миллионов записей в ListBox.
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 12.10.2004 (Вт) 16:36

IMHO ListBox начинает довольно сильно тормозить с большим числом записей. Да и работать с таким числом записей загруженных в него довольно проблематично. Попробуй найти что-либо в нем.

И я ж не спорю что RecordCount в отдельных случаях бывает полезен, просто в данном случае он даром не нужен!
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 12.10.2004 (Вт) 16:44

Согласен :)
Просто бывают случаи, когда клиентский курсор недоступен. Тогда единственный способ посчитать кол-во записей -- сделать Count (хотя это коряво и не совсем правильно).
Lasciate ogni speranza, voi ch'entrate.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 12.10.2004 (Вт) 17:35

Народ, вы че? Это же совсем не так делается:
Rec.MoveLast
Rec.MoveFirst
И все, после этого RecordCount должен быть правильным... Если, конечно, курсор не Forward_Only :)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 13.10.2004 (Ср) 10:33

Ага. И если рекордсет не пустой (тогда будет ошибка). И еще куча "если". Тогда уж лучше клиентский курсор открыть.
Lasciate ogni speranza, voi ch'entrate.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 13.10.2004 (Ср) 11:01

я об этом и говорил сразу :)


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

    TopList