2017-01-24 9 views
0

VBAを使用してMS Accessにアプローチしようとしています。私がしたいコールの1つは、最後に提供された番号を挿入することです。これは、最後に入力された番号を選択し、それから1つずつ反復する必要があります。私は単にforループでこれを配置して30個のループを作成することができますが、この時点でSQL構文を正しいものにしようとしています。選択された挿入物に問題があるようです。私が受け取っているエラーは、「クエリ入力には少なくとも1つのテーブルまたはクエリが含まれている必要があります」です。MS最後の番号から挿入するアクセスクエリ

Dim StrSSQL As String 

StrSQL = "INSERT INTO MyQueryTable (MYNUMBER) VALUES((Select top 1 MYNUMBER + 1 from MyQueryTable order by MYNUMBER desc));" 

DoCmd.SetWarnings False 
DoCmd.RunSQL StrSQL 
DoCmd.SetWarnings True 

ただし、簡単な挿入を"INSERT INTO MyQueryTable (MYNUMBER) VALUES(999)"として実行すると問題はありません。

+1

FYI AutoIncrement列は、このために設計されており、並行性に大きな問題を引き起こさないという利点があります。 –

+1

( 'NUMBER'は予約語なので、' [NUMBER] 'としてエスケープします。) –

+0

正しい番号ですが、手動で挿入すると変更できるので、この番号は必要ありません。 (一意のIDではありません)このマクロを使用すると、最後に使用された番号の上に50個の挿入点が生成されるはずです。一意の番号ではなく、自動インクリメントを使用する効率的な方法がないかぎりですか? – Brad

答えて

3

試してみてください。

INSERT INTO MyQueryTable (MyNumber) 
SELECT MAX(MyNumber)+1 
FROM MyQueryTable 

https://msdn.microsoft.com/en-us/library/bb243852(v=office.12).aspx

編集: - 申し訳ありませんが、それを見ていないだけで@Alex K.コメントに似て書いて気づきました。

+0

とても素敵な答えです。これは私のために働いています。また、私の元の投稿については、 "値"と "かっこ"の削除も同様に機能しました。 – Brad

関連する問題