Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


573 / 2272 ツリー ←次へ | 前へ→

【11108】一括更新時の連番の振り方 マリア 09/4/27(月) 23:48 質問[未読]
【11114】Re:一括更新時の連番の振り方 小僧 09/4/28(火) 16:13 発言[未読]
【11118】Re:一括更新時の連番の振り方 マリア 09/4/28(火) 22:59 質問[未読]
【11120】Re:一括更新時の連番の振り方 小僧 09/4/29(水) 0:47 回答[未読]
【11123】Re:一括更新時の連番の振り方 マリア 09/4/30(木) 19:55 お礼[未読]

【11108】一括更新時の連番の振り方
質問  マリア  - 09/4/27(月) 23:48 -

引用なし
パスワード
   データを一括更新する際に続きの番号を自動で取得したいのですがテーブルにオートナンバーで設定すると、そのデータを一括削除するとまた1から振りなおされてしまいます。番号は重複させたくありません。
また、同じ手順を繰り返し使用しますので前回の番号にプラス1でつけさせたいのですがモジュールの設定が必要でしょうか?その際どのように記述すればいよいでしょうか?是非、お教えくださいますようお願いいたします。

【11114】Re:一括更新時の連番の振り方
発言  小僧  - 09/4/28(火) 16:13 -

引用なし
パスワード
   ▼マリア さん:
こんにちは。

>また1から振りなおされてしまいます。

データベースの最適化/修復を行わなければ
続きの番号が振られるかと思いますが、
適度に最適化を行ったほうが良いのも事実です。


元々オートナンバーは重複しない値を作成する為の機能であって
連番を振るためのものではありません。

連番をふるという事であれば
最大値に +1 をしながら取り込む様なコードの作成が必要ですね。


また、データを一括削除する前に
最大値を記憶しなければいけないのですが、

> データを一括更新する際

これがどの様なやり方で行っているかによって

・テーブルに覚えさせておく
・モジュール内の変数に格納しておく

等、やり方が変わってくると思われます。

【11118】Re:一括更新時の連番の振り方
質問  マリア  - 09/4/28(火) 22:59 -

引用なし
パスワード
   ▼小僧 さん:

こんにちは。

アドバイスありがとうございます。

生産管理を自社用に作成しています。
受注をまとめてEDI方式受信し、それを部品展開して共通部品を在庫と照らし合わせて自動で外部に注文書を手配します。
その際、自社の注文番号を自動付加させるための連番なのです。
フォーム上で付加させることはDmaxで出来るのですが、クエリー上でまとめて付加
させたいと思いご質問をさせていただきました。
以前、使用していたデータベースソウフトdbZaurusでは変数に数値をおいて最終番号を変数に戻すという方式を使っておりました。
しかし、アクセスは初めて使用しモジュールの使い方がわかりません。
よろしければ、是非その辺のコードの書き方をご教示願えれば助かります。
色々な書籍を購入してもその辺は掲載せれておりませんでした。

宜しくお願いいたします。

【11120】Re:一括更新時の連番の振り方
回答  小僧  - 09/4/29(水) 0:47 -

引用なし
パスワード
   ▼マリア さん:
こんばんは。

>> データを一括更新する際
> これがどの様なやり方で行っているかによって

この辺がポイントになってきますね。

AccessVBAにおいての変数は、

・Accessを開いている最中ずっと値を保持する変数
・あるフォームを開いている最中は値を保持する変数
・1つの命令を実行している間のみ値を保持する変数

などを指定できます。

MSサポートオンラインより
Visual Basic for Applications の変数の適用範囲
h tp://support.microsoft.com/kb/141693/ja
(こちらの掲示板は直リンクが禁止ですので、補完して下さい)


データの削除から、データの投入/変更までの間に
いったんAccessを閉じるような操作が入る場合には
変数に値を保持する様な事はできません。


また、プログラム上において
変数を長く保持する様な書き方というのは
余り推奨されておりません。


MSサポートオンラインより
[VBA] Public 宣言された変数の有効期間
h tp://support.microsoft.com/kb/408871/ja


削除 → データの一括投入 → 注文番号の一括変更

の流れが1つのアクションで行われるのであれば
変数を使う方法で問題はないと思います。

特定のフォームを開いている最中に、例えば 

・削除ボタン
・データインポートボタン
・注文番号の一括処理ボタン

などとなっている場合は
フォームレベルで変数を宣言して値を保持する事もできますが、
フォーム上に不可視のテキストボックスを配置して
そこに値を入れておいた方がより無難かもしれません。


データの削除と新データの投入までに
Accessを閉じる可能性がある場合は
面倒でもどこかに記憶させる必要が出てきます。

外部ファイル等でも良いのですが、
Accessというツールを使っている場合には
テーブルに保存するのが一般的ではないかと思われます。


それぞれの場合によってコードも異なってくるので
もう少し詳細をご提示して頂けますでしょうか。


> クエリー上でまとめて付加させたいと思い

注文のデータには Unique(絶対に重複しない)な値がありますでしょうか?

部品コード 数量 発注先コード
A001      1     H001
A001      2     H003
B001      2     H006

のようなデータでしたら特に問題はないのですが、


部品コード 数量 発注先コード
B001      1     H001
B001      1     H001
B001      1     H001

(合計金額がxxxx円を超える場合は
 複数注文書を切らなければいけない…等)

の様なデータがありうる場合には
クエリ一括で注文番号を付加させるのは難しいかと思われます。
(VBAを使って番号を付加する事は可能です。)


また、複数項目の組み合わせで一意になる場合
(部品コード、発注先コードの組み合わせで重複しない、等)

一意になる組み合わせの項目が多いと
処理が遅くなる場合がありますね。


> 色々な書籍を購入してもその辺は掲載せれておりませんでした。

データベースという観点から見た場合。
不要なデータであっても完全に削除する事は
あまりお勧めできない行為であるかもしれません。

いらないデータであっても「削除フラグ」などという項目を作り、
True/False を切り替えることによって
ユーザにはデータを見せないような作りにする事が多々あります。

今回の様な操作はあまり一般的でないため
書籍などにもヒントになるようなものがないのかもしれませんね。

【11123】Re:一括更新時の連番の振り方
お礼  マリア  - 09/4/30(木) 19:55 -

引用なし
パスワード
   ▼小僧 さん:

こんばんは。

適切なアドバイスありがとうございます。

変数はずっと保持するものと思っていましたし、オートナンバーは
最適化をすると元に戻ってしまうというのも、初めて知りました。
ありがとうございます。

やはり、最大数をテーブルに保存しそこから連番を振るのが一番
良い方法ですね。

最大数だけを保存するにはどのようにしたらよいですか?
さらにその数を呼び出し連番を振る方法はありますでしょうか?
質問ばかりですみません。

この掲示板で頼る以外にありません。(><)
宜しくお願いしますm(__)m

573 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078195
(SS)C-BOARD v3.8 is Free