Ms access 未找到匹配项的SQL导致MsgBox
我的表单获取用户输入的数据,构造SQL语句并返回结果。我希望在没有找到匹配项时弹出一个消息框 我当前的代码/想法: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
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