0

アクセスにフロントエンドがあり、バックエンドはSQL Server 2008です

フィールドの 1 つはアカウント番号で、ここにルールがあります

これは、92111 にダッシュと数字を加えたような郵便番号です。

最初のものは 92111-1、2 番目のものは 92111-2 になります。

これは、郵便番号内にあるクライアントの数に関係しています

この郵便番号を自動生成してほしいです。ここに私が必要なものがあります:

  1. ユーザーが郵便番号を入力します
  2. この郵便番号が既に存在するかどうかを確認してインクリメントするストアド プロシージャがあります。92111-4 が既に存在する場合は、92111-5 にします。

これを行う適切な方法は何ですか?

4

2 に答える 2

2

zip とクライアント シーケンス番号の両方を 1 つのアカウント番号フィールドに格納している場合は、それらを分割して、特定の郵便番号の次のシーケンス番号を把握する必要があります。

それらを 2 つのフィールドに格納する方が簡単です。

zipcode   sequence_num
92111     4
92111     5

次に、必要なときにクエリを使用してアカウント番号フィールドを取得します。

SELECT zipcode & "-" & sequence_num AS acct_num
FROM YourTable;

次に、特定の郵便番号 pZip 内の次の sequence_num である lngNextSequenceNum を決定する必要がある場合:

lngNextSequenceNum = DMax("sequence_num", "YourTable", "zipcode = " & pZip) +1

このアプローチは、シングル ユーザー アプリケーションでは問題なく機能します。アプリケーションがマルチユーザーの場合は、より洗練されたものが必要です。ただし、「口座番号」を単一のフィールドとして保存するか、2 つのフィールドに分割するかにかかわらず、その要件は存在します。

マルチユーザー アプローチについては、フレキシブル オートナンバー型フィールドの作成と使用を参照してください。

于 2010-09-20T18:12:56.433 に答える
1

ZIP とシーケンスを分けておく必要があるという HansUp に同意します。zip とシーケンスを結合する AccountNumber というインデックス付き計算フィールドを作成できます。

これを行う唯一の方法は、テーブルをロックし、 を選択max(sequence) ... where ZIP = 12345し、新しいレコードを挿入してから、テーブルのロックを解除することです。ただし、テーブルをロックすると、他の全員が待機する必要があり、スケーラビリティに大きく影響します。これはお勧めできませんが、別の解決策はありません。

于 2010-09-20T20:52:22.567 に答える