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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQLサーバから、項目の属性(型...
-
マイクラPC版のコマンドで効率...
-
ギターのコードが分からない
-
バインド変数について
-
エラー 1068 (42000): 複数の主...
-
副問合せの書き方について
-
全角文字を含む行を検索
-
mysqlで特定のカラムから下4桁...
-
SQLにて特定の文字を除いた検索...
-
エクセルの関数について教えて...
-
エクセルからOutlookメールを起...
-
sqlで、600行あるテーブルを100...
-
PL/SQLの変数について
-
SQL Left Join で重複を排除す...
-
阪急三番街 ATM(ゆうちょ)は...
-
android.R.id.text1はどこにある
-
”photo id” とは何ぞや?
-
MySQLでのEXCEPTについて
-
ATAコネクタの薄型CDドライブ用...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
VIEWの元のテーブルのindexって...
-
副問合せの書き方について
-
select文のwhere句に配列を入れ...
-
マイクラPC版のコマンドで効率...
-
SQLサーバから、項目の属性(型...
-
エラー 1068 (42000): 複数の主...
-
[MySQL] 3つのテーブルの結合で...
-
Access パラメータクエリをcsv...
-
SQLにて特定の文字を除いた検索...
-
SQL Left Join で重複を排除す...
-
ストアドのエラーについて
-
Unionした最後にGROUP BYを追加...
-
バインド変数について
-
PL/SQLの変数について
-
sqlで、600行あるテーブルを100...
-
WordpressのContact form 7でzi...
-
selectした大量データをinsert...
-
inner joinをすると数がおかし...
おすすめ情報