0

確認された有効期限の 0、7、30、60、および 90 日前に契約の有効期限を思い出させるために、さまざまな投獄で次のクエリを設定しました。通知日を計算する私の方法では、柔軟性がありません。たとえば、オフィスが開いていない土曜日の 12/5 に期限が切れる 30 の契約があるとします。契約がその日に切れたという通知を見逃してしまい、7 日が過ぎてしまいます。

SELECT qryAllSold.SoldID, qryAllSold.CompanyName, qryAllSold.Product, qryAllSold.Description, qryAllSold.Quantity, qryAllSold.Price, qryAllSold.ConfirmedExpires, qryAllSold.Note
FROM qryAllSold
WHERE (((qryAllSold.ConfirmedExpires)=DateAdd("d",0,Int(Now()))) AND ((qryAllSold.RenewedToID) Is Null) AND ((qryAllSold.NonOpportunity)=No));

これらの各クエリは、毎日のタスク リストとして機能する 1 つの「ダッシュボード」フォームに表示されます。フォームで日付を表し、矢印をクリックして 1 日ずつ前後に移動できれば素晴らしいのですが、Access にその機能があるかどうかはわかりません。

それがうまくいかない場合、これらの有効期限に関する通知を見逃さないようにするには、他にどのような方法がありますか?

4

2 に答える 2

2

[編集] あなたがプログラマーでない場合、ここに別の解決策があります

クエリでFormat関数を使用しないのはなぜですか。

Format([ConfirmedExpires],"ww",2,1)

"ww" - 週を指定します。2 は月曜日を週の最初の日として指定します。1 は週 1 に 1 月が含まれることを意味します。

これで、日付の計算を数週間で簡単に実行できるようになりました。たとえば、契約が 4 週間以上先に期限切れになります。

Format([ConfirmedExpires],"ww",2,1)-Format(Now(),"ww",2,1))>4

契約の有効期限が 4 週間以上先から 5 週間以内の場合

Format([ConfirmedExpires],"ww",2,1)-Format(Now(),"ww",2,1))>4 -
Format([ConfirmedExpires],"ww",2,1)-Format(Now(),"ww",2,1)),=5

それは役に立ちますか?


DateAddのような関数の平日機能を使用してみませんか?

30 暦日先を計算する代わりに、25 日またはその他の平日を先に計算できます。

以下のコードはメッセージ ボックスを表示しますが、メッセージ ボックスの背後にある SQL クエリでも同じように関数を使用できます。

Sub TestWeekDay()
    Dim FirstDate As Date    ' Declare variables.
    Dim IntervalType As String
    Dim Number As Integer
    Dim Msg

    IntervalType = "ww"    ' "ww" specifies weeks as interval.
    FirstDate = InputBox("Enter a date")
    Number = InputBox("Enter number of weekdays to add")
    Msg = "New date: " & DateAdd(IntervalType, Number, FirstDate)
    MsgBox Msg
End Sub
于 2009-10-27T13:42:50.233 に答える
1

おそらく少し複雑です:

IIf(Weekday(DateAdd("d", 0, Date())) = 7, DateAdd("d", 0, Date()) + 2, IIf(Weekday(DateAdd("d", 0, Date())) = 1, DateAdd("d", 0, Date()) + 1, DateAdd("d", 0, Date())))

これは、次のように where ステートメントに入れることができます。

SELECT q.SoldID, q.CompanyName, q.Product, 
       q.Description, q.Quantity, q.Price, 
       q.ConfirmedExpires, q.Note
FROM qryAllSold AS q
WHERE q.ConfirmedExpires=IIf(Weekday(DateAdd("d", 0, Date())) = 7, DateAdd("d", 0, Date()) + 2, IIf(Weekday(DateAdd("d", 0, Date())) = 1, DateAdd("d", 0, Date()) + 1, DateAdd("d", 0, Date())))
AND q.RenewedToID Is Null AND q.NonOpportunity=No

クエリを読みやすくするために、qryAllSold にエイリアス q を使用したことに注意してください。 FROM qryAllSold AS q

No の代わりに False を使用することをお勧めします。

必要に応じて、パラメーターを使用できるはずです。

PARAMETERS NoDays Short;
SELECT q.SoldID, q.CompanyName, q.Product, 
       q.Description, q.Quantity, q.Price, 
       q.ConfirmedExpires, q.Note
FROM qryAllSold AS q
WHERE q.ConfirmedExpires=IIf(Weekday(DateAdd("d",[NoDays],Date()))=7,DateAdd("d",[NoDays],Date())+2,IIf(Weekday(DateAdd("d",[NoDays],Date()))=1,DateAdd("d",[NoDays],Date())+1,DateAdd("d",[NoDays],Date())))
AND q.RenewedToID Is Null AND q.NonOpportunity=No

パラメータを使用すると、日数を選択できます。これがフォーム上のフィールドを参照するか、VBA で設定されているとさらに良いでしょう。

于 2009-10-27T14:08:19.250 に答える