我试图通过路线生成账单,所以我将其分解为属于特定路线的客户,然后针对每个客户总计他们的每周费率来编制每月费率。
问题是,即使用SELECT * IN [table]
打开记录集也不会返回任何内容,因此必定会有一些明显的错误。这是我的代码,如果有人能帮助我,我将非常感激。
Dim rs As DAO.Recordset
Dim rs2 As DAO.Recordset
Dim rs3 As DAO.Recordset
Dim custNo As Integer
Dim month_total_v As Integer
Dim weekTotal As Integer
Dim weekStart As Date
Dim sql As String
'sql = "SELECT cust_no FROM Roster WHERE route = Forms![routeBill]![route]"
Set rs = CurrentDb.OpenRecordset("SELECT CUST_NO FROM Roster WHERE ROUTE = 'Forms![routeBill]![route]'")
month_total_v = 0
MsgBox ("Boop.")
If Not (rs.EOF) Then
rs.MoveFirst
Do Until rs.EOF = True
MsgBox ("Boop.")
custNo = rs!CUST_NO
Set rs2 = CurrentDb.OpenRecordset("SELECT wk_rate, wk_strt_dt FROM Roster WHERE wk_strt_dt >= Forms![routeBill]![Text53] AND wk_strt_dt <= Forms![routeBill]![Text4] AND cust_no = custNo")
If Not (rs2.EOF And rs2.BOF) Then
rs2.MoveFirst
Do Until rs2.EOF = True
MsgBox "Boop."
weekStart = WK_STRT_DT
month_total_v = month_total_v + rs2!WK_RATE
Set rs3 = CurrentDb.OpenRecordset("SELECT * FROM monthTotal where cust_no = custNo and billMonth=month(weekStart) and billYear=year(weekStart)") 'specify date ranges to pick from to shorten query
If rs3.EOF Then
sql = "INSERT INTO monthTotal (cust_no, month_total, billMonth, billYear) VALUES (custNo, month_total_v, month(weekStart), year(weekStart))" 'Append, record does not exist
DoCmd.RunSQL sql
Else
sql = "UPDATE monthTotal SET month_total = month_total_v WHERE cust_no = custNo AND billMonth = month(weekStart) AND billYear = year(weekStart)" 'Update, record exists
DoCmd.RunSQL sql
End If
rs2.MoveNext
Loop
Else
'pass
End If
rs.MoveNext
Loop
End If
当所有存储的ROUTE值都不包含文字文本“Forms![routeBill]![route]”时,此查询不会返回任何记录...
SELECT CUST_NO FROM Roster WHERE ROUTE = 'Forms![routeBill]![route]'
在其他地方你有一个WHERE
条款,其中包括AND cust_no = custNo
。但是,由于custNo是一个VBA变量,因此db引擎对它没有任何了解,并将其解释为您尚未提供值的参数的名称。
您可以通过在DAO.QueryDef
中使用参数查询来避免这些类型的问题。然后提供参数值(从表单控件,VBA变量,等等......)并使用QueryDef.OpenRecordset
方法加载记录集。
这是一个简单的例子......
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim rs As DAO.Recordset
Dim strSelect As String
strSelect = "SELECT CUST_NO FROM Roster WHERE ROUTE = [which_route]"
Set db = CurrentDb
Set qdf = db.CreateQueryDef(vbNullString, strSelect)
qdf.Parameters("which_route").Value = Forms![routeBill]![route]
Set rs = qdf.OpenRecordset
With rs
If .BOF And .EOF Then
MsgBox "no matches found"
Else
.MoveLast
MsgBox .RecordCount & " matches"
End If
.Close
End With
请注意,参数查询技术无需在文本值周围添加引号(然后还可以处理可能包含其中的引号的文本值)并格式化日期/时间值并将它们包含在#
分隔符中。
问题出在这里:
FROM Roster WHERE wk_strt_dt >= Forms![routeBill]![Text53] AND wk
你应该超出表格![routeBill]![Text53]:
FROM Roster WHERE wk_strt_dt >= " & Forms![routeBill]![Text53] & " AND wk
您还需要正确的日期:
WHERE wk_strt_dt >= #" & Format(Forms![routeBill]![Text53], "yyyy\/mm\/dd") & "# AND wk_strt_dt ... etc