Вопрос про Access ComboBox

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
fobus
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 29.11.2002 (Пт) 9:24

Вопрос про Access ComboBox

Сообщение fobus » 07.04.2003 (Пн) 5:21

В стандартном наборе инструментария Access есть замечательные комбобоксы и листбоксы. Замечательны они на мой взгляд потому, что можно сделать источником данных для них несколько полей.

Как зделать то же самое в ВБ 6?Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 07.04.2003 (Пн) 10:23

Есть библиотеке Microsoft Data Controls

В нее входят Data List и Data Combo.

fobus
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 29.11.2002 (Пт) 9:24

Сообщение fobus » 07.04.2003 (Пн) 12:31

Замечание принято - исправимся. :? Но я вопрос хотел поставить не "есть ли такое в VB", а как к комбобоксу ,как источники данных, зацепить два поля...

В Access я делаю так:
создаю табличку - справочник допустим Name с полями Name и NameID - которые текстовый и счетчик соответственно. На форму бросаю комбобокс, говорю, что источник строк - запрос SELECT Name.Name, Name.NameID FROM Name
Затем говорю комбу, что у него 2 столбца (Колумн.Каунт), и ширину столбцов задаю : 1 - как хочу, а 2-ой = 0см.

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


Если опустить всю риторику, то вопрос в следующем КАК КОМБОБОКСУ ЗАДАТЬ ИСТОЧНИКАМИ ДАННЫХ НЕСКОЛЬКО СТОЛБЦОВ

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 07.04.2003 (Пн) 12:56

C DataCombo такой номер не прокатит судя по всему. Потому что в его пропертях типа DataField или ListField можно указать только одно поле. Даже елси я укажу запрос вида SELECT Field, Field1 FROM table то все равно это ничего не меняет.

fobus
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 29.11.2002 (Пт) 9:24

Сообщение fobus » 08.04.2003 (Вт) 5:16

Из найденного:

либо что то вроде
{
ListBox1.ColumnCount = 2

ListBox1.AddItem "Item 1, Column 1"
ListBox1.List(0, 1) = "Item 1, Column 2"
ListBox1.AddItem "Item 2, Column 1"
ListBox1.List(1, 1) = "Item 2, Column 2"
- не годится, потому что есть хоть и большое, но ограничение по - Integer, да и как будет выглядить его рефреш :( },

либо отработать с Colection, либо по выбранной записи запрашивать таблицу о нужной записи ID еденицы справочника (маразм полный - рост трафика, торможение и т.д.)

Вопроса бы не возникло, если бы я этого (см. топик) не видел в Access!

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

fobus
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 29.11.2002 (Пт) 9:24

Сообщение fobus » 08.04.2003 (Вт) 12:57

Нашел еще кое что:
подключаю к Команду Комбобокс, .DataFields - говорю Name, а .DataBindings - NameID.

Работает!

А если понадобится 3 -тий столбец???

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

Сообщение alibek » 15.04.2003 (Вт) 8:45

fobus, аналогично.
Но если тебе так нравятся Access'овские контролы, почему бы тебе их не использовать? Заходишь в меню "Project" -> "Components", выбираешь вкладку "Designers" и включаешь "Microsoft Forms 2.0 Form". После этого ты сможешь добавить на форму ("Project" -> "More ActiveX Designers" -> "Microsoft Forms 2.0 Form") форму из VBA и разместить на ней VBA-шные контролы.

P.S. Сорри, обманул :) В Access используются свои собственные контролы, не VBA-шные. В VBA-шных тоже можно использовать несколько столбцов (и задавать для каждого ширину, в т.ч. и нулевую), но они не так удобны для работы с БД.
Lasciate ogni speranza, voi ch'entrate.

fobus
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 29.11.2002 (Пт) 9:24

Сообщение fobus » 17.04.2003 (Чт) 10:21

Тогда, начнем по порядку, если я не прав - пожалуйста, укажите где:
Такие инструменты, как комбобокс, листбокс являются инструментами ФОРМИРОВАНИЯ таблиц представления данных - (классика работы с базами данных - это иметь несколько "справочников" относительно стационарных данных, и необходимое количество Таблиц Представлений Данных, куда записываются ID "стационарных" данных из справочников. Этим реализуется нормальная реляционная модель - ТБД, по запросам, отображает Данные из справочников, подставляя их вместо ID.
Но чем (инструменты) подобное реализовать - вопрос ...

Да не разгневаю я RayShade, приведя пример того кода, которым приходится бороться с подобной несправедливостью:

Private cnnIngener As New ADODB.Connection
Private rstIngener As New ADODB.Recordset
Dim strSQL As String
Dim MyArray()
Private Sub Form_Load()
Dim A As Integer
ComboBox1.ColumnCount = 3
cnnIngener.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & frmMain.strConnct & ";" & _
"Persist Security Info=False")
strSQL = "SELECT Phone, Fam, Name, Otchestvo, `Password`, CodeAssign, Delete, Dostup " & _
"FROM Инженер" & _
" WHERE (((Инженер.Delete) = False));"
With rstIngener
.Open strSQL, cnnIngener, adOpenKeyset, adLockBatchOptimistic
ReDim MyArray(3, .RecordCount)
If Not .EOF Then
.MoveFirst
For A = 0 To .RecordCount - 1
MyArray(0, A) = .Fields(1) & " " & .Fields(2) & " " & .Fields(3)
MyArray(1, A) = .Fields(4)
MyArray(2, A) = .Fields!Dostup
.MoveNext
Next
End If
.Close
End With
cnnIngener.Close
ComboBox1.Column = MyArray
End Sub' в свойствах комбо я задал 48;0;0

Просьба, как всегда одна - подсказать, как Реляции реализавать более бескровным способом!!! :x

Alibek, ты прав - Forms 2 - это как раз инструментарий Access, но поведение их в Basice перпендикулярно родному - приведенный пример как раз ими и реализуется...


Вернуться в Базы данных

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 112

    TopList