Отладка - ключ к рабочему коду!
Для простоты начните с отображения значений в непосредственном окне.
If Nz(Me.txtExpiryYear, "") = "" Then 'start with check as if empty exit
MsgBox "Please enter the year"
Resume Exit_Update
End If
Dim sqlString As String
'sqlString = "SELECT Format([Expiry_Date], ""mmmm"") AS [Month], Sum([Contracts].[Contract _Value (S$)]) AS [Contract Value], Count([Contracts].[Contract No]) AS [Number of Contract] FROM [Contracts] WHERE Year([Expiry_Date])= '" & Me.txtExpiryYear & "' GROUP BY Format([Expiry_Date],""mmmm"")"
'Debug.Print sqlString
sqlString = "SELECT Format([Expiry_Date], ""mmmm"") AS [Month], Sum([Contracts].[Contract _Value (S$)]) AS [Contract Value], Count([Contracts].[Contract No]) AS [Number of Contract] FROM [Contracts] WHERE Year([Expiry_Date])= [paraYear] GROUP BY Format([Expiry_Date],""mmmm"")"
With CurrentDb.CreateQuerydef(vbNullString) 'temp querydef
.sql = sqlString
.Parameters("paraYear") = Me.txtExpiryYear ' using a paremter
with .OpenRecordset
Do Until .Eof 'loop through rs
Debug.Print .Fields("Month").Value & " " & .Fields("Contract Value").Value & " " & .Fields("Number of Contract").Value
.MoveNext
Loop
End WIth
Set me.Recordset = .OpenRecordset 'assign recordset to form: controls need to be bound to query fields.
End With
Exit_Update:
Exit Sub
errorHandler:
If Err.Number = 3075 Then
MsgBox Err.Description
Resume Exit_Update
End If
Чтобы отобразить набор записей в элементах управления форм, присвойте ему значение Me.Recordset
и используйте те же имена полей, что и в предыдущем наборе записей, или вам нужно привязать новое поле.
Me.MyTextBox.ControlSource = "Month"
Что связывает столбец Month
запроса с MyTextBox
.