ComboBox куда деть идентификатор записи?
Есть некоторый ComboBox на форме. При инициализации последней он заполняется значениями из БД:
Cmd.CommandText = "select id, [name] from names"
With Rst
.Open Source:=Cmd, CursorType:=adOpenDynamic, LockType:=adLockOptimistic
.MoveFirst
Do While Not .EOF
MyCombo.AddItem (!name)
.MoveNext
Loop
.Close
End With
Так вот. После того, как пользователь выбрал нужное ему значение из MyCombo как можно узнать id этой записи без повторного обращения к БД.
Вариант 2: для ComboBox можно указать источник данных - настраивается в конструкторе формы. В свойство "Источник строк" пишется текст запроса
"select Name, ID from names"
И указывается "присоединённый столбец" - в данном случае - 2.
При выполнении "обновления" список будет заполнен значениями из первого стробца набора данных, а значение "присоединённого столбца" (здесь - ID) выбранной записи можно будет получить, используя свойство "Value" комбинированного списка.
Есть ControlSource и RowSource. Ни в первую, ни во вторую ничего не лезет (ошибку отписывает оболочка). Тут ведь надо где-то ADODB.Connection и ADODB.Recordset создать, куда-то их положить а уж потом в RowSource запрос писать (а что пихать в ControlSource?). В общем пример хочу. Дайте?
Вот мой вопрос:
Незнаю как сделать чтобы программа написаная на Visual Basic6 динамически вставляла в ComboBox названия таблиц содержащихся в Datebase.
подразумевается что кто-нибудь может вставить таблицу о которой Вы можете не знать. При запуске программы у Вас появляется окно в котором Вы можете выбрать с какой таблицей работать. Это Вы выбираете в ComboBox. После чего название этой таблицы из ComboBox автоматически вставляется в код управления SQL.
Вставление названия в код идет без проблем, а вот динамически обновлять ComboBox с поиском новых таблиц сделать не могу.
Помогите Плиз, буду рад любой помощи.
Вот мой вопрос:
Незнаю как сделать чтобы программа написаная на Visual Basic6 динамически вставляла в ComboBox названия таблиц содержащихся в Datebase.
подразумевается что кто-нибудь может вставить таблицу о которой Вы можете не знать. При запуске программы у Вас появляется окно в котором Вы можете выбрать с какой таблицей работать. Это Вы выбираете в ComboBox. После чего название этой таблицы из ComboBox автоматически вставляется в код управления SQL.
Вставление названия в код идет без проблем, а вот динамически обновлять ComboBox с поиском новых таблиц сделать не могу.
Помогите Плиз, буду рад любой помощи.
У Connection'a, к которому ты цепляешь базу должен быть метод вроде GetTableNames. Его и используй.
Do While Not .EOF
MyCombo.AddItem (!name)
MyCombo.NewIndex.Itemdata=id '!!!!!
.MoveNext
Loop
где id=Recordset.Fields("id")
Recordset - результат запроса к БД "select id, [name] from names"
нету у меня таких членов класса ComboBox.
При выполнении "обновления" список будет заполнен значениями из первого стробца набора данных, а значение "присоединённого столбца" (здесь - ID) выбранной записи можно будет получить, используя свойство "Value" комбинированного списка.
и свойства Value у комбобокса я тоже не обнаружил.
MyCombo.Itemdata(MyCombo.NewIndex)=id
Do While Not .EOF
MyCombo.AddItem (!name)
MyCombo.NewIndex.Itemdata=id '!!!!!
.MoveNext
Loop
где id=Recordset.Fields("id")
Recordset - результат запроса к БД "select id, [name] from names"
Таким образом, как я понял, заполняется список id для всех значений, а когда я выберу из комбобокса одно значение, как узнать его ID??
Всех желающих ответить на этот пост - прошу этого не делать!!
Иначе следующий вопрос будет "А как добавить значение в определенное место списка" или "А как удалить одно значение из списка"..
To Mimino: прочитай хотя бы одну книгу и все будет ясно!!
Задавать вопросы на форуме, ИМХО, необходимо если ты не нашел ответ сам!!!
Это неоднократно говорилось форумчанами, как на этой ветке, так и на других ветках этого форума, об этом также говорится в специальных разделах типа "Правила форума" веток форума..
Задавать вопросы на форуме, ИМХО, необходимо если ты не нашел ответ сам!!!
Согласен, я впервые осваиваю общение на форуме... и не ругайте меня сильно, но во всех найденых мною документациях рассказывалось о присвоении, добавлении и удалении по индексу самого MyCombo. Мне же хотелось присвоить этому индексу номера ключей из БД и при выборе одного элемента узнать не индекс присвоеный комбобоксом, а номер ключа БД соответствующий этому элементу, но без повторного обращения к БД. Может я когото запутал, т.к. сам я уже окончательно запутался.
id=MyCombo.Itemdata(MyCombo.ListIndex)
Хотя! В MS VB 6.0 такой метод имеется... Как-же мне быть? Можно-ли в vba создать контрол моего собственного класса?
И еще вопросец - Combo_KeyPress не срабатывает при нажатии Enter! Как тогда обрабатывать это событие?
В итоге при выборе пользователем любой строки из списка, у Вас будет номер, на единицу меньший реального значения поля ID (в списке элементы начинаются с 0), а прибавить 1, думаю, труда не составит. Вот Вам и решение!
Но это действует, если поле ID идет от 1 по порядку без пропусков. Иначе лучше использовать ListView!