ACCESS+SQL Serverで主キーを自動採番する
ACCESSを独学で勉強を開始しているものです。
顧客管理のようなものを作りたいと思っているのですが、
オートナンバーではない主キー(顧客コード)を設定しているテーブルがあります。
顧客コードの構成はアルファベット1文字+数字8桁です。
そのうち、数字は西暦2桁+月2桁+日2桁+下2桁は連番です。
ACCESS2007プロジェクトで、SQL Server 2005 Express Editionへ接続しテーブルは作ってあり、既に顧客データが10件ほど入っています。
新規に顧客データを追加する際に、必要事項を入力し、登録ボタンを押した段階で顧客コードを自動生成し、重複チェックし、採番したいと考えています。
アルファベットは必要事項入力時に入力済み、日付もその日の日付を6桁設定し、とりあえず「01」と下2桁を採番して、現在のデータに同じものがないかチェックします。
そして、同じものがあれば「01」+1を繰り返しながらチェックしていくというようなコードはどのようにすればいいでしょうか?
わかりづらいとは思いますが、よろしくお願いします。
No.3
- 回答日時:
#1・#2です。
さらなる訂正があります。
mid(substrでしたね)で、8という値は誤りです、。正しくは 7。
A100402NN の先頭ですよね。8桁だとA1004020まで拾うので、11件目で重複が生じてしまいます。
> ちなみに、GROUP BY がないと、どのようなときに困りますか?
今回は無くてもOKでしたね。ここも勘違い。
「同日のアルファベット別」や「同一アルファベットの日付別」といった一覧作成時に用いてください。
この回答への補足
> mid(substrでしたね)で、8という値は誤りです、。正しくは 7。
SUBSTRINGしか使用してなかったので、気づいていませんでしたw
> 「同日のアルファベット別」や「同一アルファベットの日付別」といった一覧作成時に用いてください。
なるほど、そういう時に利用できるのですね。
覚えておきます。有り難うございました。
No.2
- 回答日時:
#1です。
likeにワイルドカードの記述が不足してました。
where [顧客コード] like アルファベット1文字 & 西暦2桁 & 月2桁 & 日2桁 & "*"
group by mid([顧客コード], 1, 8) <--- left([顧客コード], 8)でも可
とは
group by mid([顧客コード], 1, 8)
または
group by left([顧客コード], 8)
です。念のため。
No.1ベストアンサー
- 回答日時:
select max(mid([顧客コード], 8, 2)) as [連番最大値]
from 顧客テーブル
where [顧客コード] like アルファベット1文字 & 西暦2桁 & 月2桁 & 日2桁
group by mid([顧客コード], 1, 8) <--- left([顧客コード], 8)でも可
;
これで[連番最大値]が取得できたなら1加算。取得できなければ1を代入。
formar([次の連番], "00")で整形して連結。
select投げる前に、連番までのキー情報を作成して変数に入れとくほうがよさそうですね。
ありがとうございます!
なるほど、私のおバカな頭では、まず1をセットしてイコールじゃなくなるまで+1しながらループする・・・なんて無駄な処理を考えていたので、SQL一発でスッキリしてすごく参考になりました。
ちなみに、SQL ServerではMID関数がありませんでしたので、SUBSTRING関数を代わりに使用しました。あと、ワイルドカードも「*」ではなく「%」でした。
最終的なSQLは以下のようにして動作確認しました。
SELECT MAX(SUBSTRING([顧客コード],8,2)) AS [連番最大値]
FROM 顧客テーブル
WHERE ([顧客コード] LIKE 'アルファベット1+日付6桁%')
GROUP BY SUBSTRING([顧客コード],1,8)
有り難うございました。
ちなみに、GROUP BY がないと、どのようなときに困りますか?
まだSQL勉強不足でわからない事だらけなのですが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- その他(データベース) accessについて 2 2022/05/31 16:58
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける 3 2022/09/10 07:55
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける (再質問) 4 2022/09/14 22:51
- Excel(エクセル) Excel 指定した固有番号で、複数の行を削除する方法は? 2 2022/03/30 15:18
- その他(ソフトウェア) 現在と過去の顧客名簿、新規・解約・更新など作りたいのですが「やよいの顧客管理」なら簡単に扱えますか? 1 2022/05/18 10:44
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Excel(エクセル) 関数の式を教えてください 2 2022/04/04 11:15
- Visual Basic(VBA) SQLで抽出 4 2022/12/04 13:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
ExcelのVBAコードについて教え...
-
HTML電卓で1文字消す方法
-
Exel VBA 別ブックから該当デ...
-
Excel VBA素人です。VBAで図形...
-
pythonにてseleniumを使うも、...
-
chatgptでつくってもらったコー...
-
SQL
-
1日に1人がこなせるプログラム...
-
1、Rstudioで回帰直線を求める...
-
JANコードとPOSコードは同じ?
-
access2003 クエリSQL文に...
-
パイソンプログラム
-
楽観的排他処理のためViewState...
-
VBAのifで
-
データバインドした値のコード...
-
vb6.0の実行時エラー'3075'につ...
-
Gitのクローンについて
-
ホームページや書籍などのサン...
-
CFormViewでの印刷について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
access2003 クエリSQL文に...
-
1日に1人がこなせるプログラム...
-
Exel VBA 別ブックから該当デ...
-
pythonにてseleniumを使うも、...
-
ExcelのVBAコードについて教え...
-
ExcelのVBAコードについて教え...
-
chatgptでつくってもらったコー...
-
欠番の抽出について
-
JANコードとPOSコードは同じ?
-
JavaScriptの定数名が取り消し...
-
1、Rstudioで回帰直線を求める...
-
特定行の背景色を変えたいのですが
-
変数名「cur」について
-
PreviewKeyDownイベントが2回...
-
将来AIが進歩してくるにつれて...
-
ACCESSユニオンクエリでORDER B...
-
COBOLの文法
-
VBAでファイルオープン後にコー...
-
Nullの使い方が不正です。
おすすめ情報