SQL & .RecordCount

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Dummiel
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 11.06.2004 (Пт) 9:15
Откуда: Алтай

SQL & .RecordCount

Сообщение Dummiel » 08.07.2006 (Сб) 7:30

Здравствуйте!
Как узнать, сколько в таблице БД записей, удовлетворяющих условию, если таковых в таблице может не быть?

Когда пишешь
sSQL = "SELECT * FROM Table WHERE Num = '" & cNum & "'"
Set dbRS = dbRun.OpenRecordset(sSQL)

и проверяешь через

dbRS.MoveLast
var = dbRS.RecordCount,

то, если есть хоть одна запись, все нормально, var = 1,
а если такой записи еще нет, он выдает ошибку и сразу уходит на метку обработки ошибок.
А мне надо, чтобы

If var = 0 Then
dbRS.AddNew

и т.д. Короче, для одного человека в одной таблице м.б. несколько записей в другой таблице, если их нет - добавить, если есть - добавить и пронумеровать Count + 1.

Что-то с Do While ... Loop тоже не соображу.

Поле Num не индексировано, там могут встречаться одинаковые значения.

Нутром чую, что ответ прост, но не соображу. Или мозги плавятся?

С уважением - Dummiel.

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

Сообщение alibek » 08.07.2006 (Сб) 11:05

Пустой рекордсет проверяй на .EOF.
Lasciate ogni speranza, voi ch'entrate.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 08.07.2006 (Сб) 11:32

Если нужно только узнать количество:
Код: Выделить всё
SELECT count(*) FROM Table WHERE ... (твое условие)
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Dummiel
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 11.06.2004 (Пт) 9:15
Откуда: Алтай

Сообщение Dummiel » 11.07.2006 (Вт) 8:12

Хай, други!

Проверка на .EOF. действует безотбойно. Кстати, пока в ожидании ответа экспериментировал, нашел, что при открытии БД по
SQL-запросу работает еще и .RecordCount. Если нет записей по условию, то .RecordCount = 0. Если записи по условию есть,
то .RecordCount как минимум = 1. Только проверку нужно делать сразу после открытия.

А вот с [SELECT count(*) FROM TABLE WHERE ... (твое условие)] не разобрался. Когда открываю БД по этому запросу, то при
отсутствии записей по условию .RecordCount = 1, а .EOF = False.

Как понять эту непонятку?

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 11.07.2006 (Вт) 8:24

Код: Выделить всё
MsgBox OpenDatabase(sBase, 0, 0, sConnect).OpenRecordset("Select count(*) from " & sTable & IIf(Len(sWhere) > 0, " where " & sWhere, "").Fields(0)

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 11.07.2006 (Вт) 8:45

Как понять эту непонятку?
Возвращается одна запись с одним полем, содержащим результат select count(*).
Лучший способ понять что-то самому — объяснить это другому.

Dummiel
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 11.06.2004 (Пт) 9:15
Откуда: Алтай

Сообщение Dummiel » 12.07.2006 (Ср) 4:35

Во-о-он чо! :)
Спасибо!

Если ничего не помогает, прочтите, наконец, инструкцию! Законы Мерфи


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

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

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

    TopList