Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Связывание двух таблиц


Автор: korob2001 26.5.2005, 03:48
Привет!!!
Это опять я, с ламерскими вопросами. ;))) Проблема в следующем:

Есть некая база rest.mbd, в которой находится 2 таблицы:

Таблицица: Menu
http://denstelen.hop.ru/friends/first.gif

Таблица: MenuGroups
http://denstelen.hop.ru/friends/second.gif

Мне необходимо связать эти две таблицы по GroupId, с помощью DataList и DataCombo. Другими словами, в DataCombo должны отображаться группы из таблицы MenuGroups, когда пользователь выбирает одну из групп, то в DataList заносятся все меню, из таблицы Menu, которые относятся к выбранной группе.

Т.е. примерно так выглядит программа:
http://denstelen.hop.ru/friends/third.gif
Только как видно из примера, там отображён весь список меню, а мне необходимо, что бы при выборе Warm food, в DataList отображались только те меню, где GroupId = 2

Как настроить элементы, DataList и DataCombo, что бы они правильно отображали данные??? smile

Спасибо.

Автор: Gannibal 26.5.2005, 07:32
может хоть как нибудь поможет smile
http://www.microsoft.com/Rus/Msdn/Activ/MSVB/Archive/DataAccess/ADO/ControlsVB60-2.mspx

Автор: korob2001 26.5.2005, 08:38
M.E.G.U.S - за ссылку спасибо, но у меня есть точно такой же пример в книге. Честно говоря, я нифига из него не понял, точнее сказать, понял но не совсем. Вот например как связать DataGrid с DataCombo я понял, а вот как сделать сязку DataCombo и DataList нет. smile Я уже всю ночь пытаюсь реализовать по данному прмеру, интересующую меня связку. Прихожу постоянно к одному и тому же результату:
В DataCombo, всё как и задумывалось, а вот в DataList так и получаю весь список, независимо от того, какая группа выбрана в DataCombo =((

Автор: Gannibal 26.5.2005, 17:15
Я вот счас попробывал написать .. получилось типа такого

Код

Option Explicit

Dim Db As Database
Dim Rst As Recordset
Dim Rst2 As Recordset

Private Sub cmbMenu_Click()

On Error GoTo oshibka
Rst.MoveLast
nachalo:

If Rst.Fields("Index") = cmbMenu.ItemData(cmbMenu.ListIndex) Then
lstRaz.AddItem (Rst.Fields("Name"))
End If
Rst.MovePrevious
GoTo nachalo

oshibka:
End Sub

Private Sub Form_Load()
    Set Db = OpenDatabase(App.Path & "\proba.mdb")
    Set Rst = Db.OpenRecordset("SELECT * FROM Menu ORDER BY Index")
    Set Rst2 = Db.OpenRecordset("SELECT * FROM MenuGroups ORDER BY GroupId")
    
On Error GoTo oshibka

Rst2.MoveLast
nachalo:
cmbMenu.AddItem (Rst2.Fields("MenuGroup"))
cmbMenu.ItemData(cmbMenu.NewIndex) = Rst2.Fields("GroupId")
Rst2.MovePrevious
GoTo nachalo

Exit Sub
oshibka:
End Sub


короче работает на принципе что из одной базы данных берёт две таблицы с разными именами, потом програмно добавляем в КомбоБокс значения из МенуГроуп и пишем код при нажатии на Комбобокс если его значение ровно 1 или 2 то проидёт всей базой и выпишится в листбокс smile

ты так хотел?

вот и сам весь пример

Автор: Gannibal 26.5.2005, 17:56
ой я наверное перепутал. я употребил обычные элементы smile счас посмотрю на дата элементы хотя если взять можно употребить smile.. и как пример годиться smile для понятия как связать smile

Автор: korob2001 26.5.2005, 20:37
M.E.G.U.S smile - спасибо тебе за желание помочь, просто с помощью DataCombo и DataList можно реализовать всю эту байду не написав ниодной строки кода. Я даже как-то делал это, я теперь всё напрочь забыл. smile Но я уже кстати решил воспользоваться обычными елементами ComboBox и ListBox. Просто времени у меня мало, в воскресение должен закончить, но закладочку в книге я сделал на данной теме, что бы потом вернуться к ней.

Собственно есть ещё один маленький вопрос, но он настолько мал, что я не вижу смысла создавать для него отдельный топик. Потому задам его здесь.
Подскажите, можно ли при добавлении елемта списка в ListBox или ComboBox сохранять какое нить число, что бы потом можно было обращаться к нему по выделенному элементу??? Что то типа Tag, но не для всего списка один, а для каждого элемента списка.

Автор: Gannibal 26.5.2005, 22:32
Код

cmbMenu.AddItem (Rst2.Fields("MenuGroup"))   'так ты задаешь имя которое показываеться
cmbMenu.ItemData(cmbMenu.NewIndex) = Rst2.Fields("GroupId") 'а так можешь задать число.. я в примере так сделал


работает и на листбокс и на комбобокс одинаково помойму

Цитата(korob2001 @ 26.5.2005, 19:37)
DataCombo и DataList можно реализовать всю эту байду не написав ниодной строки кода. Я даже как-то делал это, я теперь всё напрочь забыл.


интерестно надо будет посмотреть меня это тоже интересует...

Автор: korob2001 26.5.2005, 23:24
Спасибо, сейчас буду пробовать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)