Могу ли я ввести '?' в диапазоне дат в сквозном запросе, чтобы я мог ввести диапазон дат в форме в Access?

В доступе есть способ создания сквозного запроса, который не сохраняет жестко закодированную дату? Например, у меня есть форма, связанная с проходом через запрос, и я хочу иметь возможность вводить в диапазон дат через форму и обновлять этот запрос. Вот мой текущий запрос, но я предпочитаю, что это диапазон дат с '?' или что-то, что позволило бы запросить диапазон дат или мне вставить диапазон дат через форму. Это можно сделать? Или я должен использовать VBA?

select distinct fill_sold_dt ,pf.str_nbr,wic_nbr, pkg_sz, pkg_qty, sum(fill_qty_dspn), sum((fill_qty_dspn)/(pkg_sz*pkg_qty) ) as Packs 
 from
prdedwvwh.prescription_fill_sold pf, prdedwvwh.location_store_address_cur lsa, prdedwvwh.drug_cur d
where pf.str_nbr=lsa.str_nbr and
d.drug_id=pf.drug_id
and fill_sold_dt(DATE) >= CURRENT_DATE - 7
 and wic_nbr in (683378,335776,418723)

group by 1,2,3,4,5
1 ответ

Вы должны использовать VBA. Если вы не знаете, как это сделать в VBA, вы можете проверить пример 2 на этой странице: http://support.microsoft.com/kb/131534

Изменить - добавление полного примера

Создайте 2 текстовых поля даты типа в своей форме и назовите их DateStart и DateEnd

Создайте кнопку с событием щелчка следующим образом:

Private Sub Command0_Click()

 GetDataFromDate DateStart.value, DateENd.value

End Sub

И добавьте этот Sub в вашу форму:

Sub GetDataFromDate(dtStart As Date, dtEnd As Date)

 Dim MyDb As Database, MyQry As QueryDef, MyRS As Recordset
 Set MyDb = CurrentDb()
 Set MyQry = MyDb.CreateQueryDef("")

 ' Type a connect string using the appropriate values for your
 ' server.
 MyQry.Connect = "ODBC;DSN=user1;UID=user1;PWD=user1;DATABASE=TEST"

 ' Set the SQL query with Date Range passed to the sub as parameters
 MyQry.SQL = " SELECT distinct fill_sold_dt ,pf.str_nbr,wic_nbr, pkg_sz, pkg_qty, sum(fill_qty_dspn) as som, sum((fill_qty_dspn)/(pkg_sz*pkg_qty) ) as Packs " & _
 " FROM prdedwvwh.prescription_fill_sold pf, prdedwvwh.location_store_address_cur lsa, prdedwvwh.drug_cur d " & _
 " WHERE pf.str_nbr=lsa.str_nbr and d.drug_id = pf.drug_id and wic_nbr in (683378,335776,418723)" & _
 " AND fill_sold_dt BETWEEN #" & dtStart & "# AND #" & dtEnd & "# " & _
 " GROUP BY 1,2,3,4,5 "

 MyQry.ReturnsRecords = True
 Set MyRS = MyQry.OpenRecordset()

 MyRS.MoveFirst

 If Not MyRS.BOF Then

 While Not MyRS.EOF

 Debug.Print MyRS!fill_sold_dt
 Debug.Print MyRS!str_nbr
 Debug.Print MyRS!pkg_sz
 Debug.Print MyRS!som
 Debug.Print MyRS!Packs

 MyRS.MoveNext
 Wend


 End If

 MyQry.Close
 MyRS.Close
 MyDb.Close

End Sub

Ну вот

licensed under cc by-sa 3.0 with attribution.