Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 11 Pro : Access 2019)
同年月日のグループ化
投稿日時: 22/06/15 15:33:49
投稿者: ぽっぺん

よろしくお願いします。
スケジュール管理を作成しています。
 テーブルは一つでフィールドは年月日(日付/時刻型)、時刻、場所などです。
 テーブルをもとにクエリを作成しこのクエリをもとに入力フォームを作成、時刻テキストボックス(時刻S 定型入力)に重複した時刻が入力された場合メッセージボックスを表示、訂正、スルーを選択するようにしましたが、 同年月日のみををグループ化することができませんでした。
   
                       2022/06/09 15:00
                       2022/06/10 10:00   2022/06/15 11:00 東京
  2022/06/15入力 ⇒ 2022/06/15 11:00 ⇒ 2022/06/15 11:00 京都
                       2022/06/15 11:00 2022/06/15 15:00 大阪
                       2022/06/15 15:00
 
     年月日が入力されたら、同年月日を抽出帳票フォーム一覧表示
   ができればと思っています。
  どなたかご教授よろしくお願いします。
           
 
                  

投稿日時: 22/06/15 15:47:31
投稿者: ぽっぺん

    文字ずれすみませんでした。

回答
投稿日時: 22/06/15 16:14:58
投稿者: sk

引用:
テーブルをもとにクエリを作成しこのクエリをもとに入力フォームを作成

具体的にどのようなクエリを作成されたのでしょうか。
 
引用:
時刻テキストボックス(時刻S 定型入力)に重複した時刻が
入力された場合メッセージボックスを表示、訂正、スルーを
選択するようにしましたが、 同年月日のみををグループ化
することができませんでした。

具体的にどのようなコードを記述されているのでしょうか。

投稿日時: 22/06/16 17:52:51
投稿者: ぽっぺん

   skさんありがとうございます。
 申し訳ありませんでした。
 クエリでは帳票フォームを作成しても、年月日、時刻、場所を一覧表示できないことに気が付きました。
 初心者です。
 
 スケジュール管理T1(テーブル)年月日(日付/時刻型)、時刻、場所など(フィールド)
 このテーブルをもとにした入力帳票ホームを作成、時刻テキストフォーカス喪失後イベントに
   Private Sub 時刻テキスト_LostFocus()
   Dim ret As Long
 
   If DCount("時刻", "スケジュール管理T1", "時刻テキスト") > 0 Then
 
    ret = MsgBox("重複あり登録しますか?はい。", vbYesNo)
   
    If ret = vbYes Then
 
    Else
    DoCmd.RunCommand acCmdDeleteRecord
 
  End If
 
 Else
 
 End If
 End Sub
 帳票フォームを視認しながら入力し、重複メッセージを表示させることができたのですが、数が多い
ため年月日をグループ化し視認できれば便利になると思いましたができませんでした。
 
 最初の入力フォームは年月日入力のためのテキストのみ(カレンダーから入力)、ボタン押し年月日グループ化した帳票ホーム表示したいです。
 まだ入力無い年月日の場合新規入力画面となります。
 長文失礼しました。
 あらためてご教授お願いします。
 

投稿日時: 22/06/16 21:27:59
投稿者: ぽっぺん

初心者の浅知恵でした。
このコードでは、常にメッセージボックスが表示されてしまいます。
これ以上はどうしてよいのかわからずさまよっています。
すみませんでした。

投稿日時: 22/06/17 08:33:42
投稿者: ぽっぺん

 最初の入力フォームは年月日入力のためのテキストのみ(カレンダーから入力)、ボタン押し年月日グループ化した帳票ホーム表示したいです。
 まだ入力無い年月日の場合新規入力画面となります。
上記に関しましては、マクロホームフィルターで解決しました。
 
DCount("時刻", "スケジュール管理T1", "時刻テキスト") > 0 ここが上手く働かないようです。

回答
投稿日時: 22/06/17 09:41:29
投稿者: hatena
投稿者のウェブサイトに移動

ぽっぺん さんの引用:

DCount("時刻", "スケジュール管理T1", "時刻テキスト") > 0 ここが上手く働かないようです。

 
「時刻テキスト」とは、時刻を入力するテキストボックスですよね。
その値と時刻フィールドの値が一致する件数を求めたいということなので、
 
DCount("時刻", "スケジュール管理T1", "時刻=#" & Me.時刻テキスト.Value & "#") > 0

回答
投稿日時: 22/06/17 11:16:28
投稿者: sk

引用:
スケジュール管理を作成しています。

・ここでの管理対象となるのは、1人の人物のスケジュールなのか、
 それとも複数の人物のスケジュールなのか。
 
引用:
スケジュール管理T1(テーブル)年月日(日付/時刻型)、時刻、場所など(フィールド)

・後者である場合、[スケジュール管理T1]において
 個人を識別するための外部キーに当たるのは
 どのフィールドなのか。
 
・[スケジュール管理T1]の主キーはどのフィールドなのか。
 
・上記のフィールドのデータ型はそれぞれ何であるか。
 
とりあえず、以上の点について明記されることをお奨めします。
 
引用:
テーブルをもとにクエリを作成しこのクエリをもとに入力フォームを作成、
時刻テキストボックス(時刻S 定型入力)に重複した時刻が入力された場合
メッセージボックスを表示、訂正、スルーを選択するようにしましたが、
同年月日のみををグループ化することができませんでした。

・ある 1 人の人物についてのスケジュールを管理するに当たり、
 その人物の予定タスクが、同じ日付、同じ時間帯に重複して組まれない
 ようにする(ダブルブッキングを防ぐ)必要がある
 
・もし帳票フォームのカレントレコードの[年月日]と[時刻]
 (および個人を識別するためのフィールド)に入力された値が
 既存の他のレコードと重複する場合は、警告メッセージを
 表示させる。
 
・但し、ここではあくまで警告メッセージを表示するに留め、
 重複する予定タスクをそのまま保存するか否かは
 ユーザーの判断に委ねるものとする。
 
要するにこういうことを目指している、ということでしょうか。
 
引用:
最初の入力フォームは年月日入力のためのテキストのみ(カレンダーから入力)、
ボタン押し年月日グループ化した帳票ホーム表示したいです。

それは「予定タスクの重複防止」とは別の話、そもそもの
フォームレイアウトについての問題でしょう。

投稿日時: 22/06/19 15:16:11
投稿者: ぽっぺん

  skさん
  hatenaさんへ
  
 skさん真摯にお付き合いいただきありがとうございました。
 hatenaさん参考にさせていただきました。
 
 DCount("時刻", "スケジュール管理T1", "時刻 Like '*" & 時刻テキスト &"*'") > 0
  
  希望通りの結果になりました。
 
 改めてありがとうございます。
 解決済みにしたいと思います。