2015-01-07 3 views
0

Я использую MS Access 2013. Моя база данных имеет четыре соответствующих таблиц:Расчетное поле из присоединенной таблицы

Table A) Numerical_Key_A, {Other Data Items} 
Table B) Numerical_Key_B, "Adjustment Value", {Other Data Items} 
Table C) Numerical_Key_C, {Other Data Items} 
Table D) {Other Data Items}, Link-to-B, Link-to-A, Link-to-C 

так, как это работает, однако, является то, что Link-на-C происходит в записи Таблица D всегда точно «Значение корректировки» от Numerical_Key_A. Таким образом, я хотел бы, чтобы Link-to-C автоматически рассчитывался при вводе Link-to-A и Link-to-B.

Насколько я могу судить, для этого потребуется таблица D с расчетным полем, которая получает свои данные из связанной таблицы B, доступ которой не разрешен. Есть ли другой способ сделать это? Я бы предпочел не использовать VBA, если это возможно, но если это единственный способ, я просто должен научиться этому. (Я знаю VBA для Excel, но никогда не использовал его в Access раньше).

+0

Как насчет запроса? –

+0

Я знаю, как создать запрос, но как использовать запрос для заполнения поля? Или я не понимаю, как я должен это структурировать? –

+0

Да, вы можете создать запрос, который возвращает вычисленные данные или даже лучше, вы можете использовать результаты запроса для обновления поля таблицы. Какое поле вы хотите вычислить? На основании какого условия? –

ответ

0

Если я понимаю, йо хорошо, все, что вам нужно сделать, это создать соединение между таблицами, например:

SELECT D.Field1, D.Field2, B.[Adjustment Value] 
FROM Table_D AS D INNER JOIN Table_B AS B ON D.Link-To-B = B.Numerical_Key_B 

Для получения дополнительной информации, пожалуйста, смотрите:
Join tables and queries
How to: Perform Joins Using Access SQL

[EDIT]

В таблице D есть поле, whi ch Я отмечен в приведенном выше фрагменте как «Ссылка на C». Это поле должно быть заполнено значением Link-на-А плюс TableB.AdjustmentValue

SELECT D.Field1, D.Link-To-C + D.Link-To-A + B.[Adjustment Value] AS CalculatedField 
FROM (Table_D AS D INNER JOIN Table_B AS B ON D.Link-To-B = B.Numerical_Key_B) 
INNER JOIN Table_C AS C ON C.Numerical_Key_C = D.Link-To-C) 
INNER JOIN Table_A AS A ON A.Numerical_Key_A = D.Link-To-A 

Примечание: у меня нет возможности проверить это. Это просто идея.

Наконец, я должен предупредить вас: Доступ любит ()/скобки/при использовании нескольких соединений.

[EDIT2]

На основе обсуждения, ниже запрос должен вернуть вычисляемое поле:

SELECT C.MetaLevel, R.LevelAdjustment, C.MetaLevel+ R.LevelAdjustment AS NominalLevel 
FROM tblRank AS R INNER JOIN tblCreatures AS C ON R.ID = C.Rank; 

Если вы хотите обновить NominalLevel через tblCreatures, используйте запрос, как это :

UPDATE tblCreatures AS C 
INNER JOIN tblRank AS R ON R.ID = C.Rank 
SET C.NominalLevel = (C.MetaLevel+ R.LevelAdjustment); 

NominalLevel был обновлен. Вы можете выбрать также ...

SELECT C.MetaLevel, R.LevelAdjustment, C.NominalLevel 
FROM tblRank AS R INNER JOIN tblCreatures AS C ON R.ID = C.Rank; 

Приветствия,
Maciej

+0

Итак, запрос работает, поскольку он создает хороший список из трех полей. Как использовать это в вычисленном поле или иначе фактически заполнять новое поле в таблице D результатами расчета с использованием данных в этом запросе? –

+0

В каком поле вы хотите вычислить? На основании каких критериев? Чтобы иметь возможность ответить, мне нужно знать логику, которую вы хотите использовать. –

+0

В таблице D есть поле, которое я обозначил в приведенном выше фрагменте как «Ссылка на C». Это поле должно быть заполнено значением Link-to-A плюс TableB.AdjustmentValue –

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