Повторяющиеся записи во всех связанных таблицах доступа с новым PK / FK, назначенным при событии нажатия кнопки - PullRequest
0 голосов
/ 29 августа 2018

У меня есть база данных Access с 5 таблицами:

  1. Report_Start содержит PK для [Report_ID]

  2. CommSummary содержит FK для [Report_ID]

  3. MRPCSummary содержит FK для [Report_ID]

  4. SQESummary содержит FK для [Report_ID]

  5. MEPSummary содержит FK для [Report_ID]

Report_ID связывает таблицы 2-4 с таблицей 1. relations

Пользователь вводит новую информацию отчета в форму пользователя (Дата отчета, Продавец, покупатель, планировщик и т. Д.), Которая хранится в таблице Report_Start. В разное время разные пользователи используют разные формы для заполнения таблиц 2-4, и все данные связаны с помощью [Report_ID], который представляет собой дату отчета и имя поставщика, объединенные вместе.

Я добавил кнопку в форму запуска, которая должна позволить пользователю дублировать существующие данные из всех 5 таблиц и назначить новый Report_ID и новую Report_Date. Это необходимо, потому что у пользователей есть только одно или два поля для обновления каждый раз, когда мы сообщаем о статусе поставщика. Они хотят скопировать старую запись в новую, а затем сделать одно или два обновления. (У меня уже есть формы и код, который позволяет обновлять существующие записи из каждой таблицы.) copy button

Новый Report_ID и Report_Date будут сгенерированы пользователем, выбирающим из диалогового окна:

a) Существующая дата отчета (Me.Cbo_OldDate)

b) Поставщик (Me.Cbo_Vendor)

в) Новая дата отчета (Me.Txt_NewDate) new data

После нескольких дней исследований я нашел оператор SQL, который был близок к тому, чего я хотел достичь, но я получаю синтаксические ошибки. И я только пытаюсь выполнить дублирование в таблице № 1 выше, чтобы проверить мой код перед атакой на реляционные таблицы 2-5.

Пока мой код:

Форма запуска (пользователь нажимает кнопку COPY RECORD):

Private Sub Cmd_Copy_Click()

DoCmd.OpenForm "New_Data", acNormal, , , , acDialog

End Sub

Форма New_Data, где пользователь выбирает существующую информацию отчета и новую дату отчета:

Private Sub Cmd_OK_Click()

Dim OldID As String
Dim NewID As String
Dim NewDate As Date
Dim strSQL As String


    OldID = Me.Cbo_OldDate & Me.Cbo_Vendor
    NewID = Me.Txt_NewDate & Me.Cbo_Vendor

    NewDate = Me.Txt_NewDate

    Me.Txt_Old_ID = OldID
    Me.Txt_New_ID = NewID

strSQL = "SELECT r.Report_ID, r.Report_Date, r.Vendor, r.Buyer, r.MRPC, r.SQE, r.MEP WHERE (((r.Report_ID) = ('" & OldID & "') INTO Report_Start as r WHERE (((r.Report_ID) = '" & NewID & "' and ((r.Report_Date) = (#" & NewDate & "#)));"

CurrentDb.Execute strSQL, dbFailOnError

End Sub

Я получаю ошибку:

error

Если кто-то может помочь мне определить, где находится ошибка, а затем дать мне несколько советов о том, как продублировать информацию в реляционных таблицах и назначить новый FK, равный новому PK, я был бы очень признателен! Я не хочу, чтобы каждый пользователь открывал свою индивидуальную форму, чтобы дублировать только свои данные.

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

1 Ответ

0 голосов
/ 30 августа 2018

Вы можете выполнить и вставить с помощью выбора и где, как это:

strSQL = "INSERT INTO Report_Start " & _
         " SELECT " & newID & ", #" & newDate & "#, r.Vendor, r.Buyer, r.MRPC, r.SQE, r.MEP" & _
         " FROM  Report Start as r " & _
         " WHERE r.Report_ID = " & oldID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...