Access実践入門  RSSを登録する

マイクロソフトアクセスの入門を、実践的に学習するためのメールマガジンです。誰でも入力できる綺麗なプログラムが作成できるようになります。

最新号をメルマガでお届けします    
登録 解除

規約に同意して

登録した方には、まぐまぐの公式メルマガ(無料)をお届けします。
2009/02/18

Access 実践入門 第77号

-------------------------------------------
  Access 実践入門 第77号 (2009.2.18)
-------------------------------------------

 こんにちは、Access実践入門の佐藤です。

2月というのに、先週は、暖かかったですね〜
もう春が来たかと思ったら、また寒くなりました。
皆様、体調管理にお気を付けください。

春は、近いですよっ



 【1】費用入力1
 【2】費用入力2
 【3】次回予告
 【4】編集後記

---------------------------------------------------------------------



【1】費用入力1
---------------------------------------------------------------------
今回のバージョンでは、費用の一覧表入力を追加しています。

費用を単票フォームで、1レコード入力して登録するのは
とても面倒です。
まとめて、入力したいという要望は、必ず出ます。


費用一覧入力の手順は、次のようになります。

1.作業データを入れる作業テーブル作成
2.作業テーブルを削除するクエリ
3.一覧データを入力するフォーム
4.作業データを本データに追加するクエリ

以上のオブジェクトを作成して処理します。

直接「ta帳簿」のテーブルに入力すると、処理が面倒です。
作業テーブルのデータを編集させて、入力が完成した時点で、
「ta帳簿」に追加します。

入力している途中で、全部キャンセルする場合でも、
作業データを入力するフォームを閉じるだけで、できます



1の作業テーブルは、
  「to帳簿作業」です。
  このテーブルの内容は「ta帳簿」と同じです。
  コピーして作ります。

2の削除クエリは
  「quto帳簿作業削除」です。
  全レコードを削除するクエリです。
  毎回、この処理を最初に実行します。

3の入力フォームは、
  「fo費用一覧入力」です。
  帳票入力のフォームです。
  この帳票入力フォームのレコードソースとして
  「qu費用一覧入力」を作ります

4の追加クエリは、
  「qu費用一覧入力追加」です。



【2】費用入力2
---------------------------------------------------------------------
それでは、作成手順です。

「to帳簿作業」は
「ta帳簿」をコピー、貼り付けで作ればすぐできます。


「quto帳簿作業削除」は
いつも使う、全レコード削除の削除クエリです。
抽出条件無しの、削除クエリを作ります。


「fo費用一覧入力」のデザインを見てください。

まず、レコードソース「qu費用一覧入力」を作ります。
これは、「ta科目費用」と「to帳簿作業」をつないだものです



フォームは、入力順に各項目を並べています。
科目は、コンボボックスにしています。

順番に項目を見ていきます


●日付

「フォーカス喪失時」に次のように書いています。


If IsNull([処理日]) Then
  Exit Sub
End If
 
  If Len([処理日]) <> 11 Then
     MsgBox "年は4桁、月は2桁、日は2桁の入力です。", , ""
     DoCmd.CancelEvent
     Exit Sub
  End If

  If IsDate([処理日]) = 0 Then
     MsgBox "この日付の入力は間違っています。", , ""
     DoCmd.CancelEvent
     Exit Sub
  End If
  
  If DateValue([処理日]) <= DLookup("[締切日付]", "ta基本情報",
 "[通し番号]=1") Then
       MsgBox "締切日より以前の日付で入力できません。"
       DoCmd.CancelEvent
       DoCmd.GoToControl "処理日"
       Exit Sub
  End If
  
  
  [処理日付] = DateValue([処理日])


空白の時は、通過させます。
これは、入力を終わって日付入力にカーソルがある時に、
登録ボタンをクリックする場合、空白の時に通過できないと、
ボタンをクリックできません。

何か入力された時のみ、チェックするためです。

日付が入力された場合、日付が正しいかどうか、
締め切り更新日より以前でないか
チェックしています。


●費用科目、費用科目名

科目番号をコンボボックスで、選択します。
費用科目名は、レコードソースに入れてあるので、自動表示です。
費用科目名を、使用可能を「いいえ」、編集ロックを「はい」にします。


●費用額

数値入力です。
特になにもしません。


●摘要

漢字入力です。
特になにもしません。


●削除ボタン

入力行を削除させます。
このボタンは、入力で止まる必要がないので、
タブストップを「いいえ」です

「フォーカス取得時」に次のように書いています。

SendKeys "{ESC}", True

ESCキーを送っています。
これは、入力途中の場合、
たとえば、日付だけ入力していて、その行の削除ボタンがクリックされた場合、
この処理無しで、「qu費用一覧削除」を実行するとエラーがでます。


「クリック時」に次のように書いています。
DoCmd.OpenQuery "qu費用一覧削除"
DoCmd.Requery

この削除クエリは、登録済みの「to帳簿作業」の削除ボタンが
クリックされた行のID番号を抽出条件にした削除クエリです。



フォーム全体の「更新前処理」に次のように書いています。

  If IsNull([処理日]) Then
       MsgBox "日付を入力して下さい。"
       DoCmd.CancelEvent
       DoCmd.GoToControl "処理日"
       Exit Sub
  End If
  
  [処理日付] = DateValue([処理日])
  
  
  
  If IsNull([費用科目番号]) Then
     MsgBox ("費用科目を入力して下さい ")
     DoCmd.CancelEvent
     DoCmd.GoToControl "費用科目番号"
     Exit Sub
  End If

  
  If IsNull([費用額]) Or [費用額] = 0 Then
     MsgBox ("費用額を入力して下さい ")
       DoCmd.CancelEvent
     DoCmd.GoToControl "費用額"
     Exit Sub
  End If

  [収入科目番号] = "99"

ここで、必須入力項目のチェックをしています。
不十分であれば、イベントをキャンセルして、その項目に戻します。

チェックしてOKであれば、
隠している、「処理日付」と「収入科目番号に」値を代入します。




キャンセルボタンの「クリック時」に次のように書いています。

SendKeys "{ESC}", True
DoCmd.Close

ESCキーを送っています。
これは、入力途中の行があった場合、フォームを閉じる時にエラーが出るのを
防ぐためです。

キャンセルは、何もしないで、フォームを閉じれば、
作業フォームですから、本データの「ta帳簿」には何も影響ありません


最後に「登録ボタン」での処理です。

「フォーカス取得時」に次のように書いています。

If IsNull([処理日]) And IsNull([費用科目番号]) And (IsNull([費用額]) 
Or [費用額] = 0) And IsNull([摘要]) Then
Else
  
  If IsNull([処理日]) Then
       DoCmd.CancelEvent
       DoCmd.GoToControl "処理日"
       Exit Sub
  End If
  
  [処理日付] = DateValue([処理日])
  
  
  
  If IsNull([費用科目番号]) Then
     DoCmd.CancelEvent
     DoCmd.GoToControl "費用科目番号"
     Exit Sub
  End If

  
  If IsNull([費用額]) Or [費用額] = 0 Then
       DoCmd.CancelEvent
     DoCmd.GoToControl "費用額"
     Exit Sub
  End If

  [収入科目番号] = "99"


これは、今カーソルがある行の、すべての項目が空白だったら
何もしません。

そうでない場合は、項目のチェックをしています。


更新前処理にしているから、必要ない?
そうではありません。

登録ボタンがクリックされた時のイベント発生の順番は

登録ボタン「フォーカス取得」
登録ボタン「クリック」

登録ボタン「クリック時」には次のように書いています。

DoCmd.OpenQuery "qu費用一覧入力追加"
DoCmd.Close
DoCmd.Requery

データが途中入力の場合には、
この中の、DoCmd.Close の前に更新前処理が動きます。
更新前処理に書いてある、データ不十分の時のキャンセルイベントは
この段階では機能しません。

そこで、項目のチェックを
登録ボタンの「フォーカス取得時」に書いています。

ややこしいですが、いろんな入力テストをしていると解ります。
その都度、追加、修正していけばいいと思います。

いろいろ試してみてください。

無事登録ボタンの「クリック時」にたどりつけば、
追加クエリで、データを「ta帳簿」に追加後。
フォームを閉じて、
リクエリーで、最新データが最初のフォームに反映することになります。



【3】次回予告
---------------------------------------------------------------------

 次回は、費用別明細印刷 です。



【4】編集後記
---------------------------------------------------------------------
前回、解らない事は、検索エンジンを上手に使って調べましょう
と言いましたが、

「Access ○○ ○○」

で検索するといいです。

どんな細かい事でも、見つかります。

便利な世の中になりました。



しかし最近は、学生がレポートを書くのにネットで調べて
コピーすることが、問題になっていますね〜
レポートの提出も、ワードで、メール添付となると
簡単に出来てしまいます。


そういう私も、子供に漢字を聞かれても解らない・・・
読めても書けない・・・
全部パソコンが書いてくれるから・・・



---------------------------------------------------------------------
みなさんは、アフィリエイトってご存じでしょうか?

ブログやサイトから、広告収入等を得る手法ですが、
佐藤も、以前から少しずつやってるのです。
なかなか、面白いんですよ


興味のある方は、こちらをご覧下さい。

アフィリエイトの勧め : http://www.msactry.com/aff/






=====================================================================
【Access実践入門】

ホームページ : http://www.msactry.com/
メルマガ用サンプルプログラム
       : http://www.msactry.com/mag2/201/index.htm
参考書「Access実践入門」のダウンロード(PDFファイル)
       : http://www.msactry.com/down00/downrepo.htm

=====================================================================
【オフィス関連の教材紹介】

http://www.msactry.com/kyex/index.htm

=====================================================================
【発行システム】『まぐまぐ!』 http://www.mag2.com/ 

 配信中止はこちらから http://www.mag2.com/m/0000229312.html 
===================================================================== 
最新号をメルマガでお届け
登録 解除

規約に同意して

登録した方には、まぐまぐの公式メルマガ(無料)をお届けします。

最近の記事

上へ戻る