Существует ли простой способ заполнения раскрывающегося списка в этой схеме базы данных доступа? - PullRequest
4 голосов
/ 29 мая 2009

У меня есть 3 таблицы, которые выглядят так:

Location                Node                 Sektor
-----                   -------              -------
PK: ID - Autonumber     PK: ID - Autonumber  PK: ID - Autonumber
Name                    NodeName             Sektor
Height                  Aksess               Frequency
Latitude                Tag                  Coverage
Longtitude              IP

Каждое местоположение связано с несколькими узлами, которые связаны с несколькими секторами.

Теперь интересная часть. В Microsoft Access вы можете создавать схемы, которые позволяют пользователям легко добавлять данные. У меня есть итоговая таблица, похожая на эту, и я хочу использовать мою схему для вставки данных в:

Customers
-------
PK: CustID
Name
Subscribtion
Sektor

Здесь я хочу, чтобы магия была совершена. Я хочу, чтобы пользователь мог сначала выбрать местоположение, затем представить доступные узлы (желательно в раскрывающемся списке), и, наконец, он может выбрать правильный сектор для добавляемого клиента.

Кто-нибудь знает довольно простой способ сделать это? Я начал делать макрос для этого, но моя память о макросах действительно плохая, и у меня нет необходимой литературы, чтобы посмотреть ее.

Любая помощь оценена =)

1 Ответ

5 голосов
/ 29 мая 2009

На самом деле очень плохая идея назвать что-либо Имя.

Мне кажется, вам нужны каскадные комбинированные списки. Вам понадобится немного VBA.

Два поля со списком, скажем, cboLocation и cboNodes, в forrm, который называется, скажем, frmForm

cboLocation

RowSource: SELECT ID, [Name]
FROM Locations
ORDER BY [Name]

ColumnCount: 2

ColumnWidths: 0;2.00cm  ''The second column can be any suitable width

LimitToList: Yes

События:

Private Sub cboLocation_AfterUpdate()
    Me.cboNode.Requery
End Sub

CboNode

RowSource: SELECT ID, NodeName
FROM Nodes
WHERE IP=[Forms]![frmForm]![cboLocation]
ORDER BY NodeName

ColumnCount: 2

ColumnWidths: 0;2.00 ''Ditto

LimitToList: Yes

События:

Private Sub cboNode_GotFocus()
    If Trim(Me.cboLocation & "") = vbNullString Then
        MsgBox "Please select location"
        Me.cboLOcation.SetFocus
    End If
End Sub

Вам также понадобится событие формы:

Private Sub Form_Current()
    Me.cboNode.Requery
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...