• ベストアンサー

Access2007でフィールドの規定値として、一意の文字列「D-★★★★-☆☆☆☆」(★と☆の部分は半角数字)を設定したい

お世話様です。 まったくもって表題の通りなのですが、 Access2007でフィールドの規定値として、一意の文字列「D-★★★★-☆☆☆☆」(★と☆の部分は半角数字)を設定したいと思っています。 ●「」はナシです(説明のためにつけただけです) ●かならず D-のハンカク2文字が最初につく ●★★★★、および、☆☆☆☆の部分は、[0-9]が4つつづく ●新規レコードを追加しても、必ず値は一意になる (★★★★と☆☆☆☆が一致しても問題ないです。★と☆の間のハイフンは読みやすさのためにそうしたいとおもっただけなので) 一意とはいっても、数字の部分が8けたなので、 00000000~99999999までの1億レコードまでしか作れないことは承知です。 実際、1億もレコードが増えることは想定していません。 これを実現するにはどうすればいいのでしょうか? 自分、MySQLとPostgresはいじったことあるのですが、 Accesssはほんのちょっとでして・・・。 たぶんAccesssとしては初歩の初歩なのでしょうが・・・ ご存じの方、教えていただければ幸いです。 よろしくお願い申し上げます。

質問者が選んだベストアンサー

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.3

#1です。 >RndとNowと4桁の整数に変換する巻数(不明。なお、3桁だとしたら0パ>ディングする)を使えばうまくいくような気がするのでしょうが・・・ Rndで4桁数値とNowで時分の表示なら "D-" & Format(Rnd() * 10000, "0000") & "-" Format(Now(),"hhnn")

daisuke_dm
質問者

お礼

ご回答ありがとうございます。 "D-" & Format(Rnd() * 10000, "0000") & "-" Format(Now(),"hhnn") で、"-" のあとに & がなかったですが、それをいれたらいけました。 ありがとうございます。

その他の回答 (3)

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.4

入力のたびにひとつずつカウントアップするということでいいいのなら 入力済の最大値を求めそれに1を足すというありふれた処理でいいのでは Me.txtID.DefaultValue = "'" & "D-" & Format(Nz(Right(DMax("ID", "[テーブル名]"), 8), 0) + 1,"00000000") & "'"

daisuke_dm
質問者

お礼

ご回答ありがとうございます。 今回は#3さんのやりかたでいってみたいとおもいますが、 今後、#4さんのやりかたを参考にさせていただきます。 ありがとうございました。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

安直な案 テーブルデザインでオートナンバー型のフィールドを作成し 書式に、"D-"0000-0000 とすれば? 内部的には単なる長整数型なので、”D-”は含まれません。 でも・・ 実は、A-、B-、C-・・・・とかも有ったりして。。。

daisuke_dm
質問者

お礼

ご回答ありがとうございます なかなかトリッキーなやりかたで、なるほど、と思いました。 ただ、オートナンバーだとヒューマンエラーが出そうな気がしまして・・・ (できれば(<=自分の技術的に)印刷も可能にしたいので) ヤフオクの商品IDのようなものを想定しているのですが・・・ いい解決案がございましたら、お教えいただければ幸いです。 以上、よろしくお願い申し上げます。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

定型入力欄に「"D-"0000-0000;0;_」とすればいいのでは? http://office.microsoft.com/ja-jp/access/HA100964521041.aspx

daisuke_dm
質問者

お礼

ご回答ありがとうございます、 掲載していただいたURL,大変みやすく参考になります。 ただ、これだと「D-★★★★-☆☆☆☆」の★と☆の部分は自力でなく 自分で入力しないといけないですよね。。。 規定値として入力させたいのですが。。。、 RndとNowと4桁の整数に変換する巻数(不明。なお、3桁だとしたら0パディングする)を使えばうまくいくような気がするのでしょうが・・・ 型不一致とかいろんなエラーがでてk実現できません、 どうすればよろしいでしょうか? 以上、よろしくお願い申し上げます。