СообЧа > База Знаний > Программирование > Visual Basic > Базы данных

Вопрос

Открываю базу с помощью DAO:

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSQL As String

Set db = DAO.OpenDatabase(App.Path & "\apiguide.mdb") _
strSQL = "SELECT * FROM Groups WHERE parentID=0;"

Set rs = db.OpenRecordset(strSQL)

rs.MoveFirst


Дальше начинаю считывать записи.
Так вот. Как только я открыл рекордсет, rs.RecordCount равен единице, хотя на самом деле записей около десятка. Что делать?

Ответ

Свойство RecordCount показывает не сколько всего записей у данного рекордсета, а сколько записей было обработанно. При инициализации и возврате рекордсета, объект ДАО не знает, сколько записей ему вернул сервер (точно знает о существовании только одной — самой первой записи, на которую и устанавливает курсор). Свойство MoveLast заставляет ДАО обработать все записи в рекордсете, от чего и свойство RecordCount устанавливается равным числу етих записей.

Что касается АДО, то там это «лечится» установкой свойства

RS.CursorLocation = adUseClient

перед откытием рекордсета.

Viaceslavas Kaleda

А можно выполнить дополнительный запрос:

DIM DB as DataBase
DIM RS as Recordset
Set DB = DBEngine.OpenDatabase("MyBase.mdb")
Set RS = Db.OpenRecordset("SELECT COUNT(*) as RecCount " & _
"FROM MyTable",dbopenforwardonly)

Затем получаешь:
rCount = RS!RecCount

Сергей Л.



Copyright © 2000-2004 Сообщество Чайников
Контактная информация