
Accessで自前の自動採番処理で採番テーブルを作り、その採番テーブルに格納してある最後の主キーのNO.を取得して、それに1加算したものを、新規レコードの主キーの自動採番処理結果として設定するやり方を考えていますが、その場合に
1) 複数レコードにエクセルなどから複数行データをコピーして貼り付けた場合には、採番がうまくいくのでしょうか?行かない場合には、その対処策はありますでしょうか。
2) 一行、または、複数行を削除した場合には、採番は既に登録済みの最後のNo.から自動採番するようになると思いますが、通常のアクセスのシステムでは、このような挙動で宜しいのでしょうか?
ご回答のほうよろしくお願いします。
No.2ベストアンサー
- 回答日時:
#1 の回答は番号フィールドにNull がある複数のレコードが存在する場合の
サンプルです。
※最後に採番テーブルの番号の値を変更するのが抜けてました。
rs.close:set rs =nothing の前に
currentdb.execute("update 採番テーブル set 番号 =" & maxnum)
を追加してください。
1レコードずつ手入力で行っている場合はまた別の話になります。
フォームのレコード移動時イベントに
if me.newrecord then
me!フォームの番号コントロール名 = Nz(DMax("番号", "採番テーブル"), 0) +1
・・・とかになりますが
採番テーブルの方の番号を更新するタイミングは更新前処理に行えば
良いでしょう。
が、もしかしてマルチユーザー環境で・・・と考えているのなら
全部忘れてください。ハードルがぐっと上がりますので確かな回答は出来ません。
こちらが参考になるかと思いますけど。。。
[VB] DAO でユーザー定義カウンターを実装する方法
http://support2.microsoft.com/default.aspx?scid= …
私からは以上です。
ご回答ありがとうございます。マルチタスクなら忘れてと言われましても、なかなか忘れられませんのですが・・・
このリンクの先のソースを見ましたけど
>' テーブルを排他オープン (テーブルが使用中の場合はここでエラーが発生)
> Set rs = db.OpenRecordset(TableName, dbOpenTable, _
> dbDenyRead Or dbDenyWrite)
このOptionのおまじないで、レコードセットを閉じるまでは他のユーザがそのテーブルを開く事は出来ないようですが、これを使えば、例えば、採番テーブルの更新を、例えば、単票Form(非連結)のもので、新規レコードの登録をスル場合に、行えば、邪魔されずに+1した番号を採番テーブルにセットできるということでしょうか?でも、同じデータの新規レコードを他のユーザも登録しようとした場合に、問題が起きるということでしょうか。これを考えだすと、混乱してしまいます。
例えば、単票Formにレコードを読み込む時、そのレコードの最終更新時間を取得しておき、登録処理で、再度、同じレコードの最終更新時間を取得して、その2つの時間を比較して、同じであれば、保存、違う場合、ユーザに知らせ、保存するか、キャンセルするか決めてもらうような処理を普通するのでしょうか?
なんとかならないものでしょうか。
忘れて下さいというのは、つまり、オートナンバーを使えということでしょうか。困りました。
No.1
- 回答日時:
とりあえず取り込んでおいてから
dim db as database
dim rs as dao.recordset
dim MaxNum as long
set db=currentdb
set rs=db.openrecordset("select 番号 from 採番テーブル where 番号 is null",dbopendynaset)
maxnum=dmax("番号","採番テーブル")
do until rs.eof
rs.edit
maxnum=maxnum+1
rs!番号 = maxnum
rs.update
rs.movenext
loop
rs.close:set rs =nothing
set db=nothing
のようなのを走らせればよろしいかと。
>エクセルなどから複数行データをコピーして貼り付け
ということはめったに行いませんけど。
一意の番号であれば問題ないので欠番があっても問題ありません。
ご回答ありがとうございます。
採番テーブルから主キーの値を取得して、それに+1したものを、例えば単票フォームの新規レコードの主キーにセットスル場合、単票フォームのロード時にこの処理をやればよいでしょうか?
そして、そこで入力したデータを「登録」ボタンを押して、テーブルAに登録する処理の時に、採番テーブルの主キーを更新する処理をやる・・・このような感じで宜しいのでしょうか?→取消ボタンを押した場合には、採番テーブルは処理しない
あと、帳票フォームの場合には
Form_BeforeUpdateの処理でこの採番テーブルから値を取得する処理を実行すれば良いのでしょうか?
帳票のAフォームにて、レコードを修正した場合、登録ボタンにて、採番テーブルを更新し、Aテーブルに変更内容を登録する・・・という感じで考えていますが、これで宜しいでしょうか?
次々に質問してしまい申し訳ありませんが、
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessで別テーブルの値をフォ...
-
access 自動採番 「10-AA-000...
-
Accessで日付が変わると番号が...
-
社員DBを作る
-
ADO VBA 実行時エラー3021
-
GROUP BYを行った後に結合した...
-
実績累計の求め方と意味を教え...
-
ヘッダレコードとトレーラレコ...
-
select句副問い合わせ 値の個...
-
OracleのSQL*PLUSで、デー...
-
Oracleでの文字列連結サイズの上限
-
エラー2「無効な識別子です」
-
CREATE テーブルでの複数外部...
-
ACCESSで大量の更新を行うと「...
-
データセットのレコード更新が...
-
ワードの差込印刷で教えて下さ...
-
レコードが存在しなかった場合
-
SQL文で右から1文字だけ削除す...
-
エラー「無効な識別子です」
-
SQLPLUSにて演算子を使う方法と...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessで別テーブルの値をフォ...
-
最新の日付とその金額をクエリ...
-
Accessで日付が変わると番号が...
-
access 自動採番 年が変わる...
-
SELECT * FROM `生徒名簿` INNE...
-
vba 直前の操作はキャンセルさ...
-
accessのテーブルから条件の抽...
-
sqlで質問です。 Aテーブルの登...
-
〜のような結果を出すためのSQL...
-
社員DBを作る
-
条件をつけて日付の古い行を抜...
-
Accessでのレコード存在チェック
-
【アクセスVBA】テーブルにフィ...
-
【SQL】existsでの商演算
-
質問です。 下記のテーブルとデ...
-
主キーの選び方
-
access 自動採番 「10-AA-000...
-
Access 文字+年ごとの自動採番
-
Access VBAで更新履歴を追いたい
-
MySQLで桁あふれを防ぐ方法
おすすめ情報