- ベストアンサー
ACCESS質問:ちょっとややこしいですm(__)m
ACCESSで業務用のシステムを構築中です。 今日の売り上げ成績を出す、というものなんですが、 ログインフォーム上のコンボボックスから ・食品部 ・衣料部 ・その他 を選択し、あらかじめ指定されたパスワードでログインします。 ここまでは出来たのですが、ここからが問題でわからないです。ログイン後に、F_業務成績表を表示するのですが、このとき、ログインした後には必ず、今日の日付のF_業務成績を表示したいのです。つまり、テーブルに今日の日付のデータがなければ、ログイン時に今日の日付データを作り、日付のみ入力されたF_業務成績表を出す、ということがしたいのです。逆に今日の日付データがあれば、そのデータをテーブルから引張ってきて表示したいです。 このとき、主キーは"日付"と"部名"になっています。 指定した部名で、かつ、データがなければ作って表示し、あれば、ひっぱってくる、というソースはどのように書けばいいのでしょうか? btn_ログイン(ログインボタン)のプロパティで、イベントプロシージャ(クリック時)でソースを書こうとしています。 参考になるソースか、似たようなことをしているものを参照できるようなホームページがあれば教えていただきたいです。 お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>テーブルに今日の日付のデータがなければ、ログイン時に今日の日付データを作り、日付のみ入力されたF_業務成績表を出す、ということがしたいのです。逆に今日の日付データがあれば、そのデータをテーブルから引張ってきて表示したいです。 例えば Private Sub btn_ログイン_Click() On Error GoTo Err_btn_ログイン_Click Dim stDocName As String Dim stLinkCriteria As String Dim MyCnt As Integer MyCnt = DCount("*", "テーブル名", "部名='" & Forms![ログインフォーム]![部名] & "' And 日付 = #" & Forms![ログインフォーム]![日付] & "#") If MyCnt >0 Then stDocName = "F_業務成績" stLinkCriteria = "" stLinkCriteria = "部名='" & Forms![ログインフォーム]![部名]" stLinkCriteria = stLinkCriteria & " And 日付 = #" & Forms![ログインフォーム]![日付] & "#" DoCmd.OpenForm stDocName, , , stLinkCriteria Forms![F_業務成績].FilterOn = True Else stDocName = "F_業務成績" DoCmd.OpenForm stDocName, acNormal, "", "", acAdd, acNormal End If Exit_btn_ログイン_Click: Exit Sub Err_btn_ログイン_Click: MsgBox Err.Description Resume Exit_btn_ログイン_Click End Sub これでログインフォームの日付と部名のコントロールの値を使ってテーブルに存在するかカウントさせ存在すれば(0よりカウントが大きければ)F_業務成績を開く時にstLinkCriteriaに抽出条件をセットして開き存在しなければ(カウントが0であれば)F_業務成績を追加モードで開く。 F_業務成績の日付のコントロールに日付の代入はログインフォームから開く時には出来ないのでF_業務成績で処理させます。 F_業務成績の開く時のイベントで Private Sub Form_Open(Cancel As Integer) Dim strEmployeeName As Variant strEmployeeName = Forms!F_業務成績.OpenArgs If IsNull(strEmployeeName) Then Me!日付 = Date DoCmd.GoToControl "日付" End If End Sub OpenArgsに値があればそれに従い開きOpenArgsがNullなら日付コントロールに今日の日付を代入して開く。 こんな感じで良いのではないでしょうか。 テーブル名・フォーム名・コントロール名(取りあえずログインフォーム上の部名・日付はテキストボックスとして書きましたので)等は作ったオブジェクトに合わせてください。 ざっとですが参考になれば良いのですが。
その他の回答 (1)
- CHRONOS_0
- ベストアンサー率54% (457/838)
>指定した部名で、かつ、データがなければ作って表示し、あれば、ひっぱってくる このように考えず 日付とログイン情報で抽出したものを表示させ 日付の規定値にDate()、部名の規定値はログイン情報からVBAで動的にセット でいいのでは ログイン情報の「その他」はきちんと部名を入力するようにしたほうが便利そうですね