Хотя ссылка [Forms]! ... по умолчанию ссылается на форму, когда QueryDef запускается из графического интерфейса, на самом деле это просто еще один параметр в запросе в VBA. В результате вы не должны перекодировать ваш запрос / создать новый. Кроме того, как отметил @Brad, независимо от того, находится ли параметр в конечном запросе цепочки запросов или нет, вы можете ссылаться на параметр так, как если бы он был в коллекции окончательного запроса. В этом случае вы должны использовать код, подобный этому:
Sub GetQryAllocDebits(dteAllocStart As Date, dteAllocEnd as Date)
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim rst As DAO.Recordset
Set db = CurrentDb()
Set qdf = db.QueryDefs("qryAlloc_Debit")
If CurrentProject.AllForms("frmReportingMain").IsLoaded Then
qdf.Parameters("[forms]![frmReportingMain]![txtAllocStart]") = [forms]![frmReportingMain]![txtAllocStart]
qdf.Parameters("[forms]![frmReportingMain]![txtAllocEnd]") = [forms]![frmReportingMain]![txtAllocEnd]
Else
qdf.Parameters("[forms]![frmReportingMain]![txtAllocStart]") = CStr(dteAllocStart)
qdf.Parameters("[forms]![frmReportingMain]![txtAllocEnd]") = CStr(dteAllocEnd)
End If
Set rst = qdf.OpenRecordset
Do Until rst.EOF
'...do stuff here.
Loop
Set rst = Nothing
Set qdf = Nothing
Set db = Nothing
End Function
Если ссылочная форма открыта, код достаточно умен, чтобы использовать ссылочные элементы управления в форме. Если нет, он будет использовать даты, предоставленные подпрограмме в качестве параметров. Здесь вы найдете, что параметры не понравились, когда я задал их как типы даты (# xx / xx / xx #), даже если поле было датами. Казалось, что это нормально работает, если я задаю параметры как строки. Это, казалось, не проблема, если вытащить значения прямо из элементов управления на формах.
UTC равно GMT. Но в настоящее время мы находимся в BST из-за лета, который является GMT + 1. GMT Standard Time
автоматически настраивается для перехода на летнее время. Используйте Greenwich Standard Time
, а не GMT Standard Time
, если вы не хотите регулировать переход на летнее время.
EDIT: Все, что вам нужно сделать, это изменить GMT Standard Time
на Greenwich Standard Time
(см. Ниже)
TimeZoneInfo.ConvertTimeFromUtc(DateTime.Now.ToUniversalTime(), TimeZoneInfo.FindSystemTimeZoneById("Greenwich Standard Time"))
DateTime.Now.ToUniversalTime()
уже перенастраивает UTC, вам не нужно снова преобразовывать этот в UTC.
Подсказка: используйте DateTime.UtcNow
, если вам действительно нужен UTC, тогда вам вообще не нужно заботиться о часовых поясах и о том, каким может быть ваш местный часовой пояс.
Обновление: О, и «GMT стандартное время» не означает «среднее время по Гринвичу».