
AccessのVBAでIDを自動発番するプログラムを書いています。
現在、以下のようなコードを書いています。
Insert into A(id, idid, no, name) select dmax(id, A)+1, B.idid, B.no, B.name from B
ちなみにid、idid、noは数値型です。nameはテキスト型です。
このプログラムを実行しても何も起こりません。
SQLビューで確認するとパラメータの入力を求められます。
この問題にはまってしまっています。
ご教授のほどよろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
> strSQL = Insert into A(id, idid, no, name) select dmax(id, A) + DCount(*, B, id <= B.id), B.idid, B.no, B.name from B
↓
strSQL = "Insert into A(id, idid, no, name) select dmax(""id"",""A"") + DCount(""*"", ""B"", ""id <="" & B.id), B.idid, B.no, B.name from B"
※ クエリのSQLビューで見た時の " は、 "" にします。
No.3
- 回答日時:
1つの例として、
テーブルBにレコード順を示すフィールド、id (オートナンバー)があるとします。
> dmax("id", "A")+1
↓
dmax("id", "A") + DCount("*", "B", "id <= " & B.id)
とすることで、
テーブルAの最大値+テーブルBでの何個目という数値が得られます。
select dmax("id", "A") + DCount("*", "B", "id <= " & B.id), B.idid, B.no, B.name from B
で1度確認してみてください。
この回答への補足
すいません。追加で質問させてください。
VBEでSQL文を転記したところダブルコーテーションらしきところで
エラーが出てしましました。
そこで、以下のようにダブルコーテーションを取ってみたら構文
エラーはなくなりましたが、何も実行されなくなってしまいました(汗)
dim strSQL as String
strSQL = Insert into A(id, idid, no, name) select dmax(id, A) + DCount(*, B, id <= B.id), B.idid, B.no, B.name from B
CurrentDb.Execute strSQL, dbFailOnError
まだダブルコーテーションの意味があまりよく理解できていませんので、
その辺も含めてご教授いただけるとありがたいです。
よろしくお願いいたします。
ありがとうございます!!!
こんなコードになるとは想像もつきませんでした。。。
ご提示いただいた方法でできていることを確認できました。
SQLビューでは確認できましたので、これをVBEに転記してみて
試してみます。
No.2
- 回答日時:
1度、予約名とか使わないフィールド名にしてみたらどうなりますか。
(no, name は予約語のようです)
もしくは、各フィールド名を [ ] で囲ってみるとどうなりますか。
select dmax("id", "A")+1, B.idid, B.no, B.name from B
のみのクエリ表示はどうなりますか。
テーブルBには、何件レコードが入っていますか。
2件以上の場合には、
dmax("id", "A")+1
が同じ値になるので、2件目以降はエラーとなると思うのですが。
フィールド名は便宜上、noやnameとしておりまして、
本来はアンダーバーの付いた名前となっております。
また、[]で囲んでみたところ、同様に何もおきませんでした。
SQLビューではパラメータの入力を求められます。
>select dmax("id", "A")+1, B.idid, B.no, B.name from B
のみのクエリ表示はどうなりますか。
これを実行すると自動発番したいidがかぶっていました。。。
完全にこれでキーがかぶってしまい、エラーの原因であることがわかりました。
ちなみにテーブルBには5件のデータが入っています。
この方法で連番を振るのは不可能なのでしょうか??
全然想像が付きませんので、引き続きご指導をお願いいたします。
No.1
- 回答日時:
> Insert into A(id, idid, no, name) select dmax(id, A)+1, B.idid, B.no, B.name from B
↓
Insert into A(id, idid, no, name) select dmax("id", "A")+1, B.idid, B.no, B.name from B
としてみると、どうなりますか。
この回答への補足
30246kikuさんいつも回答ありがとうございます。
回答してくださったSQL文をSQLビューで記載すると
レコードのキー違反が出てしまいました。
ちなみに追記したい「id」は数値型で、インデックスは「はい (重複なし)」
となっており、このテーブルの主キーにしております。
早速の回答ありがとうございます。
Visual Basic Editorでご教授いただいたように書くと
赤文字となりエラーとなってしまいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
【Transact-sql】 execの結果を...
-
ソフトバンクの無料着うたのお...
-
WordpressのContact form 7でzi...
-
php+mysqlで複数選択削除について
-
テーブルが5つの時の結合の仕...
-
Postgreのupdateコマンドでエラー
-
PL/SQLの変数について
-
select文のwhere句に配列を入れ...
-
エクセルの関数について教えて...
-
AUTO_INCREMENTのあるテーブル...
-
sqlで、600行あるテーブルを100...
-
SQLにて特定の文字を除いた検索...
-
#1136 - Column count doesn't ...
-
最小値をUPDATE
-
MYSQLの論理削除について質問で...
-
HAVING count()で重複したデー...
-
selectした大量データをinsert...
-
SQLサーバから、項目の属性(型...
-
このサイト(ttp://127.0.0.1/p...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エラー 1068 (42000): 複数の主...
-
エクセルの関数について教えて...
-
VIEWの元のテーブルのindexって...
-
sqlで、600行あるテーブルを100...
-
SQLサーバから、項目の属性(型...
-
SQL Left Join で重複を排除す...
-
Access パラメータクエリをcsv...
-
クエリ表示と、ADOで抽出したレ...
-
ストアドのエラーについて
-
マイクラPC版のコマンドで効率...
-
バインド変数について
-
SQLにて特定の文字を除いた検索...
-
副問合せの書き方について
-
【Transact-sql】 execの結果を...
-
”photo id” とは何ぞや?
-
mysql+phpをつかったカートつく...
-
MySQL5.5 viewの処理速度改善に...
-
select文のwhere句に配列を入れ...
-
テーブル名を省略して「h.id」...
おすすめ情報