Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Combo_box
 
 автор: час   (14.02.2011 в 09:18)   личное сообщение
 
 


Private Sub IN_EKRAN_CLASS()
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset      ' набор записей
' открываем всe классы
rst.Open "SELECT CLASS_TBL.* From CLASS_TBL ", GLB_CONNECTION, adOpenKeyset, adLockOptimistic

'' Добавляет в список
If Not rst.BOF Then rst.MoveFirst
    Do While Not rst.EOF                                                               ' заполняем наименованиями список
        Me!Combo_CLASS.AddItem rst("NAME_CLASS"), 0    '    наименование
        Me!Combo_CLASS.AddItem rst("ID_CLASS"), 1             '  ID
        rst.MoveNext
    Loop

rst.Close
Set rst = Nothing
'значение высоты элемента ComboBox
SetComboHeight Me!Combo_CLASS, 600
End Sub


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

  Ответить  
 
 автор: snipe   (14.02.2011 в 09:41)   личное сообщение
 
 

У комбобокса свойство ControlType(Число столбцов) должно быть 2 (или сколько надо столбцов)

  Ответить  
 
 автор: osmor   (14.02.2011 в 10:02)   личное сообщение
 
 

почему просто не указать запрос в качестве источника записей комбокса?

  Ответить  
 
 автор: час   (14.02.2011 в 10:34)   личное сообщение
 
 

Потому что это не совсем Access - это VB6
====================================
может Me!Combo_CLASS.DataSource = rst.DataSource

нет, - говорит, что метод .DataSource - не найден .......
смешно, говорит нет - а сам его подставляет -тот атрибут

  Ответить  
 
 автор: ДрЮня   (14.02.2011 в 11:11)   личное сообщение
 
 

В бейсике это делается примерно так


Public Sub fill_combo(cmb As ComboBox)
Dim sSQL As String, rs As ADODB.Recordset
    
    On Error GoTo L_Err
    cmb.Clear
    Set rs = New ADODB.Recordset
    sSQL = "SELECT * From tblTest order by [name]"
    rs.Open sSQL, cnn
    If rs.EOF And rs.BOF Then GoTo L_Res
    If Not rs.BOF Then rs.MoveFirst
    Do While Not rs.EOF
        cmb.AddItem rs("Name")
        cmb.ItemData(cmb.NewIndex) = rs.Fields(fld & "ID")
        rs.MoveNext
    Loop
    rs.Close

L_Res: If cmb.ListCount Then cmb.Text = cmb.List(0)
L_Exit: Set rs = Nothing: Exit Sub
L_Err: MsgBox Err.Description & " (" & Err.Number & ")", vbExclamation, "fill_combo": GoTo L_Exit
End Sub

  Ответить  
 
 автор: snipe   (14.02.2011 в 11:12)   личное сообщение
 
 

а почему бы не собрать текстовое слово
и не подсунуть его в RowSource

  Ответить  
 
 автор: час   (14.02.2011 в 11:17)   личное сообщение
 
 

нету тама RowSource

====================================
Спасибо - ДрЮня , - пробываю.........

  Ответить  
 
 автор: Силblч   (14.02.2011 в 11:18)   личное сообщение
 
 

getrows
getstring

join(rst.getrows,";")

  Ответить  
 
 автор: час   (14.02.2011 в 11:19)   личное сообщение
 
 

Простите........ не понял.........

  Ответить  
 
 автор: Силblч   (14.02.2011 в 11:24)   личное сообщение
 
 

можешь в датасоурс поставить рекордсет или да?

  Ответить  
 
 автор: час   (14.02.2011 в 11:29)   личное сообщение
 
 

нет, - говорит, что метод .DataSource - не найден .......
смешно, говорит нет - а сам его подставляет -тот атрибут

или параметры метода не верны..........

  Ответить  
 
 автор: час   (14.02.2011 в 11:33)   личное сообщение
 
 

второй колонки комбика - пока не наблюдается......

вот с этой строкой кода - не врубаюсь

cmb.ItemData(cmb.NewIndex) = rs.Fields(fld & "ID") 

кто такой - fld

  Ответить  
 
 автор: ДрЮня   (14.02.2011 в 12:12)   личное сообщение
 
 

fld - имя поля
второй колонки и не будет, но можно получить ID записи, которая выбрана в комбике:

...
    ID = Combo_Test.ItemData(Combo_Test.ListIndex)
...

  Ответить  
 
 автор: час   (14.02.2011 в 12:27)   личное сообщение
 
 

ругается на имя поля fld
мжет в кавычки нуно - или.........

  Ответить  
 
 автор: ДрЮня   (14.02.2011 в 13:02)   личное сообщение
 
 

это обращение к полю рекодсета по имени
rs("ProjectID")
можно записать и как
rs("Project" & "ID")
и как
fld="Project"
rs(fld & "ID")

  Ответить  
 
 автор: час   (14.02.2011 в 13:03)   личное сообщение
 
 

Спасибо!!!

  Ответить  
 
 автор: Bellerofont   (15.02.2011 в 00:58)   личное сообщение
 
 

>Потому что это не совсем Access - это VB6
А разве VB6 combobox может иметь несколько столбцов?

Попробуйте использовать на VB6 форме combobox от MSForms.

  Ответить  
 
 автор: час   (16.02.2011 в 22:42)   личное сообщение
 
 

Наверное действительно - не может он иметь ............
Я применил ListView вместо него.......
Спасибо - Дрюня рассказал как им пользоваться.......

  Ответить  
 
 автор: Explorer   (14.02.2011 в 11:49)   личное сообщение
 
 

в Row Source Type объекта можно сразу засунуть функцию которая будет его заполнять
в т.ч. по колонкам

в хелпе есть пример

RowSourceType Property (User-Defined Function) - Code Argument Values

  Ответить  
 
 автор: час   (16.02.2011 в 22:44)   личное сообщение
 
 

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList