dポイントプレゼントキャンペーン実施中!

Excel+VBA から、ADOを使って、Accessを操作しようとしています。

なんとか、sqlを実行できるようになったのですが、
一点、分からないところが出てきましたので、教えてください。

insert文で、レコードを追加したとき、追加されたレコードのIDを取得したいのですが、
どのようにすれば良いかわかりません。

コードは次のようにしています。
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & データベース名 & ";"
sql = "INSERT INTO テーブル名(フィールド) VALUES(値)"
cnn.Execute sql

以上、すみませんが、よろしくお願いいたします。

A 回答 (2件)

「追加されたレコードのID」というのはテーブル上で自動的に採番される値のことを言ってますか?


また、そのデータベースは自分(このSQL)以外に同時にINSERTされますか?
もし、INSERTされるのが1つで同時に処理されないのであれば、そのテーブルのIDのMAXを取ればよいと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>「追加されたレコードのID」というのはテーブル上で自動的に採番される値のことを言ってますか?
そうです。

>もし、INSERTされるのが1つで同時に処理されないのであれば、そのテーブルのIDのMAXを取ればよいと思います。
同時に処理はしないので、
SELECT Max(ID) FROM テーブル
で対応可能です。

ただ、INSERTしたときの、戻り値のようなかたちで、追加IDを取得する方法はないのでしょうか?

お礼日時:2007/04/29 00:56

私も詳しくないので、ヒントだけ。



IDENT_CURRENT / @@IDENTITY / SCOPE_IDENTITY

これらが、キーワードです。検索してみて下さい。
これらは、複数同時アクセスの場合でも使えるようです。


参考になりそうなものを幾つか挙げておきます。


最後に挿入されたオートナンバー値を取得するには、@@IDENTITY変数が利用できます。
http://yaplog.jp/orator/archive/12


http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.ph …
引用
 Updateと同時に取得はできないようなので@@identityの値を取得するようにしました。


SQLSERVER2000で IDENT_CURRENT と @@IDENTITY と SCOPE_IDENTITY の違い
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.ph …


IDENT_CURRENT / @@IDENTITY / SCOPE_IDENTITY の違い
http://sonic64.com/2005-05-23.html



>ただ、INSERTしたときの、戻り値のようなかたちで、追加IDを取得する方法はないのでしょうか?

ネットの情報を見た感じでは、無理っぽい気がします・・・
INSERT後、IDを取得するのが一般的なようですね。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

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

お礼日時:2007/04/30 09:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A