• ベストアンサー

自動採番のプログラム(?)

初心者ですが、会社のHPを作成しています。 よくショッピングモールなどで買い物をした際に、個人に割り当てられるコードがありますよね?伝票番号、管理番号呼ばれるコードです。 そのコードは、どのように設定するのでしょうか?「CGIを使用する」「アクセスカウンタと同じ原理」だと聞いたことがあるのですが、その「アクセスカウンタの原理」が良く分かりません。 CGIに詳しい方がいらっしゃいましたら、ご教示お願い致します。

  • CGI
  • 回答数4
  • ありがとう数3

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

  • ベストアンサー
  • togino
  • ベストアンサー率75% (97/129)
回答No.2

ANo1 さんのおっしゃる通りなんですが、 このアクセスカウンタの時、必ず出てくる話を しておきます。 コード、それが伝票番号・管理番号なんであっても ・ 現在使っている番号を調べる ・ そこから、まだ使っていない番号を作る ・ 新しい番号を、現在使っている番号に加える という3つ作業を行います。 ANo1 の anmochiさんの例では ・ 実行時にそこから取ってきて ・ 1足して表示して ・ ファイルに書き戻す の3つ作業のことです。 しかし、仮にAさんとBさんの2人分のコードを 割り当てる場合ですね、 ・ Aさん「現在使っている番号を調べる」 ・ Aさん「そこから、まだ使っていない番号を作る」 ・ Aさん「新しい番号を、現在使っている番号に加える」 ・ Bさん「現在使っている番号を調べる」 ・ Bさん「そこから、まだ使っていない番号を作る」 ・ Bさん「新しい番号を、現在使っている番号に加える」 なら問題ないのですが、この2人がほぼ同時刻に やってきて、並列に処理が進んだとします。 ・ Aさん「現在使っている番号を調べる」 ・ Bさん「現在使っている番号を調べる」 ・ Aさん「そこから、まだ使っていない番号を作る」 ・ Bさん「そこから、まだ使っていない番号を作る」 ・ Aさん「新しい番号を、現在使っている番号に加える」 ・ Bさん「新しい番号を、現在使っている番号に加える」 すると、AさんとBさんには同じコードが割り当てられて しまう問題が発生します。 これではいけないので、Aさんのコード割り当て作業中は だれにも邪魔させないようにする機構を『ロック機構』と いいまして、コードを割り当てる作業には、必ずといって いいほど、このロックの話が出てきます。 排他処理とも言いますが、アクセスカウンターの CGI には 中のソースを見ると、大抵この処理が含まれていると 思います。 ファイルにコードを記録する場合は、ファイルのロック 機構を利用し、データベースに記録する場合は、 データベースのトランザクションを利用しますが、 データベースの場合、オートナンバーという機能を 利用すると便利かもしれません。 > そのコードは、どのように設定するのでしょうか ・ 1つずつコードの番号を増やしていく ・ 日時などをもとに一意になる番号を生成する ・ かぶらないようにランダムな番号を割り当てる いろいろ方法が存在しますね。 2つ目の例だと、コードを見れば登録日時が わかってしまうのですが、これがいいのか悪いのかは その目的に依存します。 1つ目の例だと、例えば、「会員番号が1番」って いうのは、「あっ僕はこのシステムの最初の会員なんだ」 ってバレるかもしれません。あるいは、会員番号 000001 ってなんか寂しくありませんか?(笑) という訳で、どのように設定するかは、好き好きです。 こうしなくてはならないなんてものはありませんよ。

その他の回答 (3)

  • naoto0314
  • ベストアンサー率34% (25/73)
回答No.4

アクセスカウンタの原理は、現在の値を取得して1を足してまた保存するというものです。 伝票番号なんかは、連番になっていると他人を偽ることがあるかもしれないので、ランダムに番号を取得したほうがいいのかもしれません(もちろん、すでに取得されていないかのチェックも行ないます)。

peanuts4317
質問者

お礼

皆様、ご返答頂きありがとうございます。 アクセスカウンタについては、フリーソフトから無事設置することができました。ありがとうございます。しかし、番号の採番については、今だよく分かりません・・・。皆さんの御意見を読んで自分なりに解釈したところによると、まずデータベースを作成することから始まるようですので、フリーのデータベース等を探してみたいと思います。

noname#25358
noname#25358
回答No.3

 いきなり管理番号だけ作成してもどうしようもないのでは……(^_^;  管理番号というのは、バックボーンに「管理システム」があるからこそ必然的に必要になるものです。  よって、番号だけ作成してそれっぽく画面に表示させても、何の意味もないわけです。  なんで、管理番号の如何も分からないのであれば、既存のデータベースCGIなどを拾ってきた方が早いんじゃないでしょうか?

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

CGIうんぬんよりも、ファイルなりデータベースなりに「現在何番まで使っているか」を保存しておき、実行時にそこから取ってきて1足して表示してファイルに書き戻す処理を考えればよいのではないかな。 アクセスカウンタならperl(←CGIでよく使われる)なりphpなり何なりでその辺に転がっているので探すと良かろう。

関連するQ&A

  • 自動採番について

    初心者です。 Access2000で銀行管理DBを作っています。 (1)テーブルを入金用と出金用それぞれに作成 (2)データ入力用フォームもそれぞれに作成します。 入力にあたって入力番号を自動採番にしたいと考えてますが、番号の構成は数値10桁で、"年" + "月" + "連番"の組み合わせにしたいのです。例:2003070001 入金用と出金用それぞれ別に入力番号をつけます。 これを実現するために「採番テーブル」を別に作成しなければいけないようですが、 (1)採番テーブルの定義の方法 (2)入力フォームで自動採番するためのVBA記述の方法 についてアドバイスいただけないでしょうか? よろしくお願いします。

  • cgiの設置について

    CGIを設置したいと考えているのですがいまいち分からない点があるので教えていただけますでしょうか? ショッピングモールを運営しているのですが例えばトップページにカウンターをつけたいときにはトップページにcgiを設置してA店にも設置、B店にも設置・・・。という様に1つのモールの各店舗ごとにcgiを設置していかないといけないのでしょうか?同様に掲示板や買い物かごのシステムもこの様になるのでしょうか?それともトップページに設置したら稼動するのでしょうか? まだcgiは勉強中で質問もうまく的を得ていないかもしれませんが、よろしくお願い申し上げまs。

    • ベストアンサー
    • CGI
  • アクセスで新規にレコードを追加する際自動的に番号を付けたい。

    アクセス2000で売上の管理をしています。 「管理番号」を使って伝票の処理をしているのですが、 フォームに新規に伝票を入力するとき、自動的に番号を付けたいんです。 できたら、フォーム上に「伝票新規」のボタンを作って、そのボタンを押したら テキストボックスに番号を表示させるようにしたいのですが、 どうしたらよいのかわからないんです! どなたか教えていただけませんか? よろしくお願いします。

  • 買い物かご

    最近CGIの勉強をはじめまして・・。 カウンターや掲示板などが、CGIで出来ることを知ったのですが、 買い物かごとかって、ショッピングサイトにありますよね。 それは、CGIで作るものではないのですか? どういうもので、作るのでしょうか? ぜひ、教えてください。

  • Accessで自動採番の方法がわかりません。

    今月より弊社工場で、私が生産管理システムの構築を担当することになりました。 Accessでの構築です。また、Accessは初心者です。 質問は、受注登録時に受注登録フォーム(F_受注登録)で管理番号を自動採番したいのですが、やり方がわかりません。また、管理番号の自動採番実現のためにテーブルの手直し等ありましたらご教授願います。 管理番号の構成 MSSF-10001-1 MSSF→自社番号です。T_自社にMSSFとMSSTを登録しています。 10001→顧客番号と部署番号を結合しています。上3ケタが顧客番号、下2ケタが部署番号です。また、部署番号は顧客の部署になります。 1→枝番号です。1から順にカウントしていきます。例)MSSF-10001-1、MSSF-10001-2、MSSF-10002-1、MSSF-20001-1、MSST-30001-1 質問部分のフローと現在の進捗状況を記載します。 フロー F_受注登録を開く→受注内容を入力→受注内容登録時、管理番号を自動採番し、登録を完了する 現在作成済のテーブル、フォーム T_顧客、T_自社、T_ 受注一覧、T_部署、F_顧客登録、F_受注登録、F_受注一覧 T_顧客→顧客番号、顧客名 T_自社→自社番号、自社名 T_受注一覧→管理番号、顧客名、部署名、担当者、状態、工番、No、品番(図番)、品名、数量、納期、確定納期、出荷日、送り状番号、加工先、材料、材質、備考 T_部署→部署番号、部署名 F_顧客登録→T_顧客へ登録ができます。 F_受注登録→T_受注一覧へ登録ができます。 F_受注一覧→T_受注一覧の閲覧ができます。 ご不明な点等ありましたら、ご連絡ください。 よろしくお願いします。

  • HPのカウンターが自動更新されません

    自分のHPに設置したカウンター、今までそのHPをあければカウンターが進んでいたような気がしましたが、ここ数日、HPにアクセス後最初に手動更新すると一気にカウンターが増えます。ということは進んでいないような感じなのです。 カウンターはレンタルのものと、cgi設置のものと並列させていますがどちらも進んでいないのです。 cgiの方は、きのうきょうの訪問者数も入れていますが、これも更新すると一気に変更されます。 最近windowsのTEMP位置と、仮想メモリのドライブを変更しましたがそのタイミングかどうかは不明ですが、またもとに戻しました。 ということはIEの設定になにか問題が? DSはXPSP1,IEは6.0の自作マシンです。 アドバイスをいただければと思います。

  • 見えないアクセスカウンターの設置の仕方

    初心者ですがHPを作りました。 訪問者の数を知りたいのですが、外部から見えない管理用のアクセスカウンターがほしいのですがどうしたらよいでしょうか?

    • 締切済み
    • CSS
  • GIFをつかったアクセスカウンター

    gooでホームページを開設しています。 できましたら、GIFを使ったアクセスカウンターを使いたいのですが、 そのためにはCGIが使えないとダメだというところまでわかりました。 gooではCGIが使えないのですよね。 そこで無料のアクセスカウンターを探しています。 無料で自作のCGIが使えるアクセスカウンターのある場所を 教えてください。 できれば、初心者でもわかりやすい物をご紹介いただけると 助かります。 よろしくお願いします

  • クエリーから入力フォームの作成

    access2000を使って簡単な注文用のフォームを作っています。VBAは初心しゃです。 テーブルとしては、納品伝票(伝票番号、顧客コード)、顧客管理(顧客コード)を作り( )ないのものでリレーション組んでます。 クエリーでリレーションを組み、それを元にフォームを作りました。 希望としては(1)伝票番号の重複がないようにする。 (2)顧客コードから住所を表示させる、顧客コードが登録されていないときにはメッセージを出し、正しい顧客コード(顧客コードのみ)を入力させる。 (1)はクエリーでテキストのデータを条件にし、フォームのVBAで Private Sub 伝票番号_AfterUpdate() If DCount("伝票番号", "Q_納品伝票") >= 1 Then MsgBox "すでに登録されています" Me.Undo DoCmd.GoToControl "顧客名" DoCmd.GoToControl "伝票番号" End If End Sub で上手くできましたが、同じクエリーで(2)も(1)と同様なVBAを組んだところ(顧客デーブルの顧客コードに重複があるときをチェックさせる)、(1)の重複をチェックしなくなってしましまいました。 うまく説明できたが心配ですが、根本的に何か違っていますでしょうか?

  • Access 文字+年ごとの自動採番

    Accessは全くの初心者です。 プログラマーさんのサイトや質問サイトを参考に、初めてデータベースを作っているのですが、 どうしても文字+年ごとの自動採番がうまくいきません。 挿入前処理で「営250001」のように漢字1文字+和暦2桁+4桁連番にして、 年が変わるごとに4桁連番を0001に戻したいのです。 今入力してあるコードは以下の通りです。 ----------------------------------------------------------------------------- Private Sub Form_BeforeInsert(Cancel As Integer)  Dim vDt As Variant  vDt = DMax("番号", "営テーブル", "番号 Like '" & Format(Date, "ee") & "*'")  If (IsNull(vDt)) Then   番号 = "営" & Format(Date, "ee") & "0001"  Else   番号 = "営" & Left(vDt, 2) & Format(Val(Right(vDt, 4)) + 1, "0000")  End If End Sub ----------------------------------------------------------------------------- この状態では、0001のまま採番が進まず、行き詰ってしまいました。 他の質問者さんが(Date,"ee")を(Now,"nn")に置き換えて、分ごとの採番を試していたのを参考に、 「"営"&」を取って、採番が進むところまでは確認できました。 使っているのはAccess2003です。 どうか、よろしくお願いします。