2013-07-25 52 views
0

我正在使用Access數據庫,我需要以表格的形式將數據表中的記錄顯示爲數據表。我相信我已經正確編寫了代碼來執行過濾,但不知道如何顯示記錄。在使用VBA的Microsoft Access 2010表單中過濾結果

我知道我可以使用查詢來更簡單地執行此操作,然後使用基於這些結果的表單,但希望儘可能限制此過程,以減少數據庫的整體大小。過濾器將排序公司和財務日期。

任何幫助表示讚賞。

下面是代碼我迄今...

Option Compare Database 

Sub Form_Current() 
    Dim oTable As DAO.Recordset 
    Dim oDataNeedsGas 
    Dim dNextFiscal, dThisFiscal 
    Dim iGas 


'Fiscal Year turnover date, use DateValue(dNextFiscal) comparison. 
    dNextFiscal = "10/1/" & Year(Date) 
    dThisFiscal = "10/1/" & Year(Date) - 1 

    'For Annual training by year comparison. 
    'Year(DateValue(oTable!randomdate)) >= Year(Date) 

Set oTable = Application.CurrentDb.OpenRecordset("tbl_main", dbOpenDynaset)  
    iGas = 0 

Do Until oTable.EOF = True 
    If (Year(DateValue(oTable![GasDate])) >= Year(Date) And oTable![Platoon] = "Data") Then 
     `What do I do here?!!? 
     iGas = iGas + 1 
    End If 
msgbox iGas 

oTable.MoveNext 

Loop 

End Sub 

我知道過濾工作,因爲我把它算匹配的記錄,然後在消息框中顯示,但我希望能夠顯示匹配的記錄。我如何去做這件事?

回答

0

您可以將子窗體的Recordset屬性設置爲oTable。使記錄集成爲主窗體的一個屬性,如以下代碼所示,以便在窗體關閉時釋放此引用。

Option Compare Database 
Private oTable As Object 

Private Sub Command2_Click() 

    Set oTable = Application.CurrentDb.OpenRecordset("tbl_main", dbOpenDynaset) 
    Set Me.sbfName.Form.Recordset = oTable 
End Sub 

Private Sub Form_Close() 
    If Not oTable Is Nothing Then 
     Set oTable = Nothing 
    End If 
End Sub 

對於您的具體示例,您將基於包含日期標準的SQL語句OpenRecordset。我還沒有測試過它是否可以更新,因爲它是用於表格的。 (我得到的印象是它不會被更新。)

是可能的要做到這一點,但我並不是說這是一個推薦的方法。使用RecordSource屬性過濾它的記錄要容易得多。

我想強調的是,我不會使用子窗體的Recordset。使用RecordSource。您可以將其設置爲SQL語句和/或篩選記錄。使用Recordset屬性是有問題的(也是不必要的)。

1

製作的記錄源上的數據表與空白的,然後有這樣的代碼運行時加載窗體:

Option Compare Database 

Private Sub Form_Load() 
    Dim sSQL as String 
    sSQL = "SELECT * FROM tbl_Main " 
    sSQL = sSQL & "WHERE Year(DateValue(GasDate)) >= Year(Date) " 
    sSQL = sSQL & " AND Platoon = 'Data'" 
    Me.RecordSource = sSQL 
    MsgBox "RecordCount: " & Me.RecordCount 
End Sub 

我一般使用窗體的記錄和表單過濾器和FilterOn屬性。您始終可以加載顯示所有記錄的表單,然後過濾到您想要查看的內容。

我不明白你的問題中的這一行: 「...但希望儘可能限制這個過程,以減少數據庫的整體大小。」

你想提高性能嗎?你是否擔心存儲太多數據和表格變得太大?你的問題的這一部分只是不清楚。

+0

謝謝,我會試試這個。在過去,我已經建立了一個分隔信息的查詢,然後創建了一個表單來顯示查詢中的內容。不幸的是,他們希望我可以通過更多的東西來實現這一點。我們的網絡驅動器在空間上嚴格限制;所以我試圖減小數據庫的大小以防止它佔用共享驅動器。 – Nathan