Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1334 / 2272 ツリー ←次へ | 前へ→

【7555】テキストボックスへの表示 青首 06/3/18(土) 22:13 質問[未読]
【7557】Re:テキストボックスへの表示 中西 健 06/3/19(日) 16:23 回答[未読]
【7558】Re:テキストボックスへの表示 青首 06/3/19(日) 19:31 質問[未読]
【7559】Re:テキストボックスへの表示 中西 健 06/3/19(日) 20:18 回答[未読]
【7564】Re:テキストボックスへの表示 青首 06/3/20(月) 20:48 質問[未読]
【7565】Re:テキストボックスへの表示 中西 健 06/3/21(火) 8:01 回答[未読]
【7566】Re:テキストボックスへの表示 青首 06/3/21(火) 20:34 お礼[未読]
【7567】Re:テキストボックスへの表示 小僧 06/3/22(水) 8:59 回答[未読]
【7571】Re:テキストボックスへの表示 青首 06/3/22(水) 20:40 お礼[未読]
【7634】Re:テキストボックスへの表示 小僧 06/4/2(日) 18:53 発言[未読]
【7644】Re:テキストボックスへの表示 青首 06/4/4(火) 20:02 質問[未読]
【7645】Re:テキストボックスへの表示 小僧 06/4/4(火) 22:28 回答[未読]

【7555】テキストボックスへの表示
質問  青首  - 06/3/18(土) 22:13 -

引用なし
パスワード
   現在の状況

テーブル:部署名
  フィールド名 データ型
   部署ID   オートナンバー型
   部署名   テキスト型

テーブル:T_社員
  
  フィールド名 データ型
   社員ID   オートナンバー型
   社員名   テキスト型
   部署ID   数値型

テーブル:T_日報情報

  フィールド名 データ型
  日報ID    オートナンバー型
  社員ID    数値型
  部署ID    数値型
  日付     日付/時刻型
  業務内容   テキスト型
  残業時間   数値型

ワークテーブル:T_Work

  フィールド名 データ型
  社員ID    数値型   (主キー)
  部署ID    数値型
  日付     日付/時刻型
  業務内容   テキスト型
  残業時間   数値型

T_Workをもとに「F_日報情報」フォーム(単票)が作られています。

テキストボックス:社員名
 コントロールソース:=DLookUp("社員名","T_社員","社員ID=" & [社員ID])
テキストボックス:部署名
 コントロールソース:==DLookUp("[部署名]","T_部署","部署ID=" & [部署ID])


このフォームの「読み込み時」「読み込み解除時」に
T_Work のデータを出し入れする様な処理をしてあります。

F_日報情報を開くとT_社員の一番初めに登録された社員名が
表示されます。
その社員の日報を入力してコマンドボタン[次のレコードへ]を
クリックすると、T_社員の2番目に登録された社員名が表示されます。
こんな感じで一人一人社員の画面を表示させて入力していきます。

ここからが質問なのですが、
T_社員をもとにしてフォーム:F_社員(単票テーブル)を作成して、新しく入社した人の名前と部署名を登録していっているのですが、当たり前なのですが新規に入力した方は、F_日報情報でも一番最後に表示されます。


たとえば、

T_部署が
  部署ID   部署名
   1    チューリップ
   2    バラ
   3    菊

となっていると、現在はF_日報情報に部署名:チューリップ→バラ→菊というように各社員が表示されていますが、新規に登録した社員がチューリップに所属していると、この社員だけ同じ部署のメンバーから離れて表示されてしまいます。

できれば部署ごとに順々にF_日報情報に表示させていきたいと思っています。


F_社員
  -------------------
  | 社員名     |
  -------------------

  ------------------- 
  | 部署名    ▽| 
  -------------------

 コンボボックス:部署名
  値集合ソース:SELECT T_部署.部署ID, T_部署.部署名 _
  FROM T_部署 ORDER BY T_部署.部署ID;

説明が下手でわかりづらいかもしれませんが、よろしくお願いいたします。

【7557】Re:テキストボックスへの表示
回答  中西 健  - 06/3/19(日) 16:23 -

引用なし
パスワード
    F_日報情報の次のレコードを押したときの表示順ということであれば、
 F_日報情報のレコードソースがT_Workとなっているともいますがこれを

SELECT * FROM T_Work ORDER BY 部署ID,社員ID

 とすればよいと思います。

【7558】Re:テキストボックスへの表示
質問  青首  - 06/3/19(日) 19:31 -

引用なし
パスワード
   ▼中西 健 さん:

早速の回答ありがとうございます。

中西さんの教えていただいたように

F_日報情報のレコードソースを

SELECT * FROM T_Work ORDER BY 部署ID,社員ID

に変えてみたのですが、特に変化はなく、

F_社員で最後に登録した社員名は、やはり最後に

表示されてしまいます。

【7559】Re:テキストボックスへの表示
回答  中西 健  - 06/3/19(日) 20:18 -

引用なし
パスワード
    F_社員で最後に登録した社員の部署が菊ということはないですか。
 チューリップでも試してください。

【7564】Re:テキストボックスへの表示
質問  青首  - 06/3/20(月) 20:48 -

引用なし
パスワード
   ▼中西 健 さん:
> F_社員で最後に登録した社員の部署が菊ということはないですか。
> チューリップでも試してください。

チューリップでもバラでも試したのですが、やはり最後に登録した
社員名は、F_日報情報でも最後に表示されてしまいます。

F_日報情報のフォームはレコードソース以外特に変えなくても
大丈夫でしょうか。

【7565】Re:テキストボックスへの表示
回答  中西 健  - 06/3/21(火) 8:01 -

引用なし
パスワード
    私にはそのようになる状況が思い浮かびません。
 他の方の回答を待つことになるかと思います。

【7566】Re:テキストボックスへの表示
お礼  青首  - 06/3/21(火) 20:34 -

引用なし
パスワード
   ▼中西 健 さん:

すみません。ありがとうございました。

どうしてもT_社員の社員ID順に並んでしまうみたいです。

自分でももう少し考えてみたいと思います。

【7567】Re:テキストボックスへの表示
回答  小僧  - 06/3/22(水) 8:59 -

引用なし
パスワード
   ▼青首 さん、中西 健 さん:
おはようございます。

>T_社員をもとにしてフォーム:F_社員(単票テーブル)を作成して、
>新しく入社した人の名前と部署名を登録していっているのですが


部署名は F_日報情報 の中で変更する事はありませんよね?
それで宜しければ「T_Work」及び「T_日報情報」に部署IDは持たさないのが一般的です。
(マスタ管理と呼ばれたりします。)

T_日報情報 のレコードソースを下記 SQL に変えてみてください。

SELECT T_Work.*, T_社員.部署ID
FROM T_Work INNER JOIN T_社員 ON T_Work.社員ID = T_社員.社員ID
ORDER BY T_社員.部署ID;


ただし、例えば
3月31日までは 経理部
4月 1日からは 営業部

のような過去の履歴として所属部署の情報が必要な場合は
もう少し変更が必要になってきますね。

【7571】Re:テキストボックスへの表示
お礼  青首  - 06/3/22(水) 20:40 -

引用なし
パスワード
   ▼小僧 さん:

ありがとうございます。やっと思うとおりの順番で
表示させることができました。

>ただし、例えば
> 3月31日までは 経理部
> 4月 1日からは 営業部
>
>のような過去の履歴として所属部署の情報が必要な場合は
>もう少し変更が必要になってきますね。

そうですよね。部署の異動のことも考えておかないといけないですよね。
今後、部署別の残業時間の集計なども行っていこうと考えておりますので、
過去の履歴として所属部署の情報も必要になってくるかと思います。

よろしければ、所属部署の情報を残しておく方法を教えていただければ、
幸いです。

【7634】Re:テキストボックスへの表示
発言  小僧  - 06/4/2(日) 18:53 -

引用なし
パスワード
   ▼青首 さん:
こんばんは。

年度末に仕事が立て込んでしまいまして返信が遅れました。すみません。

>よろしければ、所属部署の情報を残しておく方法を教えていただければ、
>幸いです。


ちょっと手元に MDB がないので実際のSQL文を提示する事ができませんが、

フォームのUnload時のSQLに
T_Work と T_社員を 結合したものを指定する必要が出てきますね。

【7644】Re:テキストボックスへの表示
質問  青首  - 06/4/4(火) 20:02 -

引用なし
パスワード
   ▼小僧 さん:

>年度末に仕事が立て込んでしまいまして返信が遅れました。すみません。

いえ、覚えていてもらえてうれしいです。

>フォームのUnload時のSQLに
>T_Work と T_社員を 結合したものを指定する必要が出てきますね。

今、読み込み解除時イベントには下記のようなコードが
書いてあるのですが、「T_Work と T_社員を 結合したものを指定する」
というのはどのような形になるのでしょうか。

Private Sub Form_Unload(Cancel As Integer)
Dim strSQL As String
 
   strSQL = "INSERT INTO T_日報情報 ( 日付, 社員ID )" _
      & "SELECT 日付, 社員ID " _
      & "FROM T_Work;"

  DoCmd.SetWarnings False
    DoCmd.RunSQL strSQL
  DoCmd.SetWarnings True

 
  strSQL = "UPDATE T_日報情報 INNER JOIN T_Work " _
      & "ON (T_日報情報.社員ID = T_Work.社員ID) AND " _
      & "(T_日報情報.日付 = T_Work.日付) " _
      & "SET T_日報情報.早出 = T_Work.早出, " _
      & "T_日報情報.残業 = T_Work.残業, " _
      & "T_日報情報.残業区分ID = T_Work.残業区分ID, " _
      & "T_日報情報.注文先ID = T_Work.注文先ID, " _
      & "T_日報情報.メニューNo = T_Work.メニューNo;"
  DoCmd.RunSQL strSQL

  strSQL = "DELETE FROM T_Work"
  DoCmd.RunSQL strSQL
End Sub

【7645】Re:テキストボックスへの表示
回答  小僧  - 06/4/4(火) 22:28 -

引用なし
パスワード
   ▼青首 さん:
こんばんは。

青首さんへの回答の為に作った MDB を紛失してしまい、
慌てて作った MDB ですので、何か抜けている所があるかもしれませんが、

Private Sub Form_Unload(Cancel As Integer)
Dim strSQL As String
 
  strSQL = "INSERT INTO T_日報情報 ( 日付, 社員ID, 部署ID ) " _
      & "SELECT T_Work.日付, T_Work.社員ID, T_社員.部署ID " _
      & "FROM T_Work " _
      & "INNER JOIN T_社員 ON T_Work.社員ID = T_社員.社員ID;"

  DoCmd.SetWarnings False
    DoCmd.RunSQL strSQL
  DoCmd.SetWarnings True

 
  strSQL = "UPDATE T_日報情報 INNER JOIN T_Work " _

…以下は一緒です


の様に、INSERT文のSQLを変更されてみて下さい。

テーブルについては、T_日報情報の方にだけ
部署ID フィールドを作成して下さい。

1334 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078229
(SS)C-BOARD v3.8 is Free