アプリ版:「スタンプのみでお礼する」機能のリリースについて

アクセス2000で販売管理を作成しています。
顧客マスター処理で顧客番号をオートナンバーに設定しているのですが顧客データ入力フォームに中止するボタンを用意して、押されると入力中のデータは保存されないようにしています。(コマンドボタンウイザードでレコードを元に戻す)を使用
これで、中止を押して再度登録するとオートナンバーが
1つ飛んでしまいます。
例 顧客番号3で入力中中止ボタン押下後、再度新規登録すると顧客番号が5になってしまう。
これを無くす方法(4になるように)はありますでしょうか?
それと欲張りで大変申し訳ないのですが、
コンボボックスにキーボードからの入力をさせないようにする方法はありますか?
どうぞよろしくお願い致します。

A 回答 (1件)

> 例 顧客番号3で入力中中止ボタン押下後、


> 再度新規登録すると顧客番号が5になってしまう。
> これを無くす方法(4になるように)はありますでしょうか?


基本的にはありませんが、たとえば顧客番号3で中止して、再度新規登録する前に 「最適化」をすると4からはじめられる場合があります。

ただこれもOSやその他の状況(Jetエンジンのバージョン等)によって違うみたいですので、100%の解決策ではありません。また、最適化意外に直接的な解決策はありません。(連番が主キーの場合は。)

一番いいのはオートナンバーを使わずに、プログラムでオートナンバーを作る方法です。

フォームの挿入前イベントなどに、DMAX関数を使ってインクメント(+1ずつふやす)する方法などです。

If DCount("*","フォームのソースとなるテーブル名") = 0 Then

Me!連番フィールドと連結するテキストボックス名 = 1

Else

Me!連番フィールドと連結するテキストボックス名 =DMax("連番フィールド名","フォームのソースとなるテーブル名")

End If

みたいな感じで。

オートナンバー型の値を連番フィールドや主キーなんかにしたりするとあとあと困ることが多いですので、できればオートナンバーは使わないほうが良いかと思います。
メンテの楽なデータベースを作る基本が「オートナンバーを使わない」ということです。マイクロソフトはなんでこんな使えないオートナンバーを放置しておくのか不思議でたまりませんが・・・

そのほか、連番テキストボックスの「既定値」に、

=DMax("連番フィールド名","フォームのソースとなるテーブル名")

などと書いても良いと思います。
ただしこの場合はテーブルにレコードが1つも無い場合に最初の値を入れられないので、最初だけ1を入れておくか、IIF関数なども使うといいかもしれません。

僕は、フォームの挿入前イベントに前述のようなプログラムコードを書くのが一番好きです。
    • good
    • 0
この回答へのお礼

早速のお返事ありがとうございました。
教えていただいた方法で解決いたしました。
ほんとうに助かりました。
これで何とか次に進めそうです。
上手くできたときは本当にうれしかったです

お礼日時:2003/09/06 15:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!