
access2003で、シフト表を作成したいと考えております。カレンダーについて作成したことがなく、情報を絞り込めなかったためご質問させていただきます。以下がシフト表のイメージです。
| 1月 | 2月
名前| 1日|2日|3日|4日|5日|・・・・|1日|2日
鈴木| 出|休 |休|出・・・・・・
山田| 休|出 |休|出・・・・・・
といった形のマトリクス型式にしたいと存じます。
月のテーブルで日付ごとにレコードを作製し、サブフォームで埋め込むといった方法も考えたのですが、長期的な運用を考えた際に、実用的でないと思ったためほかのアイデアをお伺いできればと思いました。
ご経験がある方、アイデアをお持ちの方がいらっしゃいましたらお伺いできればと存じます。よろしくお願いいたします
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
X CNNExecute "DELETE * FROM 出勤表 WHERE ID=1;"
O CNNExecute "DELETE * FROM 出勤表 WHERE ID=1 AND 日付=XXXXXXX;"
まあ、SQL文は例示ですので、少々のミスはと思いましたが一応訂正しておきます。
訂正のついでに CNNExecute関数を紹介しておきます。
一応、ADO関係の関数の基本形に忠実に作成したつもりです。
Public Sub ErrMessage(ByVal CnnErrors As ADODB.Error, ByVal strSQL As String)
MsgBox "ADOエラーが発生しましたので処理をキャンセルします。" & Chr$(13) & Chr$(13) & _
"・Err.Description=" & CnnErrors.Description & Chr$(13) & _
"・Err.Number=" & CnnErrors.Number & Chr$(13) & _
"・SQL State=" & CnnErrors.SQLState & Chr$(13) & _
"・SQL Text=" & strSQL, _
vbExclamation, " ADO関数エラーメッセージ"
End Sub
Public Function CnnExecute(ByVal strSQL As String) As Boolean
On Error GoTo Err_CnnExecute
Dim isOK As Boolean
Dim cnn As ADODB.Connection
isOK = True
Set cnn = CurrentProject.Connection
With cnn
.Errors.Clear
.BeginTrans
.Execute strSQL
.CommitTrans
End With
Exit_CnnExecute:
On Error Resume Next
cnn.Close
Set cnn = Nothing
CnnExecute = isOK
Exit Function
Err_CnnExecute:
isOK = False
If cnn.Errors.Count > 0 Then
ErrMessage cnn.Errors(0), strSQL
cnn.RollbackTrans
Else
MsgBox "プログラムエラーが発生しました。システム管理者に報告して下さい。(CnnExecute)", _
vbExclamation, " 関数エラーメッセージ"
End If
Resume Exit_CnnExecute
End Function
No.4
- 回答日時:
同様の勤務シフト の質問に 回答してます。
やって出来ないことは有りませんが相当に苦労しました。
ヒントも転がってると思いますので ご覧下さい。
工事の現場と派遣職人の予定を ガントチャートで 管理してます。
参考URL:http://oshiete1.goo.ne.jp/qa3707410.html
No.3
- 回答日時:
社員名__2008/01/01__2008/01/02__2008/01/03__2008/01/04__2008/01/05__2008/01/06
鈴木____________________0_________________0________________X________________0________________0_________________1
中村____________________X_________________0________________0________________X________________X_________________0
こういうデータ入力フォームを用意した場合、
O->Xへ
X->Oへ
で、テーブルの更新要領は違います。
前者は、DELETE文の発行、後者はINSERT文の発行。
CNNExecute "DELETE * FROM 出勤表 WHERE ID=1;"
CNNExecute "INSERT INTO 出勤表 SET (日付, 社員_ID) VALUES ('2008/01/01', 1);"
ところで、この場合、入力ではエクセル風のグリッドコントロールを利用することになろうかと思います。
確かに、現場からはかようなエクセルまがいの入力仕様を要求する向きがあります。
この場合、
[イミディエイト]
? DBSelect("SELECT 出勤表.日付, 出勤表.社員_ID, 社員.略称 FROM 社員 RIGHT JOIN 出勤表 ON 社員.ID = 出勤表.社員_ID ORDER BY 出勤表.日付, 社員.整列順位;")
2008/01/01;1;鈴木;
2008/01/02;1;鈴木;
2008/01/02;2;中村;
とデータを簡単に取得できることが課題になろうかと思います。
次に、
SetGridValue "XXX", 2, 2, "O"
SetGridValue "XXX", 2, 3, "X"
と、取得したデータに基づいて翻訳表示する関数もないと実にややこしいです。
こういう関数があれば、For ループで回すだけです。
これができりゃ、後は、CNNExecute関数の類を利用してグリッドデータの変更をテーブルに反映するだけです。
まあ、やって出来ないことじゃないでしょうが、所詮は、プログラマのマスターベーションじゃないですか?
No2さんの推奨されるやり方で事足りる訳ですから・・・。
No5のご回答含めありがとうございます。
ただ今開発環境がないため、後ほど試してみたいと存じます。
>所詮は、プログラマのマスターベーションじゃないですか?
おっしゃっていただいている事はご尤もです。現在すでにEXCELベースで複数の管理用ファイルが手元にあるのですが、作成者によって統一されていない、できない点が多々発生したため、一括管理を検討いたしました。私が担当するまで、会社の管理ファイルが統一されていなかったのが原因です。
そのため1つの機能として、今回のご質問をさせていただきました。
ソースもありがとうございました。大変助かります。
まずはお礼まで
No.2
- 回答日時:
>といった形のマトリクス型式にしたいと存じます。
これが条件ならAccessをやめExcelでやりましょう
Accessでやる場合は日付は縦に展開し
インタフェースにはメイン・サブフォームを使います
ご回答ありがとうございます。EXCELで組むのもいいのですが、すべてVBAで組むのであれば、ACCESSの方がいいかと存知ます。
表面的に使用するだけであれば、社員データのテーブルと、カレンダーの様なテーブルを作成、2つを組み合わせたクエリを作成し、横型のカレンダーのような内容はすでに作成済みですが、
定期的にカレンダー作成の作業が必要になってしまうため、長期的に使用したいとも思いません。
DAOかADOで作成可能というお話を伺ったことがあったもので、ご質問いたしました。最初の質問文が言葉足らずで申し訳ございません。
No.1
- 回答日時:
表の体裁(フォーマット)とテーブル設計は無関係かと思います。
稼動日程表:
日付:2008/01/29
曜日:1,2,3,4,5,6.7
稼動:Yes,No
社員:
ID_________:1
社員番号:101
整列順位:1
名前______:鈴木 一郎
略称______:鈴木
出勤表:
日付____:2008/01/29
社員_ID:1
出勤____:Yes, No <------ 不要!
こういうテーブル設計で事足りると思います。
この設計でエクセル風の入力と表示を実現するのはフォームとレポートの課題。
ご回答ありがとうございます。
仰っていただいた内容については存じ上げております。
フォームで、表示させたくご質問させていただきました。
以前DAOやADOを使用することで表示可能というお話をお伺いきましたもので、具体的にどうすればいいかがわからずご質問した次第です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
Accessで1つのフィールドに複数の選択肢を設ける
Access(アクセス)
-
ACCESSで縦に並んだテーブルデータを横に並べることは出来ますか?
Access(アクセス)
-
ACCESSで工程表を作りたい
Word(ワード)
-
4
Access 同じデータをたくさんのレコード(同一列)に一度に入力するには
Access(アクセス)
-
5
Access サブフォームでの選択行の取得
その他(データベース)
-
6
ACCESSで1月1日~12月31日までの日付を入れる方法
その他(データベース)
-
7
アクセスで『0の値以外』を表示する方法
Access(アクセス)
-
8
Accessでレコードの複製
Access(アクセス)
-
9
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
BCPでCSV内の文字列をテーブル...
-
5
VBA 別シートの同じ日付の欄に...
-
6
指定日付を起点にして最新日付...
-
7
アクセス:既定値に土日含まず...
-
8
エクセル-過去6カ月分の合計を...
-
9
【エクセル】指定した日付に一...
-
10
Excel→Accessへの日付データの...
-
11
SQL SEREVER で選択した固定値...
-
12
アクセスで月単位の抽出
-
13
accessの時間更新方法(フォーム)
-
14
Accessの日付時刻型から日付、...
-
15
アクセスのフォームで期間検索...
-
16
【Accessで困っています...
-
17
Access クエリで、レコードの無...
-
18
エクセルで書式設定ではなく、...
-
19
accessのレポートで重複データ...
-
20
アクセス97のVBAで日付項目をヌ...
おすすめ情報
公式facebook
公式twitter