ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.3921120 法則にのっとった入力設定を行いたいのですが
質問者:nikomasa とあるデータベースです

 ●●コード  ☆☆番号   年度   金額内容
 003     2005263    2000   \100,000
 002     3016533    2001    \4,000
 004     1023256    2002   \600,000
 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

以下続くわけですが、ごらん頂きたいのは☆☆番号の左から2〜3桁目の数値を年度の下ニケタと一致させていくデータベースの法則の存在があります。

そこで間違って入力されないように1.7桁の数字であること、2.上記の法則を満たしていることを条件に入力できるようにするためにはどのような設定を行えば宜しいでしょうか? 

VBAとかまったく判らないので、トグルボタン「・・・」で出来るのであればと思います。(トグルボタンっていう名称で合ってましたか?)

どなたか教えていただけますでしょうか?


誤字脱字があれば前もってお詫びいたします。
困り度:
  • 困っています
質問投稿日時:
08/04/04 11:43
この質問に対する回答は締め切られました。

回答良回答20pt

ANo.2 ANo. 1 です。

以下の条件で話を進めます。
====
・フォーム "Form1" を作成し、Form1 のレコードソースにはご質問で出された
 テーブルを関連付ける。
・以下の名前の 4 つのテキスト フィールドを作成する。
 1. code - コントロールソースは「●●コード」
 2. number - コントロールソースは「☆☆番号」
 3. year - コントロールソースは「年度」
 4. money - コントロールソースは「金額内容」
====

以下のようなコードを作成します。
テキスト フィールド "number" に値を入力して、カーソル(フォーカス)を
マウスや Tab キーなどで他に移したときにテキスト フィールド "year" に
値がセットされるようにします。

[手順]
1. テキスト フィールド "number" のプロパティを開き、「イベント」の
 「フォーカス喪失時」をクリック、その行の右端に「・・・」というボタンが表示
 されるのでそれをクリックし、「コード ビルダ」を選択する。
2. VBA のエディタが起動するのでそこに以下のコードを貼り付ける。
==== ここから ====
Option Compare Database

Private Sub number_Exit(Cancel As Integer)
 Dim num As Long '☆☆番号
 Dim tmpYear As Integer '年度
 Dim grade As Integer '学年
 
 'テキスト フィールド "number" から「☆☆番号」の値を取得
 num = Me.number.Value
 
 'tmpYear に num の上位 2〜3 桁目を取り出す
 tmpYear = (num / 10000) Mod 100 'Mod は「割り算した余り」のこと
 
 'tmpYear が 50 以上なら 1900 年代、50 未満であれば 2000 年代とする
 '!!!!このやりかたは改善すべき!!!!
 If tmpYear > 49 Then
  tmpYear = tmpYear + 1900
 Else
  tmpYear = tmpYear + 2000
 End If
 
 'テキスト フィールド "year" に tmpYear の値をセット
 Me.year.Value = tmpYear
 
 'grade に num の上位 1 桁目を取り出す
 grade = num / 1000000 'ここでは使い道が無い
End Sub
==== ここまで ====
以上です。

コードにはコメントを書いておいたので参考にしてください。
テキスト フィールド "number" の上位 2〜3 桁目が 50 以上であれば 1900 年代、
50 未満であれば 2000 年代にするようにしています。
しかし、これは問題のあるやり方です。2000年問題を覚えていますよね?
テーブル定義で年度を表す桁数を 4 桁以上に改めるべきでしょう。
回答者:irija_bari
種類:回答
どんな人:経験者
自信:参考意見
回答日時:
08/04/07 14:25
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

ANo.1 補足要求です。

・まず、VBA を使うということなのでデータベースは ACCESS なのですよね?
・「入力」というのは単票フォームを使って入力ということなのですか?

以下、参考です。
・「7桁の数字である」という条件はテーブルの定義(テーブルの「デザイン
ビュー」)で「☆☆番号」の入力規則を「>999999 And <10000000」とすれば
良いのでは?
・「年度」は2000に「☆☆番号」の上から2〜3桁目を加えたものなのです
よね?それならば、フォームで「☆☆番号」を入力した時点で自動的に
「年度」の値をセットするようにすれば良いのでは?
回答者:irija_bari
種類:補足要求
どんな人:一般人
自信:参考意見
回答日時:
08/04/05 12:54
この回答への補足データベースはACCESSになります。

単票フォームの入力でございます。


7桁の数字の入力規則は非常に参考になりました。
早速設定いたします。

年度については☆☆番号を入力する際に必ず20〜、30〜と
最初に二桁は固定されます。それに伴い年度も自動入力されるようにしたいのです。
学校のデータベースを作っており、200と入力した段階で2年生で00年(西暦2000年)という風に表示したいのです。
301なら3年生で年度は01年(年度表示は2001)といった具合に。
399なら3年生で年度は99年(年度表示は1999)といった具合に。

上記のように設定したいのですが。。。


質問がいたらなくてご迷惑おかけしました。
この回答へのお礼この回答にお礼をつける(質問者のみ)