Ms access 查询返回多行,而不是最大值

Ms access 查询返回多行,而不是最大值,ms-access,vba,Ms Access,Vba,我在Access中有一个表,其中包含相关字段EFTRecID、EFTRecIDNum和CreatedBy。EFTRecIDNum是一个自动编号字段,EFTRecID连接所需的CE&EFTRedIDNum格式。我试图返回当前用户创建的EFTRecID字段中的最高值。为此,我尝试执行一个子查询,查找MaxEFTRecIDNum WHERE Created=my name。但是,它不是返回最大值,而是返回所有使用我的名字的值。我知道我可以使用format选项来格式化EFTRecIDNum字段,但我需要

我在Access中有一个表,其中包含相关字段EFTRecID、EFTRecIDNum和CreatedBy。EFTRecIDNum是一个自动编号字段,EFTRecID连接所需的CE&EFTRedIDNum格式。我试图返回当前用户创建的EFTRecID字段中的最高值。为此,我尝试执行一个子查询,查找MaxEFTRecIDNum WHERE Created=my name。但是,它不是返回最大值,而是返回所有使用我的名字的值。我知道我可以使用format选项来格式化EFTRecIDNum字段,但我需要能够以CE456格式进行搜索

TL;DR:Query返回带有我名字的所有记录,而不是带有我名字的max

Public Sub DownloadMyRecords()

    Dim intI As Integer 'Used for looping in a variety of locations

    strSQL = "SELECT EFTRecID FROM tblEFTRec WHERE (SELECT MAX(EFTRecIDNum) FROM tblEFTRec WHERE CreatedBy = '" & Application.UserName & "')"

    Set cnn = New ADODB.Connection

    With cnn
        .Provider = "Microsoft.ACE.OLEDB.12.0;Data Source=" & dbLocation & "\" & dbName & ";Jet OLEDB:Database Password=" & DBPWord
        .Open dbLocation & "\" & dbName
    End With

    Debug.Print strSQL

    Set rst = New ADODB.Recordset
    rst.CursorLocation = adUseServer
    rst.Open Source:=strSQL, ActiveConnection:=cnn, _
             CursorType:=adOpenForwardOnly, LockType:=adLockOptimistic, _
             Options:=adCmdText

    Debug.Print (rst.GetString)

    rst.Close
    cnn.Close
    Set rst = Nothing
    Set cnn = Nothing

End Sub
尝试使用:

"SELECT EFTRecID FROM tblEFTRec 
WHERE EFTRecIDNum = (SELECT MAX(EFTRecIDNum) FROM tblEFTRec 
    WHERE CreatedBy = '" & Application.UserName & "')"
是否有以下不起作用的原因

"SELECT MAX(EFTRecID) FROM tblEFTRec 
WHERE CreatedBy = '" & Application.UserName & "'"
尝试使用:

"SELECT EFTRecID FROM tblEFTRec 
WHERE EFTRecIDNum = (SELECT MAX(EFTRecIDNum) FROM tblEFTRec 
    WHERE CreatedBy = '" & Application.UserName & "')"
是否有以下不起作用的原因

"SELECT MAX(EFTRecID) FROM tblEFTRec 
WHERE CreatedBy = '" & Application.UserName & "'"

请尝试以下SQL语句:

strSQL = "SELECT EFTRecID 
FROM tblEFTRec 
WHERE EFTRecIDNum = (SELECT MAX(EFTRecIDNum) FROM tblEFTRec WHERE CreatedBy = '" & Application.UserName & "')"

请尝试以下SQL语句:

strSQL = "SELECT EFTRecID 
FROM tblEFTRec 
WHERE EFTRecIDNum = (SELECT MAX(EFTRecIDNum) FROM tblEFTRec WHERE CreatedBy = '" & Application.UserName & "')"

无论您在WHERE子句中选择最大值,它都不会只返回一条记录。。。它只是结果集的一个过滤器,也就是说,返回我所有的记录,其中“EFTRecIDNum”的数字最大。如果您想要一个结果,请参阅下面的答案,或者使用SELECT TOP 1[same],但请记住,这只是缩小了完整结果集的范围,如果语句只返回一个结果集,则该语句仍然不好value@Mark感谢您花时间解释无论您在WHERE子句中选择最大值,它都不会只返回一条记录。。。它只是结果集的一个过滤器,也就是说,返回我所有的记录,其中“EFTRecIDNum”的数字最大。如果您想要一个结果,请参阅下面的答案,或者使用SELECT TOP 1[same],但请记住,这只是缩小了完整结果集的范围,如果语句只返回一个结果集,则该语句仍然不好value@Mark感谢您花时间解释Hanks JJ32,第一个选项非常有效。一旦足够长的时间过去,我将标记为正确。仅供参考,第二个选项不起作用,因为EFTRecID是字母数字的,而EFTRecIDNum只是数字部分。感谢JJ32,第一个选项工作得很好。一旦足够长的时间过去,我将标记为正确。仅供参考,第二个不起作用,因为EFTRecID是字母数字的,其中EFTRecIDNum只是数字部分。