1

Access 2003のフォーム内のコマンドボタンをクリックすると、msgboxポップアップが表示
されます。データベース内のテーブル内で参照されている日付と比較した場合、msgboxは現在の日付でトリガーされます。次のようになります。

If Date() is < [Date in table?], THEN "Msgbox" = "It is now Quarter 2"

第3四半期の日付を超えると、メッセージボックスに「今は第3四半期です」と表示されます。

あなたが助けることができればありがとう

4

2 に答える 2

1

Access には、テーブルに格納されている 1 つの情報を検索するためのドメイン関数と呼ばれる一連の関数があります。最も一般的なものには、DCount()、DLookup()、DSum()、DAvg()、DMax()、および DMin() があります。

これには DLookup 関数を使用する必要があります。基本的に、値を検索するにはフィールド名とテーブル名が必要です。また、多くの場合、条件ステートメント (または WHERE 句) を 3 番目の引数として含めて、DLookup 関数が実際に正しい行から値を取得していることを確認します。条件ステートメントを渡さない場合、ドメイン関数は単純に最初の一致を返します。

If Date() <= DLookup("SomeDateField", "tblYourTableName") Then
    MsgBox "The date in stored in the table is today or else is in the future."
Else
    MsgBox "The date stored in the table is in the past."
End If

これを書く別の方法を次に示します。

If Date() < DLookup("SomeDateField", "tblYourTableName") Then
    MsgBox "The date in stored in the table is in the future."
Else
    MsgBox "The date stored in the table is today or is in the past."
End If

テーブルに複数のレコード/行がある場合は、次のようにします。次に、必要な行から必要な値を取得するように絞り込むために、何らかの条件ステートメントが必要です。

If Date() < DLookup("SomeDateField", "tblYourTableName", "UserID = 1") Then
    MsgBox "The date in stored in the table is in the future."
Else
    MsgBox "The date stored in the table is today or is in the past."
End If

実際にあなたが求めていることではありませんが、この関数 (および他のドメイン関数) で舞台裏で実際に何が起こっているのかを理解することが重要だと思います。基本的に、SQL の WHERE 句と呼ばれる基準ステートメントを使用して値を取得するレコード/行を指定するオプションを使用して、1 つのテーブルから 1 つの値を取得することを選択します。それでは、このような関数を作成する方法と、Microsoft がおそらくどのように DLookup 関数を作成したかを見てみましょう。

Public Function MyLookup(ByVal strField As String, _
                         ByVal strTable As String, _
                         Optional ByVal strCriteria As String) As Variant
    'Error handling intentionally omitted
    'Proper error handling is very critical in
    'production code in a function such as this 
    If strField <> "" And strTable <> "" Then
        Dim sSQL as string
        sSQL = "SELECT TOP 1 " & strField & " FROM " & strTable
        If strCriteria <> "" Then
            sSQL = sSQL & " WHERE " & strCriteria
        End If
        Dim rst As DAO.Recordset
        Set rst = CurrentDb.OpenRecordset(sSQL, dbOpenSnapshot)
        If Not (rst.EOF and rst.BOF) Then
            MyLookup = rst(strField).Value
        End If
        rst.Close
        Set rst = Nothing
    End If
End Function

次に、連絡先テーブルで誰かの生年月日を見つけたいとしましょう。

Dim dteBirthDate as Date
dteBirthDate = MyLookup("BirthDate", "tblContacts", "ContactID = " & 12345)

DLookup 関数を持っていない場合 (または独自に作成していない場合) は、上記の「MyLookup」関数にすべてのコードを記述して、テーブル。

于 2012-05-25T18:34:14.803 に答える
0

あなたが探しているのは次のようなものだと思います:

'Dates to be retrieved from the db (quarter start dates)
Dim q1 As Date
Dim q2 As Date
Dim q3 As Date
Dim q4 As Date
'Today's date
Dim today As Date
Dim quarter As Integer

Set today = Date()
Set q1 = DLookup("FieldContainingDate", "tableContainingDates", "quarter=1")
Set q2 = DLookup("FieldContainingDate", "tableContainingDates", "quarter=2")
Set q3 = DLookup("FieldContainingDate", "tableContainingDates", "quarter=3")
Set q4 = DLookup("FieldContainingDate", "tableContainingDates", "quarter=4")

Set quarter = 1 'Base case.
If (today > q1) Then quarter = 2
If (today > q2) Then quarter = 3
If (today > q3) Then quarter = 4

MsgBox "It is quarter " & quarter 'Display which quarter it is in a msgbox

データベースへの保存方法などに応じて、日付のフォーマットをいじる必要がある場合があります。別の方法で記述する方がはるかに効率的です(たとえば、中間のq#変数を削除するなど)が、私はそれを書きましたより明確にするために長い方法で。

于 2012-05-25T19:42:03.817 に答える