MS Access Tips/Sample and VBA and Blog customize etc...

複数レコードの追加クエリで連番を付与する

フォームなどで新規レコードを入力するときに、あるフィールドに DMax で連番を取得して採番するという方法はあちこちで紹介されています。

しかし、テーブルまたはクエリの複数レコードを、追加クエリで追加先テーブルに追加するときに連番を振りたいというという時に、同様に DMax で連番を振ろうとしても、追加されたレコードにすべて同じ番号が振られます。

このような追加クエリでも連番を振る方法を紹介します。

追加クエリで連番

難易度:

DMaxでうまくいかない原因

追加元テーブル
テーブル1(フィールド1, フィールド2)

追加先テーブル
テーブル2(ID, フィールド1, フィールド2)

とします。

フォームの既定値に設定するのと同じようにDMax関数を追加クエリに下記のように設定します。

これを実行すると、IDフィールドには、すべて同じ番号が入ります。IDが主キーフィールドなら重複エラーで最初の1件だけ追加されて、あとは重複エラーで弾かれます。

これは、レコードが1件追加されるたびに DMaxの演算フィールドが評価されるのではなく、最初の一回のみ評価されるのが原因だと思われます。

VBAとの合わせ技で

DMax関数だけでは無理なので、VBAでユーザー定義関数を作成してそれを利用します。

標準モジュールに下記の関数を作成します。

追加クエリは下記のようにします。

これで追加レコードのIDフィールドに連番が振られます。

GetCounter の引数にはテーブル1のフィールドを何でもいいので設定します。
関数内では使用していないですが、フィールドを参照していないと関数が一回しか評価されないので連番にはなりません。

WHERE句で InitCounter関数を設定してますが、InitCounter関数はTrueを返すので、すべてのレコードを抽出することになります。また、この式は最初に一回だけ評価されます(フィールドを参照していないので)。
ここで、開始値を設定します。


拍手する

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/427-ba28cd18
該当の記事は見つかりませんでした。