Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Работа с данными

Страница: 1 |

 

  Вопрос: ComboBox Добавлено: 29.07.09 10:26  

Автор вопроса:  Tegg2009
Всме привет. Скажите Плз. Как заполнить ComboBox значениями из Бд. Если можно с примером. Спасибо

Ответить

  Ответы Всего ответов: 14  

Номер ответа: 1
Автор ответа:
 inferno



Вопросов: 8
Ответов: 39
 Web-сайт: www.streamcash.tk
 Профиль | | #1
Добавлено: 29.07.09 16:02
Как понимаю тебе нужно заполнить комбобокс определённым столбцом из таблицы?

Если да, то делай следующее:

  1. private sub add_item_to_combobox()
  2.  
  3. adodc1.recordset.movefirst
  4. while not adodc1.recordset.EOF
  5.  adodc1.recordset.movenext
  6.  combo1.additem adodc1.recordset.fields("Tutu kakoe tebe nuzhno vpishi").value
  7. wend


end sub

Ответить

Номер ответа: 2
Автор ответа:
 Aston



ICQ: 214-179-991 

Вопросов: 42
Ответов: 272
 Профиль | | #2 Добавлено: 29.07.09 18:35
Мне кажется DataSource и DataMember полегче будет, конечно надо будет изменить подключение так как вроде DataSource рекордсет не принимает. Использовать инструменты АДО.Нэт и будет всё красиво.
Инферно не в обиду но мне кажется при переборе лучше использовать цикл фор и твой цикл пропускает первую строчку.
  1. adodc1.recordset.movefirst
  2. For i = 0 to adodc1.recordset.Count
  3. combo1.additem adodc1.recordset.fields("Tutu kakoe tebe nuzhno vpishi").value
  4. adodc1.recordset.movenext
  5. Next i
  6.  

Ответить

Номер ответа: 3
Автор ответа:
 Arvitaly



ICQ: 301746136 

Вопросов: 28
Ответов: 549
 Web-сайт: okazani.ru
 Профиль | | #3
Добавлено: 30.07.09 01:39
Инферно не в обиду но мне кажется при переборе лучше использовать цикл фор


Доводы?

Ответить

Номер ответа: 4
Автор ответа:
 Aston



ICQ: 214-179-991 

Вопросов: 42
Ответов: 272
 Профиль | | #4 Добавлено: 30.07.09 11:09
Доводы?

Собственное мнение и больше уверенность что не поймаю зацикливание, вообще стараюсь не использовать цикл While, только когда For не решает той или иной проблемы тогда использую, покамест в 90% For спасает лихо.

Ответить

Номер ответа: 5
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #5 Добавлено: 30.07.09 13:28
Aston: а сколько времени займет adodc1.recordset.Count для, скажем, миллиона записей?

P.S. К словам не цепляться, типа что в комбо лимон записей пихать не будут. это к фразе:
вообще стараюсь не использовать цикл While

Ответить

Номер ответа: 6
Автор ответа:
 Aston



ICQ: 214-179-991 

Вопросов: 42
Ответов: 272
 Профиль | | #6 Добавлено: 30.07.09 20:17
Arseny
а сколько времени займет adodc1.recordset.Count для, скажем, миллиона записей?
- это вообще к чему сказано? - это будет долго при любом раскладе и при While и при For. При For мне кажется будет быстрее так как при каждом действии не будет проверятся конец или не конец рекордсета.
И я это написал потому что мне кажется что более правильно использовать в таких ситуациях цикл For, так снижается вероятность ошибки и нет вероятности зацикливания, вот и всё.
А как кто писать будет это уже мне всё равно.
Arseny и Count это сколько строк(числовое значение), так что к чему твои слова вообще не понятно.

Ответить

Номер ответа: 7
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #7 Добавлено: 31.07.09 20:10
Aston пишет:
это будет долго при любом раскладе и при While и при For

не согласен. на вычисление количества записей уходит очень много времени при большой базе (раньше сам так делал для обеспечения прогрессбара на 2 лимона записей, но быстро от этого отказался), поэтому использовать count нецелесообразно. И к чему извращаться с лишними переменными, когда существуют конструкции, специально предназначенные для таких ситуаций?

Ответить

Номер ответа: 8
Автор ответа:
 Aston



ICQ: 214-179-991 

Вопросов: 42
Ответов: 272
 Профиль | | #8 Добавлено: 31.07.09 22:50
Ну если есть конструкция хоть блесни ею чтоб мы знали, даже самому интересно стало, так как я учусь ещё в программировании.
Про Count не знаю мож при большой базе и действительно много времени будет уходить, у меня лично таких проблем никогда не было(с огромными базами не работал) и тачка нормальная.
У меня тут же вопрос While чё быстрее будет? он при каждом действии будет проверять не конец ли данных.

Ответить

Номер ответа: 9
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #9 Добавлено: 01.08.09 12:13
под конструкциями как раз подразумевались циклы типа do...loop и while...wend вкупе с eof
Aston пишет:
While чё быстрее будет? он при каждом действии будет проверять не конец ли данных.

 

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

Ответить

Номер ответа: 10
Автор ответа:
 Aston



ICQ: 214-179-991 

Вопросов: 42
Ответов: 272
 Профиль | | #10 Добавлено: 01.08.09 17:32
Мде, надо будет потестить как то.

Ответить

Номер ответа: 11
Автор ответа:
 Tegg2009



Вопросов: 4
Ответов: 5
 Профиль | | #11 Добавлено: 16.09.09 12:09
Еще раз всем привет.

Вот прочитал я из базы запеси в комбобокс (ADODB)
(В таблице 1-поле ID 2-е name)
DO While NOT rs.EOF
Combo1.additem rs!Name
Combo1.DataMember= rs!ID
rs.Next
loop

Вот теперь мне нужно чтобы в зависимости от выбора в боксе, обращение в базу шло по ID.
Т.е как теперь пользоваться этим DATAMEMBER?? Заранее спасибо.

Ответить

Номер ответа: 12
Автор ответа:
 Tegg2009



Вопросов: 4
Ответов: 5
 Профиль | | #12 Добавлено: 16.09.09 15:29
маленькие изменения . Теперь я сделал так
Combo1.additem rs!Name
Combo1.ItemData(combo1.NewIndex)= rs!ID
и появляется ошибка , которая орет OverFlow

Ответить

Номер ответа: 13
Автор ответа:
 Tegg2009



Вопросов: 4
Ответов: 5
 Профиль | | #13 Добавлено: 16.09.09 17:09
все. разобрался.

Ответить

Номер ответа: 14
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #14 Добавлено: 18.09.09 13:50
Вычисление количества элементов (COUNT) всегда выполняется сканированием таблицы или самого маленького индекса.
Индекс таблицы на миллион записей, сделаный по однобайтовому полю, будет весить порядка десятка мегабайт при условии почти полного заполнения страниц.
Если взять скорость чтения с диска в 20 мб/с, то выполнение COUNT займет менее секунды. При условии что страницы закешированы - ощутимо быстрее.

При рабоет с БД оптимальным по скорости вариантом является чтение через DataReader циклом Do/Loop, поскольку никакого сравнимо эфективного способа получить запись по ее номеру нет.

Все выше сказаное касается SQL Server.

С небольшими базами данных разницы между различными способами досутпа обычно не будет.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам