Выполнение Append Query ничего не делает - PullRequest
0 голосов
/ 08 февраля 2019

Выполнение запроса на добавление ничего не делает

У меня странная проблема, которая по какой-то причине просто подняла свою уродливую голову.У меня есть форма, которая используется для добавления / редактирования / удаления записей в tblWorkOrder.Когда запись сохраняется, выполняется проверка, чтобы увидеть, существует ли сопутствующая запись в tblServiceRecord, и если нет (как если бы это была первая запись в tblWorkOrder при сохранении / вводе), она выполнит запрос (qryCreateSR).

Несколько недель назад все работало просто отлично.У меня не было проблем с этим, но затем я обновил tblServiceRecord, добавив несколько новых столбцов, и теперь он вообще не работает.Однако SQL для запроса не очерчивает ни один из этих новых столбцов, не говоря уже о какой-либо конкретной информации из tblWorkOrder.Так что я не совсем уверен, как возникла эта ошибка.

Вот SQL:

INSERT INTO tblServiceRecord ( WorkOrderID )
SELECT Forms![frmWorkOrders].Form![txtID];

А вот код, стоящий за командной кнопкой:

Private Sub cmdSave_Click()
    If DCount("*", "[tblServiceRecord]", "[WorkOrderID] = " & [Forms]![frmWorkOrders].[Form]![txtID]) > 0 Then
        Else
            DoCmd.SetWarnings False
            DoCmd.OpenQuery "qryCreateSR"
    End If

    DoCmd.RunCommand acCmdSaveRecord
    DoCmd.GoToRecord , "", acNewRec
    Me.lstWorkOrders.Requery
    Me.lstWorkOrders.Value = ""
    Me.txtComments.Value = ""

cmdSave_Click_Exit:
    Exit Sub

cmdSave_Click_Err:
    MsgBox Error$
    Resume cmdSave_Click_Exit
End Sub

После снятия подавления предупреждений у меня возникает проблема нарушения ключа .

Не знаю, что является причиной нарушения ключа.Я проверил свои таблицы, и эти две таблицы: tblWorkOrder и tblServiceRecord.Оба не имеют записей в них, я сжал базу данных, связанные поля (в tblServiceRecord, есть ссылка на tblWorkOrder с полем WorkOrderID) установлены на тот же тип данных (число), и дочерний-таблицы установлены в индексированный (нет).

На всякий случай, если кто-то захочет взглянуть на саму базу данных, вот ссылка:
https://drive.google.com/open?id=1_T-G9fyYQYjH3-YBe4PXhbBDTKNmY3ce

1 Ответ

0 голосов
/ 08 февраля 2019

Попробуйте сохранить текущую запись в форме (установив Me.Dirty = False), перед вставкой записи в другую таблицу.Поскольку вы пытаетесь вставить в дочернюю таблицу отношение к родительской таблице, у вас должна быть соответствующая (сохраненная) запись в родительской таблице.Когда вы создаете новую запись в форме, она сначала не существует в таблице, пока не будет сохранена в первый раз.

Private Sub cmdSave_Click()
    Me.Dirty = False ' Or DoCmd.RunCommand acCmdSaveRecord    <==== Save here
    If DCount("*", "[tblServiceRecord]", "[WorkOrderID] = " & [Forms]![frmWorkOrders].[Form]![txtID]) = 0 Then
        DoCmd.SetWarnings False
        DoCmd.OpenQuery "qryCreateSR"
    End If

    'Removed: DoCmd.RunCommand acCmdSaveRecord   <==== instead of here
    DoCmd.GoToRecord , "", acNewRec
    Me.lstWorkOrders.Requery
    Me.lstWorkOrders.Value = ""
    Me.txtComments.Value = ""

cmdSave_Click_Exit:
    DoCmd.SetWarnings True
    Exit Sub

cmdSave_Click_Err: // This code will never run, since a "On Error Goto cmdSave_Click_Err" is missing
    MsgBox Error$
    Resume cmdSave_Click_Exit
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...