RecordSet & Collection ????

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
teCa
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 09.10.2006 (Пн) 10:45

RecordSet & Collection ????

Сообщение teCa » 19.10.2006 (Чт) 11:04

Подскажите как оформить цикл так, чтобы записи рекордсета занести как элементы коллекции???

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

Сообщение Konst_One » 19.10.2006 (Чт) 11:10

Код: Выделить всё
Dim rs As ADODB.Recordset
Dim arr()

...

arr = rs.GetRows()

teCa
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 09.10.2006 (Пн) 10:45

Сообщение teCa » 19.10.2006 (Чт) 11:20

arr() это будет коллекция?

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

Сообщение alibek » 19.10.2006 (Чт) 11:29

Это будет массив.
Lasciate ogni speranza, voi ch'entrate.

teCa
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 09.10.2006 (Пн) 10:45

Сообщение teCa » 19.10.2006 (Чт) 11:33

Вот и я думаю, а мне же нужно коллекция

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

Сообщение Konst_One » 19.10.2006 (Чт) 11:38

а подумать головой не пробовал :?:

teCa
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 09.10.2006 (Пн) 10:45

Сообщение teCa » 19.10.2006 (Чт) 11:40

Да я думаю :cry:

Ну подскажите....

Хорошоб бы пример кода :roll:

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

Сообщение Konst_One » 19.10.2006 (Чт) 11:43

открой мастер создания классов в бейсике и сделай свою коллекцию

teCa
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 09.10.2006 (Пн) 10:45

Сообщение teCa » 19.10.2006 (Чт) 11:45

Да не нужно мне мастерам, мне кодам нужно....

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

Сообщение alibek » 19.10.2006 (Чт) 11:56

До кода ты еще не дорос.
Lasciate ogni speranza, voi ch'entrate.

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

Сообщение Andrey Fedorov » 19.10.2006 (Чт) 14:12

Вообще-то Recordset это и есть, грубо говоря, коллекция записей...

:lol:
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

teCa
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 09.10.2006 (Пн) 10:45

Сообщение teCa » 19.10.2006 (Чт) 15:08

Заполняю Recordset SQL запросом...

Код: Выделить всё
Set rstDep = DBconn.Execute("select distinct uid from problems")


Далее проверю rstDep на колличество записей...

Код: Выделить всё
rstDep.Fields.Count


rstDep.Fields.Count возвращает значение 1

Почему??

по запрос

Код: Выделить всё
select distinct uid from problems


возвращает намного больше?

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

Сообщение Antonariy » 19.10.2006 (Чт) 15:21

Потому что rstDep.Fields это поля, а не записи, поле у тебя всего одно - uid. Чтобы пройтись по всем записям:
Код: Выделить всё
While Not rstDep.EOF
    Debug.print rstDep!uid
    rstDep.MoveNext
Wend
Лучший способ понять что-то самому — объяснить это другому.

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

Сообщение Nicky » 20.10.2006 (Пт) 7:09

teCa писал(а):...по запрос

Код: Выделить всё
select distinct uid from problems


возвращает намного больше?

Интересно, а в этом случае число записей как смотрел?

teCa
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 09.10.2006 (Пн) 10:45

Сообщение teCa » 20.10.2006 (Пт) 8:06

Интересно, а в этом случае число записей как смотрел?


В Query Analyzer'e посмотрел.

teCa
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 09.10.2006 (Пн) 10:45

Сообщение teCa » 23.10.2006 (Пн) 9:55

Подскажите еще такую вещь пжста))))

Код: Выделить всё
DBconn.Open (DataEnvironment1.Connection1)
        Set rstDep = DBconn.Execute("select distinct department from problems")
         While Not rstDep.EOF
                     Set rstUsr = DBconn.Execute("select distinct uid from problems where department=" & "'" & rstDep!department & "'")
            While Not rstUsr.EOF
                collUsr.Add rstUsr!uid, CStr(rstUsr!uid)
                rstUsr.MoveNext
            Wend
            'collDep.Add rstDep!department, CStr(rstDep!department)
            rstDep.MoveNext
        Wend


Как мне сделать коллекцию collUsr элементом коллекции rstDep?

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

Сообщение Antonariy » 23.10.2006 (Пн) 10:00

Никак, rstDep рекордсет, а не коллекция.
Лучший способ понять что-то самому — объяснить это другому.

teCa
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 09.10.2006 (Пн) 10:45

Сообщение teCa » 23.10.2006 (Пн) 10:03

'collDep.Add rstDep!department, CStr(rstDep!department)


Вот уже и коллекция.

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

Сообщение Antonariy » 23.10.2006 (Пн) 10:07

В смысле "сделать коллекцию collUsr элементом коллекции colDep"? collDep.Add collUsr
Лучший способ понять что-то самому — объяснить это другому.

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

Сообщение GSerg » 23.10.2006 (Пн) 10:08

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

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

Сообщение Antonariy » 23.10.2006 (Пн) 10:12

С чего бы что?
Лучший способ понять что-то самому — объяснить это другому.

teCa
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 09.10.2006 (Пн) 10:45

Сообщение teCa » 23.10.2006 (Пн) 10:18

Что с чего бы??

Нужно чтоб элементами коллекции collDep (коллекция имен отделов) были коллекции (имя отдела) содержащие имена пользователей этого отдела... типо того будет:

Корневая коллекция(коллекция)---->имя отдела(коллекция)----->пользователь(массив)

Результат должен быть таким, чтоб можно было напрямую обращаться к объектам по их ключам.

Корневая коллекция(ключ).имя отдела(ключ).пользователь(индекс)

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

Сообщение Antonariy » 23.10.2006 (Пн) 10:23

Зачем что с чего бы???

collDep(Name).Users(x)
Так чтоль?
Последний раз редактировалось Antonariy 23.10.2006 (Пн) 10:25, всего редактировалось 1 раз.
Лучший способ понять что-то самому — объяснить это другому.

teCa
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 09.10.2006 (Пн) 10:45

Сообщение teCa » 23.10.2006 (Пн) 10:25

Да Да, точно так

Я сам не понял, что счего и для чего)

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

Сообщение Antonariy » 23.10.2006 (Пн) 10:27

Код: Выделить всё
While Not rstDep.EOF
    Set rstUsr = DBconn.Execute("select distinct uid from problems where department=" & "'" & rstDep!department & "'")
    While Not rstUsr.EOF
        collUsr.Add rstUsr!uid, CStr(rstUsr!uid)
        rstUsr.MoveNext
    Wend
    collDep.Add collUsr, CStr(rstDep!department)
    rstDep.MoveNext
Wend
Лучший способ понять что-то самому — объяснить это другому.

teCa
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 09.10.2006 (Пн) 10:45

Сообщение teCa » 23.10.2006 (Пн) 11:06

Хитро получается.....

Мнеже нужно менять коллекции :?

К примеру если у меня 30 отделов, не ужто нужно объявлять 30 коллекций? Можно их создовать каккто динамически?причем имя брать для нею нужно из значения rstDep!department??

Подскажите как можно это организовать... :?:

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

Сообщение Antonariy » 23.10.2006 (Пн) 11:53

Код: Выделить всё
sub x()
dim collUsr as Collection
While Not rstDep.EOF
    Set rstUsr = DBconn.Execute("select distinct uid from problems where department=" & "'" & rstDep!department & "'")
    Set collUsr = New Collection
    While Not rstUsr.EOF
        collUsr.Add rstUsr!uid, CStr(rstUsr!uid)
        rstUsr.MoveNext
    Wend
    collDep.Add collUsr, CStr(rstDep!department)
    rstDep.MoveNext
Wend
end sub
Лучший способ понять что-то самому — объяснить это другому.

teCa
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 09.10.2006 (Пн) 10:45

Сообщение teCa » 23.10.2006 (Пн) 12:18

А резве в итоге я не буду каждый раз переписывать одну и туже подколлекцию и менять её ключ?Или это у меня получатся разные подколлекции?

И еще:

почему не могу посмотреть элементы collDep??

Код: Выделить всё
Wend
            collDep.Add collUsr, CStr(rstDep!department)
            Debug.Print collDep(rstDep!department)
            rstDep.MoveNext
        Wend

но сам код отрабатывает без ошибок.А на Debug.Print collDep(rstDep!department) спотыкается.

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

Сообщение Antonariy » 23.10.2006 (Пн) 13:32

Код: Выделить всё
А резве в итоге я не буду каждый раз переписывать одну и туже подколлекцию и менять её ключ?
Нет. Set collUsr = New Collection создает новую коллекцию, а ссылка на старую остается в collDep.
А на Debug.Print collDep(rstDep!department) спотыкается.
Потому что collDep(x) возвращает то, что ты в нее положил - другую коллекцию, а не число или строку.
Лучший способ понять что-то самому — объяснить это другому.


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: Google-бот, Mail.ru [бот], Yandex-бот и гости: 135

    TopList