Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 未找到匹配项的SQL导致MsgBox_Ms Access_Vba_Ms Access 2010 - Fatal编程技术网

Ms access 未找到匹配项的SQL导致MsgBox

Ms access 未找到匹配项的SQL导致MsgBox,ms-access,vba,ms-access-2010,Ms Access,Vba,Ms Access 2010,我的表单获取用户输入的数据,构造SQL语句并返回结果。我希望在没有找到匹配项时弹出一个消息框 我当前的代码/想法: If qdf.sql = 0 Then MsgBox "No clients matching your information." & _ vbCrLf & "have been found. Please try again." & _ , vbCritical, "No Matches" Else

我的表单获取用户输入的数据,构造SQL语句并返回结果。我希望在没有找到匹配项时弹出一个消息框

我当前的代码/想法:

If qdf.sql = 0 Then
        MsgBox "No clients matching your information." & _
        vbCrLf & "have been found. Please try again." & _
        , vbCritical, "No Matches"
    Else
        DoCmd.OpenForm "frmSearchResults"
        Me.Visible = False
End If
如果qdf.sql=0,我很难找出
的正确语法

更新:完整查询

Private Sub cmdSearch_Click()

'On Error GoTo cmdSearch_Click_err

Dim db As Database
Dim strSQL As String
Dim rs As DAO.Recordset
Dim qdf As QueryDef
Dim strClientID As String
Dim strLastName As String
Dim strFirstName As String
Dim strDOB As String

Set db = CurrentDb
Set rs = db.OpenRecordset(qdf.sql)

' call QueryCheck module to determine if query exists
If Not QueryExists("qrySearch") Then
    Set qdf = db.CreateQueryDef("qrySearch")
Else
    Set qdf = db.QueryDefs("qrySearch")
End If

' handle nulls in the user's entries
    If IsNull(Me.txtClientID.Value) Then
        strClientID = " Like '*' "
        Else
        strClientID = "='" & Me.txtClientID.Value & "' "
    End If

    If IsNull(Me.txtLastName.Value) Then
        strLastName = " Like '*' "
        Else
        strLastName = " Like '" & Me.txtLastName.Value & "*' "
    End If

    If IsNull(Me.txtFirstName.Value) Then
        strFirstName = " Like '*' "
        Else
        strFirstName = " Like '*" & Me.txtFirstName.Value & "*' "
    End If

    If IsNull(Me.txtDOB.Value) Then
        strDOB = " Like '*' "
        Else
        strDOB = "='" & Me.txtDOB.Value & "' "
    End If

strSQL = "SELECT Clients.* " & _
         "FROM Clients " & _
         "WHERE Clients.clientid" & strClientID & _
         "AND Clients.namelast" & strLastName & _
         "AND Clients.namefirst" & strFirstName & _
         "AND Clients.birthdate" & strDOB & _
         "ORDER BY Clients.namelast,Clients.namefirst;"

Debug.Print strSQL

' check to see if the results form is open and close if it is
DoCmd.Echo False

If Application.SysCmd(acSysCmdGetObjectState, acForm, "frmSearchResults") = acObjStateOpen Then
    DoCmd.Close acForm, "frmSearchResults"
End If

' run SQL statment
qdf.sql = strSQL

' check for no matches found
    If rs.RecordCount = 0 Then
        MsgBox "No clients matching your information were found." & _
        vbCrLf & "Please search again.", vbInformation, "No Matches"
    Else
        DoCmd.OpenForm "frmSearchResults"
        Me.Visible = False
    End If

'cmdSearch_Click_exit:
'    DoCmd.Echo True
'    Set qdf = Nothing
'    Set db = Nothing

'Exit Sub

'cmdSearch_Click_err:
'        MsgBox "An unexpected error has occurred." & _
'        vbCrLf & "Please note of the following details and contact the EIIS support desk:" & _
'        vbCrLf & "Error Number: " & Err.Number & _
'        vbCrLf & "Description: " & Err.Description _
'        , vbCritical, "Error"
'    Resume cmdSearch_Click_exit

End Sub

如果您有ADO经验,可以使用

dim strSQL as String
dim conn as Connection
dim cmd as Command
dim rs as Recordset
(此处设置连接/命令)

(或者如果rs.recordcount=0,则返回recordcount需要使用正确的游标类型(通常为adOpenStatic)


如果其中任何一个是外来的,那么发布你的实际查询,我会尝试给你完整的代码。祝你好运

如果qdf.sql=0,则
不会执行正确检查的原因是
qdf
包含有关查询的信息,例如您在该语句中检查的sql文本,而不是结果

要获得查询结果,需要在生成查询后将其分配给
记录集。因此,首先构建查询,然后将其分配给记录集

Dim db as DAO.Database
Set db = CurrentDb

Dim qdf as DAO.Querydef
Set qdf = db.CreateQueryDef("qrySearch")

Dim rs as DAO.Recordset
Set rs = CurrentDb.OpenRecordset(qdf.sql)
然后可以检查记录集返回的内容

If rs.RecordCount = 0 then

因此,如果您有行
“run SQL station
,您可能希望放置
Set rs
行。

我收到错误
运行时错误'91':对象变量或未设置块变量
。set rs行正在抛出错误。如果有帮助的话,我已经用完整查询更新了我的帖子。您收到此错误是因为您试图在打开或修改SQL之前将查询定义分配给记录集。您需要将
Set rs
行放在您的
qdf.sql=strSQL
Dim db as DAO.Database
Set db = CurrentDb

Dim qdf as DAO.Querydef
Set qdf = db.CreateQueryDef("qrySearch")

Dim rs as DAO.Recordset
Set rs = CurrentDb.OpenRecordset(qdf.sql)
If rs.RecordCount = 0 then