Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

ComboBox куда деть идентификатор записи?

333
15 февраля 2007 года
GHopper
200 / / 28.12.2004
Здравствуйте!
Есть некоторый 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 этой записи без повторного обращения к БД.
309
15 февраля 2007 года
el scorpio
1.1K / / 19.09.2006
Вариант 1: формируем массив Integer, после чего в цикле заполняем список (Name) и массив (ID) одновременно. Но это изврат.
Вариант 2: для ComboBox можно указать источник данных - настраивается в конструкторе формы. В свойство "Источник строк" пишется текст запроса
"select Name, ID from names"
И указывается "присоединённый столбец" - в данном случае - 2.

При выполнении "обновления" список будет заполнен значениями из первого стробца набора данных, а значение "присоединённого столбца" (здесь - ID) выбранной записи можно будет получить, используя свойство "Value" комбинированного списка.
333
16 февраля 2007 года
GHopper
200 / / 28.12.2004
Не понял.
Есть ControlSource и RowSource. Ни в первую, ни во вторую ничего не лезет (ошибку отписывает оболочка). Тут ведь надо где-то ADODB.Connection и ADODB.Recordset создать, куда-то их положить а уж потом в RowSource запрос писать (а что пихать в ControlSource?). В общем пример хочу. Дайте?
26K
19 февраля 2007 года
KreAtoR
1 / / 19.02.2007
Ничего не понял что здесь написано, но все равно решил вставить вопрос сюда а не открывать новую тему. Если я все таки правильно, то присоединяюсь к GHopper и прошу о примере.

Вот мой вопрос:

Незнаю как сделать чтобы программа написаная на Visual Basic6 динамически вставляла в ComboBox названия таблиц содержащихся в Datebase.
подразумевается что кто-нибудь может вставить таблицу о которой Вы можете не знать. При запуске программы у Вас появляется окно в котором Вы можете выбрать с какой таблицей работать. Это Вы выбираете в ComboBox. После чего название этой таблицы из ComboBox автоматически вставляется в код управления SQL.
Вставление названия в код идет без проблем, а вот динамически обновлять ComboBox с поиском новых таблиц сделать не могу.
Помогите Плиз, буду рад любой помощи.
263
19 февраля 2007 года
koltaviy
816 / / 16.12.2004
Цитата: KreAtoR
Ничего не понял что здесь написано, но все равно решил вставить вопрос сюда а не открывать новую тему. Если я все таки правильно, то присоединяюсь к GHopper и прошу о примере.

Вот мой вопрос:

Незнаю как сделать чтобы программа написаная на Visual Basic6 динамически вставляла в ComboBox названия таблиц содержащихся в Datebase.
подразумевается что кто-нибудь может вставить таблицу о которой Вы можете не знать. При запуске программы у Вас появляется окно в котором Вы можете выбрать с какой таблицей работать. Это Вы выбираете в ComboBox. После чего название этой таблицы из ComboBox автоматически вставляется в код управления SQL.
Вставление названия в код идет без проблем, а вот динамически обновлять ComboBox с поиском новых таблиц сделать не могу.
Помогите Плиз, буду рад любой помощи.


У Connection'a, к которому ты цепляешь базу должен быть метод вроде GetTableNames. Его и используй.

648
19 февраля 2007 года
Tiraspolsky
220 / / 23.07.2003
Тебе надо в цикле добавить оператор

Do While Not .EOF
MyCombo.AddItem (!name)
MyCombo.NewIndex.Itemdata=id '!!!!!
.MoveNext
Loop

где id=Recordset.Fields("id")
Recordset - результат запроса к БД "select id, [name] from names"
333
19 февраля 2007 года
GHopper
200 / / 28.12.2004
MyCombo.NewIndex.Itemdata=id
нету у меня таких членов класса ComboBox.
20K
20 февраля 2007 года
Mimino
18 / / 02.02.2007
Присоединяюсь к GHopper, у MyCombo свойство NewIndex есть, а Itemdata уже нет... может какую-нибудь библиотеку добавить??

Цитата: el scorpio

При выполнении "обновления" список будет заполнен значениями из первого стробца набора данных, а значение "присоединённого столбца" (здесь - ID) выбранной записи можно будет получить, используя свойство "Value" комбинированного списка.



и свойства Value у комбобокса я тоже не обнаружил.

648
20 февраля 2007 года
Tiraspolsky
220 / / 23.07.2003
Согласен. Допустил небрежность. Должно быть так:

MyCombo.Itemdata(MyCombo.NewIndex)=id
20K
20 февраля 2007 года
Mimino
18 / / 02.02.2007
Цитата: Tiraspolsky
Тебе надо в цикле добавить оператор

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??

263
20 февраля 2007 года
koltaviy
816 / / 16.12.2004
Цитата: Mimino
Таким образом, как я понял, заполняется список id для всех значений, а когда я выберу из комбобокса одно значение, как узнать его ID??


Всех желающих ответить на этот пост - прошу этого не делать!!
Иначе следующий вопрос будет "А как добавить значение в определенное место списка" или "А как удалить одно значение из списка"..
To Mimino: прочитай хотя бы одну книгу и все будет ясно!!
Задавать вопросы на форуме, ИМХО, необходимо если ты не нашел ответ сам!!!
Это неоднократно говорилось форумчанами, как на этой ветке, так и на других ветках этого форума, об этом также говорится в специальных разделах типа "Правила форума" веток форума..

20K
20 февраля 2007 года
Mimino
18 / / 02.02.2007
Цитата: koltaviy
To Mimino: прочитай хотя бы одну книгу и все будет ясно!!
Задавать вопросы на форуме, ИМХО, необходимо если ты не нашел ответ сам!!!



Согласен, я впервые осваиваю общение на форуме... и не ругайте меня сильно, но во всех найденых мною документациях рассказывалось о присвоении, добавлении и удалении по индексу самого MyCombo. Мне же хотелось присвоить этому индексу номера ключей из БД и при выборе одного элемента узнать не индекс присвоеный комбобоксом, а номер ключа БД соответствующий этому элементу, но без повторного обращения к БД. Может я когото запутал, т.к. сам я уже окончательно запутался.

648
21 февраля 2007 года
Tiraspolsky
220 / / 23.07.2003
To MIMINO

id=MyCombo.Itemdata(MyCombo.ListIndex)
333
22 февраля 2007 года
GHopper
200 / / 28.12.2004
Я вот что не понимаю - куда у меня девался метод Itemdata? Пишу на vba, входящий в состав MS Excel 2002. Подключены библиотеки MS Common Controls 2.0.6 (SP4), MS Common Controls 6.0 (SP4), MS Forms 2.0 Object Library...
Хотя! В MS VB 6.0 такой метод имеется... Как-же мне быть? Можно-ли в vba создать контрол моего собственного класса?

И еще вопросец - Combo_KeyPress не срабатывает при нажатии Enter! Как тогда обрабатывать это событие?
8.9K
24 февраля 2007 года
Залетин Виталий
71 / / 10.12.2005
Если поле ID числовое, то выберите из БД записи, отсортировав их по этому полю по возрастанию (Order By ID ASC) и в том же порядке (в принципе, как вы и делаете в коде) добавляйте их в список.
В итоге при выборе пользователем любой строки из списка, у Вас будет номер, на единицу меньший реального значения поля ID (в списке элементы начинаются с 0), а прибавить 1, думаю, труда не составит. Вот Вам и решение!

Но это действует, если поле ID идет от 1 по порядку без пропусков. Иначе лучше использовать ListView!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог