2016-10-11 3 views
0

Я пытаюсь написать отчет MS Access на основе запроса, который я могу запрограммировать для диапазона дат в VBA. В качестве критериев я задал запрос с Between [StartDate] and [EndDate]. Затем у меня есть следующий код на форме:Пытаться передать параметры на запрос MS Access

Private Sub AutoReport1_Click() 
Dim qdf As DAO.QueryDef 
Dim rst As DAO.Recordset 

Set qdf = CurrentDb.QueryDefs("MixByRangeA") 

qdf.Parameters("StartDate").Value = #10/2/2014# 
qdf.Parameters("EndDate").Value = #11/2/2014# 


Set rst = qdf.OpenRecordset() 

End Sub 

Ничего похожего не происходит. Должен ли запрос открываться и отображаться на экране? Я пробовал несколько вариантов кода выше, основываясь на моих интернет-поисках, но ничего не работает.

ответ

1

Ничего не происходит, потому что вы ничего не делаете с qdf и rst после того, как вы их установили. Я не совсем уверен, что вы пытаетесь достичь, но:


1. Если вы хотите, чтобы открыть отчет которого RecordSource является результаты запроса (с параметрами Динамически), попытайтесь поместить следующее в коде модуля отчета:

Private Sub Report_Open(Cancel As Integer) 
    Dim db As DAO.Database: Set db = CurrentDb 
    Dim qdf As DAO.QueryDef 
    Dim sql As String 

    Set qdf = db.QueryDefs("MixByRangeA") 

    sql = qdf.sql 
    sql = Replace(sql, "[StartDate]", "#10/2/2014#") 
    sql = Replace(sql, "[EndDate]", "#11/2/2014#") 
    Me.RecordSource = sql 

    On Error Resume Next 
    qdf.Close: Set qdf = Nothing 
    db.Close: Set db = Nothing 
End Sub 

и в форме, используйте это, чтобы открыть отчет:

Private Sub AutoReport1_Click() 
    DoCmd.OpenReport "Report1", acViewReport 
End Sub 


2. Если вместо этого вы просто хотите оп еп Query (с параметрами Динамически), попробуйте следующее:

Public Sub AutoReport1_Click() 
    Dim db As DAO.Database: Set db = CurrentDb 
    Dim qdf As DAO.QueryDef 
    Dim sql As String 

    Set qdf = db.QueryDefs("MixByRangeA") 

    sql = qdf.sql 
    sql = Replace(sql, "[StartDate]", "#10/2/2014#") 
    sql = Replace(sql, "[EndDate]", "#11/2/2014#") 
    qdf.sql = sql 
    DoCmd.OpenQuery (qdf.Name) 

    On Error Resume Next 
    qdf.Close: Set qdf = Nothing 
    db.Close: Set db = Nothing 
End Sub 
+0

Я пытаюсь написать ежемесячный отчет, в котором заканчивается месяц 20-го. Мои данные охватывают период 4 года. каждый месяц будет на одной странице. Я думал, что у меня есть даты в таблице, прочитайте их в запросе и распечатайте отчет и повторите процесс для четырех дат данных. Спасибо за вашу помощь. – SteveMap

0

Простой метод для удаления параметров из запроса и применить фильтр к отчету:

Dim StartDate As Date 
Dim EndDate As Date 

StartDate = #10/2/2014# 
EndDate = #11/2/2014# 

DoCmd.OpenReport "YourReport", , , "[YourDateField] Between #" & Format(StartDate, "yyyy\/mm\/dd") & "# And #" & Format(EndDate, "yyyy\/mm\/dd") & "#" 
+0

Я думаю это может работать для того, что я пытаюсь сделать, но я получаю ошибку времени выполнения «13», тип Mismatch – SteveMap

+0

Извините, фильтр был искажен. См. исправленный ответ. – Gustav

+0

Спасибо, я действительно получил его работу. то же самое, что вы показываете. Теперь я пытаюсь выяснить, как сделать шоу StartDate и EndDate Value в моем отчете. Например Дата начала = 9/10/2015 и т. д. – SteveMap

0

Я DON» Думаю, это можно сделать так, как вам хочется.

Это кажется позором, потому что вы следовали тому, что можно было бы считать «лучшей практикой», используя хранимую процедуру с параметрами параметров, а не строя динамический SQL.

На самом деле, даже если это хорошая практика, вы виновны в борьбе против естественного потока того, как команда Access хочет, чтобы вы использовали свое программное обеспечение! Похоже, вы вынуждены динамически строить оговорку WHERE, чтобы втиснуться в предоставленный метод :(

 Смежные вопросы

  • Нет связанных вопросов^_^