2013-12-26 4 views
0

Пожалуйста, у меня есть ограниченная логическая возможность.Ошибка доступа к MS Access

Текстовые поля для критериев поиска и кнопка SEARCH находятся в основной форме, а результаты поиска находятся во всплывающей форме.

Я не хочу, чтобы форма формы открывалась, если предоставленные критерии не совпадают с какой-либо записью в базе данных. Вместо этого я хочу, чтобы сообщение об ошибке «Извините, никаких критериев поиска» не появилось, но в моем текущем состоянии, когда нет соответствующих результатов/критериев нет, форма формы все же открывается с некоторыми записями вместе с сообщением об ошибке.

Вот код под кнопкой ПОИСК:

Private Sub btnSearch_Click() 
On Error GoTo Err_Msg 

If Not IsNull(Me.Form) Then 

    DoCmd.OpenForm "f_search" 
    ' Update the record source 
    Forms.f_search!f_search_sub.Form.RecordSource = "SELECT * FROM q_vehicles " & BuildFilter 

    Me.Requery 
Else 

Exit_btnSearch_Click: 
Exit Sub 

Err_Msg: 
MsgBox "Sorry, no search criteria.", vbInformation, "MV Clearance" 
End If 
End Sub 
+0

Ошибка нуждается в улучшении, объекты нуждаются в закрытии - см. подробности в ответе Дж. Боунса. – Smandoli

ответ

1

Вы можете легко сделать поиск первым, а затем открыть форму, только если что поиск возвращает результаты: обработка

Private Sub btnSearch_Click() 
Dim rec as Recordset 
Dim db as Database 
On Error GoTo Err_Msg 

Set db = CurrentDB 

If Not IsNull(Me.Form) Then 
    'First open the recordset 
    Set rec = db.OpenRecordset("SELECT * FROM q_vehicles " & BuildFilter & "") 

    'Check to make sure the recordset isn't empty. If it is, exit the sub 
    If rec.EOF = true then 
     GoTo Err_Msg 
    EndIf 

    DoCmd.OpenForm "f_search" 
    ' Update the record source 
    Forms.f_search!f_search_sub.Form.RecordSource = "SELECT * FROM q_vehicles " & BuildFilter 

    Me.Requery 
Else 

Exit_btnSearch_Click: 
    Set db = Nothing 
    Set rec = Nothing 
Exit Sub 

Err_Msg: 
MsgBox "Sorry, no search criteria.", vbInformation, "MV Clearance" 
End If 
GoTo Exit_btnSearch_Click 
End Sub 
+0

Это хороший ответ, но я призываю вас закрыть объекты 'rec' и' db'. Лучше всего выполнить до 'Exit Sub' ... использование' Resume' сразу после того, как сообщение облегчит это. – Smandoli

+0

Хороший улов, @Smandoli. Я обычно делаю это, но пропустил его, поэтому я отредактировал код. –

+0

Выглядит отлично. +1. Может потребоваться 'rec.Close'. – Smandoli

Смежные вопросы