0

テーブルのレコードをデータシートとしてフォームに表示する必要がある Access データベースに取り組んでいます。フィルタリングを実行するコードを正しく記述したと思いますが、レコードを表示する方法がわかりません。

クエリとその結果に基づくフォームを使用してこれを簡単に実行できることはわかっていますが、可能な限りこのプロセスを制限して、データベース全体のサイズを縮小したいと考えています。フィルターは、会社と会計年度の日付を並べ替えます。

どんな助けでも大歓迎です。

ここに私がこれまでに持っているコードがあります...

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

一致したレコードをカウントしてからメッセージボックスに表示するようにしているので、フィルタリングが機能することはわかっていますが、一致したレコードを表示できるようにしたいと考えています。どうすればこれを行うことができますか?

4

2 に答える 2

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

特定の例OpenRecordsetでは、日付基準を含む SQL ステートメントに基づいています。テーブルの場合と同様に、これが更新可能かどうかはテストしていません。(更新はできないような気がします。)

これを行うことは可能ですが、推奨されるアプローチであるとは言いません。RecordSourceプロパティを使用してレコードをフィルタリングする方がはるかに簡単です。

サブフォームの を使用しないことを強調したいと思いRecordsetます。を使用しRecordSourceます。これを SQL ステートメントに設定したり、レコードをフィルター処理したりできます。プロパティの使用にRecordsetは問題があります (そして不要です)。

于 2013-07-25T23:15:18.683 に答える