• ベストアンサー

AccessのSQLについて教えてください。

Excel+VBA から、ADOを使って、Accessを操作しようとしています。 なんとか、sqlを実行できるようになったのですが、 一点、分からないところが出てきましたので、教えてください。 insert文で、レコードを追加したとき、追加されたレコードのIDを取得したいのですが、 どのようにすれば良いかわかりません。 コードは次のようにしています。 cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & データベース名 & ";" sql = "INSERT INTO テーブル名(フィールド) VALUES(値)" cnn.Execute sql 以上、すみませんが、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • mae-stro
  • ベストアンサー率29% (14/47)
回答No.1

「追加されたレコードのID」というのはテーブル上で自動的に採番される値のことを言ってますか? また、そのデータベースは自分(このSQL)以外に同時にINSERTされますか? もし、INSERTされるのが1つで同時に処理されないのであれば、そのテーブルのIDのMAXを取ればよいと思います。

xyz_1990
質問者

お礼

ご回答ありがとうございます。 >「追加されたレコードのID」というのはテーブル上で自動的に採番される値のことを言ってますか? そうです。 >もし、INSERTされるのが1つで同時に処理されないのであれば、そのテーブルのIDのMAXを取ればよいと思います。 同時に処理はしないので、 SELECT Max(ID) FROM テーブル で対応可能です。 ただ、INSERTしたときの、戻り値のようなかたちで、追加IDを取得する方法はないのでしょうか?

その他の回答 (1)

  • venzou
  • ベストアンサー率71% (311/435)
回答No.2

私も詳しくないので、ヒントだけ。 IDENT_CURRENT / @@IDENTITY / SCOPE_IDENTITY これらが、キーワードです。検索してみて下さい。 これらは、複数同時アクセスの場合でも使えるようです。 参考になりそうなものを幾つか挙げておきます。 最後に挿入されたオートナンバー値を取得するには、@@IDENTITY変数が利用できます。 http://yaplog.jp/orator/archive/12 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=24535&forum=7&5 引用  Updateと同時に取得はできないようなので@@identityの値を取得するようにしました。 SQLSERVER2000で IDENT_CURRENT と @@IDENTITY と SCOPE_IDENTITY の違い http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=24750&forum=26&6 IDENT_CURRENT / @@IDENTITY / SCOPE_IDENTITY の違い http://sonic64.com/2005-05-23.html >ただ、INSERTしたときの、戻り値のようなかたちで、追加IDを取得する方法はないのでしょうか? ネットの情報を見た感じでは、無理っぽい気がします・・・ INSERT後、IDを取得するのが一般的なようですね。

xyz_1990
質問者

お礼

ご回答ありがとうございます。 >INSERT後、IDを取得するのが一般的なようですね。 わたしも、教えていただいたサイト・その他のサイトを調べましたが、そのようですね。 あきらめようかと思います。

関連するQ&A