Шаг 61 - Реализация связи один ко многим

Сначала почитайте "Шаг 116 - Связи один ко многим", потом посмотрите, как это реализуется в "Шаг 27 - Связь один ко многим и Мастер форм". Если все нормально понятно, то можно попробовать реализовать это на VB. Нам нужны две таблицы со связью один ко многим. Реализовать их можете по разному, можете использовать SQL Server или MDB. Выбор за Вами. Я буду использовать ADO и MS SQL Server.

gif/61_1.gif (701 b)

Итак, помещаем на форму ADODC. Люди связаны с отделами по принципу из шага 116. Сделаем два ADODC. Первый будет выдавать записи из таблицы otdel.

SELECT * FROM otdel

С ним будет связано текстовое поле с именем отдела, в свойстве DataField нужно указать имя поля.

gif/61_2.gif (3548 b)

Второй ADODC будет выбирать таблицу со списком людей.

SELECT * FROM piple

Он нам на экране не нужен и его можно сделать скрытым (Visible=FALSE). Связываем GRID с этим AdoDC. Но. Нам же нужно показывать в списке людей по отделам. То есть при каждом перемещении нужно делать запрос. Значит, нам нужно отловить событие перемещение и при каждом этом событии посылать новый запрос ADODC2.

Private Sub Adodc1_MoveComplete(ByVal adReason As ADODB.EventReasonEnum,
		ByVal pError As ADODB.Error,
		adStatus As ADODB.EventStatusEnum,
		ByVal pRecordset As ADODB.Recordset)
If Not pRecordset.EOF And Not pRecordset.BOF Then
Dim d As String
d = "SELECT * From piple WHERE ID_OTDEL=" + Str(pRecordset!ID_OTDEL)
Adodc2.RecordSource = d
Adodc2.Refresh
End If
End Sub

Еще раз, что мы сделали. Мы установили два ADODC. При перемещении в ADODC1 формируется запрос для ADODC2. И результат этого запроса отображается в GRID, что и позволяет нам просматривать кто есть в отделах.

gif/61_3.gif (3166 b)


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.