Есть ли способ удалить данные основной формы, если данные в подчиненной форме пустые? - PullRequest
1 голос
/ 09 июня 2019

У меня есть форма в MS Access, которая имеет подчиненную форму.

Моя проблема в том, что если пользователь начинает заполнять основную форму с помощью date, customer, IDOrderNumber и т. Д. И вдруг хочет покинуть форму, не вводя данные в подчиненную форму, когда он пытаетсянайти ту форму с таким же IDOrderNumber он не может.Но когда он вводит тот же IDOrderNumber, он не может, потому что это первичный ключ и не может допускать повторяющиеся значения.

Что мне делать?

Я попытался добавить поле поиска для IDOrderNumber, но оно не работает - оно показывает пустую форму / подчиненную форму Master и Child.Также у меня есть форма списка заказов, и я не могу получить доступ к форме, в которой не введены данные подчиненной формы.

Мне нужно решение, потому что это большая проблема для моего клиента / пользователя базы данных.

Спасибо всем заранее!

1 Ответ

0 голосов
/ 09 июня 2019

Для меня это звучит так: вы хотите, чтобы запись в главной форме была удалена, если в подчиненной форме не было введено никаких данных.Я предполагаю, что данные в подчиненной форме связаны с другой таблицей и используются для нескольких записей, привязанных к IDOrderNumber

. Я бы предложил использовать приведенный ниже код vba.Я предполагаю некоторую структуру вашей базы данных, поэтому исправьте меня при необходимости

Этот код будет добавлен в ваши MainForms Form_Close() Событие

Private Sub Form_Close()

Dim recordexists as Integer
Dim db as Database
Dim rs as Recordset
Dim strSQL as String


strSQL = "SELECT * FROM YourSecondaryTable T2 WHERE T2.IDOrderNumber =" & Me.IDOrderNumberField.Value
Set db = CurrentDb()
Set rs = db.OpenRecordset(strSQL)

'This recordset is checking to see if a value in the secondary table exists with the OrderNumber that exists in the main table.
With rs
    If Not .BOF And Not .EOF Then
        .MoveFirst
        While (Not .EOF)
            'If the code gets to this point, then a record exists in your subform.
            'So we set the value to 1
            recordexists = 1  
        Wend
    End If
    .Close
End With

'If the above recordset didnt find anything, the the recordexists value would never be set.
'Therefore you want to delete the parent record. So we delete it
If recordexists = 0 Then

    DoCmd.SetWarnings False
    DoCmd.RunSQL "DELETE TOP 1 FROM YourMainTable T1 WHERE T1.IDOrderNumber = " & Me.IDOrderNumberField.Value
    DoCmd.SetWarnings True


End IF

Set rs = Nothing
Set db = Nothing

End Sub
...