Если у вас нет времени для всего этого фона, будет очень полезно просто посмотреть на объединения в SQL, вставленном ниже.
Фон
У меня естьбаза данных, которую я использую для отслеживания данных о квалификации сотрудников (за текущий год и прогнозируемых на ближайшие 5 лет) в компании.Я прекрасно знаю, что я настроил базовые таблицы не очень хорошим образом, поэтому я полностью ожидаю получить комментарии / предложения по этому поводу.Так что, если я полностью перестроил мои настройки и начал с нуля, я открыт для этой идеи.В настоящее время, однако, ниже моя ситуация.
Настройка
- Все сотрудники оцениваются в 15 различных категориях и имеют прогнозируемые значения того, как их навыки должныменяются (растут) каждый год в течение следующих 5 лет во всех категориях.
- Я составлял базовые таблицы по категориям умений - таким образом, 15 базовых таблиц.
- Затем я делал запросы, которые собирали данные по навыкам.для всех категорий для всех сотрудников за данный год - итого 6 запросов (текущий год, 2018, 2019, 2020, 2021, 2022).
- Затем я сделал форму для редактирования-ввода данных.Я использовал запрос текущего года в качестве базовой формы и включил остальные 5 запросов в качестве подчиненных.
- В запросе на текущий год я включил все поля для базовой Информация о сотруднике , а также из одной таблицы Категория , которую я выбрал, чтобы включить ее в (я думаю, чтоэто таблица «Master», так как она единственная с этими дополнительными полями).
- Все остальные таблицы категорий имеют только EmpName и поля значений уровня навыка для каждого года.Я соединил все 15 таблиц с этой главной таблицей, используя поле EmpName (одинаковое для всех таблиц).
Проблема
У меня изначально была проблема, когда я не мог изменить ни одно из значений в форме (так что в основном это было только для чтения), но затем я изменил все отношения один на один, и это исправило этопроблема.Тем не менее, у меня тогда появилась блестящая идея изменить имя поля Name на EmpName (так как я прочитал Name не хорошее имя поля), и теперь, когдаЯ пытаюсь сохранить новые данные или изменения, я получаю сообщения об ошибках:
Ошибка: невозможно добавить / изменить ~ Требуется связанная запись b / c & Update / CancelUpdate без AddNew / Edit)
Я прошел весь код SQL и VBA и изменил Имя на EmpName , поэтому все таблицы / запросы, похоже, корректируют связь.Кроме того, эта база данных разбита на передний конец / задний конец.Я обновил ссылки в интерфейсе с момента внесения всех вышеперечисленных изменений.Также я МОГУ добавить записи прямо в таблицу.Таким образом, проблема должна быть с отношениями или кодом.
Код
SQL для запроса, связанного с базовой формой, приведен ниже.
SELECT [Developement Scenario Formation].Department, [Developement Scenario Formation].Title,
[Developement Scenario Formation].EmpName, [Developement Scenario Formation].[2017],
[Product Design].[2017], [Technical Information Gathering].[2017],
[Developement and Design Commissions].[2017],
[Plant Support].[2017], [Quality Issues Management].[2017],
[Overall Product].[2017], [Product Knowledge].[2017], [Safety/Health/Env Knowledge].[2017],
[Equipment Maintenance].[2017], [Measuring Instruments].[2017],
[Report Making].[2017], [Reports and Information Acquisition].[2017], Language.[2017],
OA.[2017], [Developement Scenario Formation].Status,
[Developement Scenario Formation].[Inactive Date]
FROM [Report Making] INNER JOIN ([Quality Issues Management]
INNER JOIN ([Overall Product]
INNER JOIN (OA INNER JOIN (((((((((([Developement and Design Commissions]
INNER JOIN [Developement Scenario Formation]
ON [Developement and Design Commissions].EmpName = [Developement Scenario Formation].EmpName)
INNER JOIN [Equipment Maintenance]
ON [Developement Scenario Formation].EmpName = [Equipment Maintenance].EmpName)
INNER JOIN [Language] ON [Developement Scenario Formation].EmpName = Language.EmpName)
INNER JOIN [Measuring Instruments]
ON [Developement Scenario Formation].EmpName = [Measuring Instruments].EmpName)
INNER JOIN [Plant Support]
ON [Developement Scenario Formation].EmpName = [Plant Support].EmpName)
INNER JOIN [Product Design]
ON [Developement Scenario Formation].EmpName = [Product Design].EmpName)
INNER JOIN [Product Knowledge]
ON [Developement Scenario Formation].EmpName = [Product Knowledge].EmpName)
INNER JOIN [Reports and Information Acquisition]
ON [Developement Scenario Formation].EmpName = [Reports and Information Acquisition].EmpName)
INNER JOIN [Safety/Health/Env Knowledge]
ON [Developement Scenario Formation].EmpName = [Safety/Health/Env Knowledge].EmpName)
INNER JOIN [Technical Information Gathering]
ON [Developement Scenario Formation].EmpName = [Technical Information Gathering].EmpName)
ON OA.EmpName = [Developement Scenario Formation].EmpName)
ON [Overall Product].EmpName = [Developement Scenario Formation].EmpName)
ON [Quality Issues Management].EmpName = [Developement Scenario Formation].EmpName)
ON [Report Making].EmpName = [Developement Scenario Formation].EmpName;
Я также включил код VBA для формы, поскольку это может быть причиной ошибки «При обновлении».
Private Sub LEAVESUBFORMDUMMY_GotFocus()
Me.[cntrlDevelopement Scenario Formation.2018].SetFocus
Parent.SetFocus
Parent.[SbFrm_2018 LEVELS (ALL)].SetFocus
Parent.[SbFrm_2018 LEVELS (ALL)]![cntrlDevelopement Scenario Formation.2019].SetFocus
End Sub
Private Sub Form_Activate()
If Me.AllowAdditions Or Me.AllowEdits Or Me.AllowDeletions Then
Me.Command57.Visible = True
Else
Me.Command57.Visible = False
End If
End Sub
Private Sub Form_AfterDelConfirm(Status As Integer)
If Status = acDeleteOK Then Call AuditChanges("Action", "DELETE", Form)
End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer)
If Me.NewRecord Then
Call AuditChanges("Action", "NEW", Form)
Else
Call AuditChanges("Action", "EDIT", Form)
End If
End Sub
Private Sub Form_Current()
If Me.AllowEdits Then
Me.Command73.Visible = True
Me.Toggle96.Visible = True
Else
Me.Command73.Visible = False
Me.Toggle96.Visible = False
End If
End Sub
Private Sub Form_Open(Cancel As Integer)
Me.Filter = "[Status] = 'Active'"
Me.FilterOn = True
Me.Requery
End Sub
Private Sub Form_Resize()
If Me.AllowAdditions Or Me.AllowEdits Or Me.AllowDeletions Then
Me.Label94.Visible = True
Else
Me.Label94.Visible = False
End If
End Sub
Private Sub Toggle96_AfterUpdate()
If Me.Toggle96 = True Then
Me.Filter = "[Status] = 'Inactive'"
Me.FilterOn = True
Else
Me.Filter = "[Status] = 'Active'"
Me.FilterOn = True
End If
End Sub
Private Sub Toggle96_Click()
If Me.AllowEdits = True Then
Me.AllowEdits = False
Me.SbFrm_2018_LEVELS__ALL_.Locked = True
Me.SbFrm2019_LEVELS__ALL_.Locked = True
Me.SbFrm2020_LEVELS__ALL_.Locked = True
Me.SbFrm2021_LEVELS__ALL_.Locked = True
Me.SbFrm2022_LEVELS__ALL_.Locked = True
Me.Command97.SetFocus
Me.Command73.Visible = False
Me.Command57.Visible = False
Me.Label94.Visible = False
Me.Toggle96.Visible = False
Else
Me.AllowEdits = True
Me.Command73.Visible = True
Me.Command57.Visible = True
Me.Label94.Visible = True
Me.Toggle96.Caption = "Show Inactive Profiles"
End If
End Sub
Я знаю, это довольно беспорядочно.Но в основном мне просто нужно иметь возможность добавлять новые записи и обновлять существующие записи.Если у вас есть помощь, я буду очень признателен.Спасибо.