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

質問

QNo.3929646 ACCESSで困ってます 再度同じ質問
質問者:nikomasa  ●●コード  ☆☆番号   年度   金額内容
 003     2005263    2000   \100,000
 002     3016533    2001    \4,000
 004     1023256    2002   \600,000
 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
以下続くわけですが、☆☆番号の左から2〜3桁目の数値を年度の下ニケタと一致させていくデータベースの法則の存在があります。

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

「☆☆番号」の入力規則を「>999999 And <10000000」としても、×。
「式が正しく入力されていないか、複雑すぎるために評価できません。たとえば、数式に複雑な要素が多すぎます。変数に式の一部を割り当て、式を簡単にしてください。」とエラーメッセージが出ます。
困り度:
  • すぐに回答を!
質問投稿日時:
08/04/07 15:30
この質問に対する回答は締め切られました。

回答良回答20pt

ANo.3 > をLOOKUPとかで設定できるのですが、アクセスの場合は
> 【年度:(☆☆番号=・・・・・・・】みたいに設定できるのでしょうか?

う〜ん、やっぱり・・・Excelの感覚なのね
Accessの場合
・Excelの直接入力のデータ = テーブル
・Excelの入力値からの演算 = クエリ
・画面上の表示・入力 = フォーム
・印刷用の表示 = レポート
と、Excelの場合1つのシートで行う作業を分割してると考えてください
基本的な話、Accessの場合、Excel等のアプリケーションより、Visual Basic等の開発ソフトに近い存在です
Microsoft Officeの中では、一般的に敷居が高いと言われるのは、そういう話からです

で、回答の方ですが、Excelでも、Lookupを使用するより、Rightを使うと思うのですが・・・空白(Null値)がある場合も前提にして、クエリの演算を考えれば・・・

☆☆番号 : Left(Nz([セグメント]," "),1) & Right(" " & Nz([年度]," "),2) & Format(Nz([通し番号]," "),"0000")

こんな感じ、すべて数値(長整数)、Access2002で動作確認してます
で、クエリであれば、型の自動的な変更は、行ってますので、多分大丈夫だと・・・選択クエリで、[セグメント][年度][通し番号]を含むテーブルを選択し、フィールドに上記「☆☆番号 : 〜」をコピー&ペーストで、稼動すると思いますが・・・
回答者:Dxak
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:
08/04/09 09:12
この回答へのお礼度々のご回答誠にありがとうございます。

早速トライさせて頂きます。

特に空白が存在することはかなり可能性が高いだけにそのような予測も踏まえてのご回答には頭が下がります。
☆☆番号フィールドをこしらえてやってみます!
初心者で無知な自分がLeftとRightとFormatを三つくっつける(エクセルでいうCONCATENATEみたいに・・・・チト違うかもしれませんが。)イメージは出来ていても思い浮かびませんでした。

有難うございました。

回答

ANo.2 #1です
単純に考えて・・・

> ※2=セグメント
> ※00=年度の下二桁
> (この二桁をもとに年度フィールドに展開していきたい)
> ※5263=通し番号

これを、行うには・・・かなり難しいと思います
理由は、「入力する順序」
> ☆☆番号
より先に、「セグメント」「年度の下二桁」「通し番号」が入力されている前提でなくてはなりません
私なら、「☆☆番号」を入力するようにするのではなく「セグメント」「年度の下二桁」「通し番号」から、クエリーにて生成されるフィールドとして検討します
重複して、データを保管すると言うのは、データベースの基本として避けるべき話ですから、こういう話をするのですけどね
回答者:Dxak
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:
08/04/08 12:49
この回答への補足コメントありがとうございます。


そうですね、入力のたびに反映されるというのは確かに基本として間違った考え方でしたね。失礼致しました。

それでは重ね重ね恐縮ですが、
せめて7桁を入力した際にクエリには、おそらくフィールドの何かしら抽出条件を入れるのですね?

【2桁目、3桁目が”00”ならば年度フィールドには2000と表示】するような設定ってたとえばエクセルならば簡単なコードを作って

コード   西暦
#00####  2000
#01####  2001
#02####  2002

をLOOKUPとかで設定できるのですが、アクセスの場合は
【年度:(☆☆番号=・・・・・・・】みたいに設定できるのでしょうか? 
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

ANo.1 > 「☆☆番号」の入力規則を「>999999 And <10000000」としても、×。

すみません
予測の段階ですが・・・
「☆☆番号」は、数字(文字)
「>999999 And <10000000」は、数値(Long型)
と、そもそも型が一致してないと言う落とし穴では?

型の明示を願います
回答者:Dxak
種類:補足要求
どんな人:一般人
自信:参考意見
回答日時:
08/04/07 15:38
この回答への補足ご連絡ありがとうございます。

ちなみに入力規則ですが、Dxakさんの御回答を頂戴する前に治りました。数式の問題(長さとか定義)では無かったみたいです。お騒がせしました。

新たな質問ですが・・・・・。

☆☆番号

2005263
※2=セグメント
※00=年度の下二桁(この二桁をもとに年度フィールドに展開していきたい)
※5263=通し番号

とまずは御判断してください。

入力フォームなり、データシートで入力する際に、2桁目と3桁目を入力し7桁数値を確定した段階で年度が御覧のように西暦表示されるという設定を構築したいのですが、下記のアドバイスいただけますでしょうか?
その時2桁目、3桁目が各々「8」「8」ならば年度には「1988」と表示されることを目指しています。そのような組み方をご教授できる方、ぜひお待ちいたしております。
欲を言えば「2088」とカスタマイズし直す方法も合わせて教えていただけると大変助かります。
この回答へのお礼この回答にお礼をつける(質問者のみ)