電子書籍の厳選無料作品が豊富!

ACCESS2007

どなたかよろしくお願いします。
工事台帳をACCESSにて作成しようとしております。
工事管理の為、一つ工事に工事CDを作成します。
得意先CD+401~499までの数字の組み合わせです。

例)AX工務店 得意先CD=AX AX401、AX402...AX499
  BX建設   得意先CD=BX BX401、BX402...BX499

上記のように、得意先CDごとに401~499の工事CDを持たせたいのです。
入力フォームにて得意先CD入力後、工事CDが取得できるように

Private Sub 得意先CD_AfterUpdate()
Me![工事CD] = Me![得意先CD] & Format(DCount("工事CD", "T工事台帳") + 1, "400")
End Sub

と記述しましたが、得意先CDにかかわらず番号のみが+1され続けるため、
望む形ではありません。
どのようにしたらよいでしょうか?

また、現在3つの事業部があり一つの現場に最大3つの工事CDができることもあります。
その場合、"D"または"S"をつけます(事業部の頭文字です)
AX401、DAX402、SAX403など、同一の現場であっても数字部分は重複させません。
その場合、2段階で採番(まどろっこしいですが)させようかと思ってますが、
良い方法がありますでしょうか?

なにとぞよろしくお願いします。

A 回答 (3件)

得意先CD は、2文字と仮定します。



以下でどうなりますか。(見難かったらすみません)

Me![工事CD] = Me![得意先CD] _
      & Format( _
        Nz( _
          DMax("Val(Right(工事CD,3))" _
            , "T工事台帳" _
            , "工事CD Like '*" & Right(Me![得意先CD], 2) & "*'") _
        , 400) + 1 _
      , "000")

やっている事は、
DMax で、Me![得意先CD] の右側2文字の 工事CD を「T工事台帳」で探して・・・
あったら 工事CD の右側3文字を数値にした最大を求めておきます。
対象のものが無かったら初期値の 400 にするように Nz を使っておきます。
その値を +1 して、3桁表示に Format を使い、元々の Me![得意先CD] に付ける。

Me![得意先CD] が、AX、DAX、SAX なら、 '*AX*' で探します。
右側3文字を数値にした最大を求めるので、AX、DAX、SAX の区別はありません。

Me![得意先CD] は2文字以上等、チェックが必要になると思います。
また、上記では 499 を超える判別はしていないので・・・


以下は雰囲気で
事業部の「D」「S」を、別途「txt事業部」に設けたとすると

Me![工事CD] = Me![txt事業部] & Me![得意先CD] _
      & Format( _
        Nz( _
          DMax("Val(Right(工事CD,3))" _
            , "T工事台帳" _
            , "工事CD Like '*" & Me![得意先CD] & "*'") _
        , 400) + 1 _
      , "000")

これであれば、得意先CD は2文字・・・という制限はなくなるかと
    • good
    • 0
この回答へのお礼

お礼が大変遅くなってしまい申し訳ございませんでした。
数週間の悪戦苦闘から、解放されました。
ご丁寧な解説も非常にわかりやすかったです。
本当にありがとうございました。

お礼日時:2012/10/29 08:23

原始的ですが



得意先テーブルに最終工事No.(規定値=400)のフィールドを
定義してこれを管理するのはどうでしょう

Private Sub 得意先ID_Exit(Cancel As Integer)
If 工事No. = 0 Then
工事No. = 最終工事No. + 1
最終工事No. = 工事No.
End If
End Sub

工事テーブルの工事No.の規定値は0にしています

※ DCount だとレコードを削除された場合重複の工事No.が設定されます。
    • good
    • 0
この回答へのお礼

お礼が大変遅くなってしまい申し訳ございませんでした。
このような考え方もあったんですね。
参考になりました。
ありがとうございました。

お礼日時:2012/10/29 08:53

DCountの使い方が間違っています。



DCount("工事CD", "T工事台帳")
これだと、工事CDが入っているレコードの件数を返すだけです。

特定の得意先のレコードの件数を返したいなら、3番目の引数(条件式)を指定います。

例えば、得意先CDがAXの件数なら、
DCount("工事CD", "T工事台帳", "得意先CD = ""AX""")

入力フォームの[得意先CD]を使う場合は、
DCount("工事CD", "T工事台帳", "得意先CD = """ & Me![得意先CD] + """")
とします。



>また、現在3つの事業部があり一つの現場に最大3つの工事CDができることもあります。
>その場合、"D"または"S"をつけます(事業部の頭文字です)
>AX401、DAX402、SAX403など、同一の現場であっても数字部分は重複させません。

3つの事業部はどのようなテーブル構成になっているのでしょうか?
もし、1つのテーブルに全部登録されていて、同じ得意先CDを使っているのなら、上記の方法で問題なさそうですが。
    • good
    • 0
この回答へのお礼

お礼が大変遅くなりまして申し訳ございませんでした。
ご指摘・ご解説大変参考になりました。
ありがとうございました。

お礼日時:2012/10/29 08:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!