Новая запись каскадного сбоя в форме - PullRequest
0 голосов
/ 01 июня 2018

Если у вас нет времени для всего этого фона, будет очень полезно просто посмотреть на объединения в 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

Я знаю, это довольно беспорядочно.Но в основном мне просто нужно иметь возможность добавлять новые записи и обновлять существующие записи.Если у вас есть помощь, я буду очень признателен.Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...