我在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"但我无法弄清楚如何添加它并使其工作。
我希望我已经为某人提供了足够的信息来帮助我。
请有人帮助我,谢谢!
答案 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