2014-11-03 2 views
0

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

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 
+0

Где вы хотите поставить диапазон? Собираетесь ли вы конвертировать 'fill_sold_dt (DATE)> = CURRENT_DATE - 7' в' BETWEEN'? Если это так, у вас может быть два входа: один для начала и один для даты окончания. –

ответ

0

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

Edit - Добавление полной Exemple

Создайте 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 

Здесь вы идете

+0

Прохладный, я пытаюсь это сделать. можете ли вы объяснить, что я делаю с приведенным ниже ... Является ли это, когда я задам параметр диапазона дат? Любая идея, как я могу это написать? Msgstr "Установить свойство SQL и объединить переменные. MyQry.SQL =" sp_server_info "& MyParam" – SQUISH

+0

Я отредактировал свой первоначальный ответ –

+0

Отлично! И предположим, что я хотел добавить дополнительные параметры, например, для Wic_nbr, я бы просто добавил условие (и wic_nbr «& WIC &») для ссылки на текстовое поле WIC в моей форме? – SQUISH