2016-04-26 66 views
0

我有點失落與這一個。我有一個子窗體,顯示基於我的組合框選擇的記錄。這是這樣完成的(代碼是從組合框After_Update叫):訪問 - 報告顯示子表單結果(加入表)

Sub ShowResults1() 

With Forms![MYForm].RecordsetClone 
     .FindFirst "[ID] = " & Forms![MyForm]![CmbSearch] 

     If Not .NoMatch Then 
     If Forms![MyForm].Dirty Then Forms![MyForm].Dirty = False 
     Forms![MyForm].MySubfom.SourceObject = "MySubform" 
     Forms![MyForm].Bookmark = .Bookmark 

     End If 

End With 

End Sub 

主窗體綁定到一個連接表,這是它的記錄源(它是通過在它的ID連接到2臺)

SELECT JoinTable.*, Table1.IDx AS IDx_Table1, Table1.Field1, Table1.Field2, Table1.Field3, Table2.IDy AS IDy_Table2, Table2.Field1, Table2.Field2, Table2.Field3 
FROM Table2 INNER JOIN (Table1 INNER JOIN JoinTable ON Table1.IDx = JoinTable.IDx) ON Table2.IDy = JoinTable.IDy; 

當執行上層代碼時,我得到了符合條件的子窗體中的結果,所以這工作正常。

現在,我想要的是有一個報告,這將顯示確切地顯示子窗體allready顯示。這太複雜了,還是有任何簡單的解決方案?

編輯:

我創建了一個新的查詢(名爲 「SearchReport」):

SELECT Table2.IDy, Table2.Field1, Table2.Field3 
    FROM Table2 INNER JOIN (Table1 INNER JOIN Join_Table ON Table1.IDx = JoinTable.IDx) ON Table2.IDy = JoinTable.IDy 
    WHERE JoinTable.IDy=3; 

該查詢成功地表明,我想記錄,但只有ID 3.現在我刪除了「WHERE JoinTable.IDy = 3「,以便我可以顯示基於我的組合框的記錄。這就是我試圖打開的報告:

DoCmd.OpenReport "MyReport", acViewReport, "SearchReport", WhereCondition:="JoinTable.IDy =" & Forms![MyForm]![CmbSearch] 

但是當報告打開時,Access不斷詢問輸入IDy的參數值。即使我輸入3,也會顯示該查詢中的所有記錄。哪裏不對 ??

+0

你會使用相同的源報表作爲子表單 –

+0

我做不到該子窗體不在任何可用記錄源下列出。我相信,因爲子窗體的記錄源基於查詢(來自JoinTable和Table1)。請看看我的編輯,我認爲我在正確的道路上。 – LuckyLuke82

+0

try,DoCmd.OpenReport「SearchReport」,acViewPreview ,,「idy =」&Forms![MyForm]![CmbSearch]並移除WHERE JoinTable.IDy = 3;從查詢 – nazark

回答

0

解決。我不得不選擇查詢記錄,我張貼在Edit(對於命令button_click事件全碼 - 對錶格按鈕):

Dim sql As String 

     sql = "SELECT Table2.IDy, Table2.Field1, Table2.Field3" & _ 
" FROM Table2 INNER JOIN (Table1 INNER JOIN Join_Table ON Table1.IDx =" & _     

"JoinTable.IDx) ON Table2.IDy = JoinTable.IDy" & Forms![MyForm]![CmbSearch] DoCmd.OpenReport "APO_IIS", acViewReport 

     Reports![Myreport].RecordSource = sql 
1

兩個表格報告有一個Record Source屬性。

Record Source屬性中,您可以指定一個表格,一個查詢或一個普通的SQL語句,這是您的情況。

在VBA中,如果你的子窗體被打開並顯示正確的信息,你可以說MyReport.RecordSource = MySubForm.RecordSource


但要實現你想要什麼是最正確的方法是這樣的:

在您的報告中的代碼,添加這個公共子:

Public Sub Open_This_Report(strSQL) 
    Me.RecordSource = strSQL 
End Sub 

在你的窗體中添加一個按鈕,與此ClickEvent:

Private Sub myButton_Click() 
    DoCmd.OpenReport "name_of_the_report", acViewNormal 
    Call Report_name_of_the_report.Open_This_Report(me!SubFormName.Form.RecordSource) 
    'or 
    Call Report_name_of_the_report.Open_This_Report("specific SQL query") 
End Sub 
+0

是的,子窗體顯示正確的信息,但你的第一個建議不起作用(MyReport.RecordSource = MySubForm.RecordSource)。我在button_click事件中嘗試過這種方法 - 錯誤「找不到方法或數據成員」。在report_Load事件中工作,但仍顯示該子表單中的所有記錄,而不僅僅是匹配的記錄。現在我將測試你的第二個建議。 – LuckyLuke82

+0

_first建議_是一個廣泛的例子,您顯然已將其適配爲Access將不會像這樣接受它。真正的解決方案應該工作整齊,如果你完全複製我已經解釋 –

+0

第二個建議做同樣的事情,它顯示該子窗體中的所有記錄,而不是顯示在我的窗體上。請看看我的編輯,我認爲這更接近解決我的問題。 – LuckyLuke82