Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Количество записей в рекордсете


Автор: Aq1982 21.4.2005, 18:52
Добрый день. Еще одна проблема. Я в программе открываю рекордсет с помощью SQL -запроса (база MDB сделано в DAO). от так:
Код

z = "select copies.* from copies where itemid=" + Str(i)
Data1.RecordSource = z
Data1.Refresh
Debug.Print z
Set rs2 = Data1.Recordset
Debug.Print rs2.RecordCount


и recordCount мне возвращает, что в рекордсете одна запись, хотя я точно знаю что это не так. Добавляю на форму DBGrid с RecordSourse = Data1 все начинает работать. Удаляю - перестает.
Кто-нибуть мне может объяснить почему и как это обойти?

Автор: Aq1982 25.4.2005, 17:32
Разобрался!
интересная вещь: если открыть рекорсет вот так:
Код

Set db = OpenDatabase(path)

Set rs = db.TableDefs(1).OpenRecordset

то свойство RecordCount рекорсета вернет верное количество записей. Но если, упоси господи, вы хотите не все поля а только отбранные по запросу, те так:
Код

Set rs = db.OpenRecordset("select * from copies where time <#" + Str(Time) + "#")

то это свойство вернет либо один либо ноль. Видимо я не правильно понимаю его назначение.
Единственный способ узнать количество записей я пока нашел только вот такой:
Код

k = 0
Do Until rs.EOF
k = k + 1
rs.MoveNext
Loop

Может кому это может..... А может кто объяснит что не так со свойством RecordCount?

Автор: Akina 25.4.2005, 17:37
Хелпы читать умеем?

Цитата
Use the RecordCount property to find out how many records in a Recordset or TableDef object have been accessed. The RecordCount property doesn't indicate how many records are contained in a dynaset-, snapshot-, or forward-only–type Recordset object until all records have been accessed. Once the last record has been accessed, the RecordCount property indicates the total number of undeleted records in the Recordset or TableDef object. To force the last record to be accessed, use the MoveLast method on the Recordset object. You can also use an SQL Count function to determine the approximate number of records your query will return.


так что

Код

z = "select copies.* from copies where itemid=" + Str(i)
Data1.RecordSource = z
Data1.Refresh
Debug.Print z
Set rs2 = Data1.Recordset
rs2.MoveLast '!!!!!!!!!!!!!!!!!!!!!!
Debug.Print rs2.RecordCount

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)