Sql在Access VB中选择Statment返回错误的值

时间:2016-08-01 15:54:28

标签: sql select access-vba

我在Access VB中编写了以下代码:

strSqlPay = "select * from T_Payment " & _
             "where StudentID = " & Me.ID.value & _
             "  And SchoolYear = """ & Year.value & """"
Set recSetPay = CurrentDb.OpenRecordset(strSqlPay)
countpay = recSetPay.RecordCount

T_Payment表包含以下信息:

ID  StudentID  SchoolYear  Semester  PaymentType  CheckNumber  AmountDue  AmountPaid  DatePaid

4   468        13          Fall      Check        100          $130.00    $130.00     29-Jul-16
5   468        13          Spring    Check        101           $60.00      $60.00      29-Jul-16
9   468        14          Fall      Check                     $190.00     $190.00      29-Jul-16
11    1        12          Fall      Cash           0            $1.00       $1.00      07-Mar-16

表单触发代码并给出StudentID = 468和SchoolYear = 14.计数返回3条记录。不是我想要的。如果我采用相同的语句并在查询中运行它,我得到的是我正在寻找的1条记录。

我还需要弄清楚如何扩展我的select语句以包含Semester =" Fall"但我无法弄清楚如何添加它并使其工作。

我希望我已经为某人提供了足够的信息来帮助我。

请有人帮助我,谢谢!

3 个答案:

答案 0 :(得分:0)

strSqlPay = "SELECT Count(*) AS RecCnt " & _
            "  FROM T_Payment " & _
            " WHERE StudentID = " & Me.ID.Value & _
            "   AND Val(SchoolYear) = " & Me.Year.Value & _
            "   AND UCase(Semester) = ""FALL"""
Set recSetPay = CurrentDb.OpenRecordset(strSqlPay)
countpay = recSetPay.Fields("RecCnt").Value

这假定SchoolYear是alpha而Me.Semester中有“Fall”或“Spring”。另外,我实际上并没有运行此代码,因此它可能会有拼写错误。

答案 1 :(得分:0)

您使用Me.ID.value获取ID值,但使用Year.Value而不是Me.Year.Value获取年份值。不是100%肯定,但这可能会返回错误的记录 - 它可能只是看着ID = 468而忽略了一年?

正如@StoneGiant所说 - Year是一个文本字段或数字字段,因为您将其视为文本。使用'而不是"来包装文本会更容易 例如SchoolYear = '" & Year.value & "'

答案 2 :(得分:0)

您的select语句不仅仅是对最后一条记录进行过滤。这就是为什么你获得3条记录的原因。您必须有一些方法来跟踪这些记录的输入顺序,然后选择该记录。如下所示:

SELECT TOP 1 * 
FROM T_Payment 
WHERE StudentID = Me.ID.value
    AND SchoolYear = Year.value
    AND Semester = 'Fall'
ORDER BY ID DESC