2014-10-01 4 views
0

Я использую Access 2007.Множественные первичные и внешние ключи доступа

Таблицы: - бюджетные линии (project_id (PK), donor_code (PK), ...) - Контракты (project_id (FK), donor_code (FK), ...)

PK = Первичный ключ FK = Внешний ключ

Допустим, что я вошел в поле pROJECT_ID в таблице контрактов, и теперь я хочу, чтобы войти в поле donor_code: что мне нужно сделать, чтобы убедиться, что я могу выбирать только среди donor_codes, которые объединены с project_id что я вошел и не все существующие бюджетные коды?

+1

В вашем вопросе упоминаются первичные и внешние ключи, так что вы действительно установили [Связь] (http://office.microsoft.com/en-ca/access-help/guide-to-table-relationships-HA010120534 .aspx) между двумя таблицами? Вы исследовали [ссылочную целостность] (http://office.microsoft.com/en-ca/access-help/guide-to-table-relationships-HA010120534.aspx#_Toc269752116) и как вы можете [обеспечить соблюдение] (http: //office.microsoft.com/en-ca/access-help/guide-to-table-relationships-HA010120534.aspx#_Toc269752121) это? –

ответ

0

Ну, имея 2 поля в качестве первичного ключа, всегда было неудобно для меня.

Мое предложение было бы добавить поле autonumber в вашей таблице budget_lines и объявить его как первичный ключ. Затем вы можете индексировать 2 других поля, чтобы убедиться, что дубликатов нет.

Насколько я понимаю, у вас есть таблица Project и таблица доноров, которые связаны с таблицей бюджетных линий. И тогда вы хотите связать эти строки с контрактами.

Если вы вводите данные непосредственно в таблицу, я не могу найти решение. Тем не менее, если вы вводите их через форму, с небольшим количеством VBA можно найти некоторые обходные пути.

Одним из способов было бы использовать событие after_update ваших комбинированных полей для ProjectID и Donor_Code для изменения источника строки запроса другого комбинированного поля пары.

Код будет выглядеть примерно так:!

Private Sub ProjectID_AfterUpdate()

Если мне ProjectID.Value Is Null Тогда

Me.DonorCode.RowSource = "SELECT BudgetLines.Donor_Code, BudgetLines.Whatever >FROM BudgetLines;" 
Else 
    Me.DonorCode.RowSource = "SELECT BudgetLines.Donor_Code, BudgetLines.Whatever FROM BudgetLines WHERE BudgetLines.ProjectID= " & [Me]![ProjectID] & ";" 
End If 

End Sub

Смежные вопросы