Обход записей в рекордсете

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

Обход записей в рекордсете

Сообщение alexshm » 26.06.2005 (Вс) 22:34

Братцы, подскажите - есть ли способ получить доступ к записям рекордсета как к коллекции записей без их обхода черех MoveFirst, MoveNext и EOF. Мне кажется, что For Each ... Next гораздо симпатичнее.

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

Сообщение Ennor » 27.06.2005 (Пн) 1:00

Записи в рекордсете хранятся не в коллекции, поэтому For Each Next к ним неприменим. И я не понимаю, с чего это код:
Код: Выделить всё
Do Until Rec.EOF
  ...
  Rec.MoveNext
Loop
вдруг стал несимпатичным. Снаружи это такой же итератор, как и For Each. Если же тебе нужен доступ к конкретной строке - почитай хелп по свойству AbsolutePosition, кажется, это оно самое. На эту тему ничего сказать не могу, т.к. никогда им не пользовался.

Tin
Woodsman
Woodsman
Аватара пользователя
 
Сообщения: 1001
Зарегистрирован: 08.12.2001 (Сб) 11:00
Откуда: Kazakhstan

Сообщение Tin » 27.06.2005 (Пн) 7:56

Мне больше нравиться использовать вот это:
Код: Выделить всё
sConn = "Provider=MSDASQL.1;Persist Security Info=False;Extended Properties=" & Chr(34) & "DSN=Áàçà äàííûõ MS Access;DBQ=C:\project\IP òåëåôîíèÿ\IP.mdb;DefaultDir=C:\project\IP òåëåôîíèÿ;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;UID=admin;" & Chr(34)
oConn.Open sConn
Dim arrEmployees As Variant
UCount = 0
Rem Ñîçäàåì ñïèñîê ïîëüçîâàòåëåé è èõ ëèìèòû
oRs.Open "select Èìÿ,Ëèìèò from Users order by èìÿ", oConn, adOpenKeyset, adLockOptimistic
arrEmployees = oRs.GetRows(oRs.RecordCount)
For I = 0 To oRs.RecordCount - 1
    Users(UCount).Name = arrEmployees(0, I)
    Users(UCount).Limit = arrEmployees(1, I)
    UCount = UCount + 1
Next
oRs.Close

Главное посмотри использование ArrEmployers
888888__88__88____88
__88________8888__88
__88____88__88__8888
__88____88__88____88

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

Сообщение Konst_One » 27.06.2005 (Пн) 10:15

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

Код: Выделить всё
For I = 0 To oRs.RecordCount - 1

Tin
Woodsman
Woodsman
Аватара пользователя
 
Сообщения: 1001
Зарегистрирован: 08.12.2001 (Сб) 11:00
Откуда: Kazakhstan

Сообщение Tin » 27.06.2005 (Пн) 11:09

Ну не знаю... Этот метод пошустрее будет ors.movenext...
888888__88__88____88
__88________8888__88
__88____88__88__8888
__88____88__88____88

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

Сообщение Konst_One » 27.06.2005 (Пн) 11:18

не все курсоры дают возможность узнать кол-во записей в рекордсете,
поэтому MoveNext в цикле более универсален

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

Сообщение Konst_One » 27.06.2005 (Пн) 11:23

а если уж юзать GetRows, то так:

Код: Выделить всё
arrEmployees = oRs.GetRows()
J=Ubound(arrEmployees,2)
K=Ubond(arrEmployees,1)
For I = 0 To J
    For m=0 to K
         Debug.Print arrEmployees(m, I)
    Next
Next

Tin
Woodsman
Woodsman
Аватара пользователя
 
Сообщения: 1001
Зарегистрирован: 08.12.2001 (Сб) 11:00
Откуда: Kazakhstan

Сообщение Tin » 27.06.2005 (Пн) 12:16

Я привел свой пример... Главное в нем getrows...
888888__88__88____88
__88________8888__88
__88____88__88__8888
__88____88__88____88

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

Сообщение Konst_One » 27.06.2005 (Пн) 12:28

Tin
пример хороший, только не забывай, что лучше один раз вычислить размерности рекодсета, чем их каждый раз в цикле проверять


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

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

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

    TopList