• ベストアンサー

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

  • SQLの構文エラー??

    お世話になっています。 OS:Win2000 DB:Access2000 です。 Insert文、Update文共に「構文エラー」になってしまいます。 ですが、実行したSQL文をAccessのクエリに貼り付けて実行しても エラーにならず、正常に実行されます。 エラーになったSQL文は以下のとおりです。 INSERT INTO D_Schedule (ShisetuNo,YYYYMMDD,ScheTime,Seq,Title,Memo,AddDate,UpdDate) VALUES (1,20041213,'0900',6,'BBB','BBB',#2004/12/16 14:31:49#,#2004/12/16 14:31:49#) UPDATE D_Schedule Set YYYYMMDD =20041213, ScheTime ='0900', Title ='AAA', Memo ='BBB', UpdDate =#2004/12/16 14:30:06# WHERE ShisetuNo=1 AND YYYYMMDD=20041213 AND ScheTime='0900' AND Seq=2 Insert文の場合、Valueの左側を指定しないで Insert Into D_Schedule Values()だとエラーにならないです。 何かお心当たりのある方、ご指摘お願いいたします。 DB更新はADOで行っています。 ADOの接続方法は Set gobjCon = Server.CreateObject("ADODB.Connection") gobjCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & GCOM_DBNAME & ";" です。 SQL文の実行方法は gobjCon.Execute(strSQL) です。よろしくお願いいたします。

  • ExcelVBAからAccessにアクセスする

    ExcelVBAからパスワード付きAccessにアクセスする ExcelVBAからADOでAccessに次のようにしてアクセスしています。 Dim Cnn As ADODB.Connection Set Cnn = New ADODB.Connection Cnn.ConnectionString = \"Provider=Microsoft.Jet.OLEDB.4.0;\" _ & \"Data Source=\" & mdbのフルパス Cnn.Open パスワード付きのmdbにアクセスするのはどのようにしたらよろしいでしょうか?

  • VB6.0とaccessのDBを接続する

    初めまして。 件名のようなことを実行する際、 以下のソースを参考にしようと思ったのですが、 ******************************************* Dim cn As New ADODB.Connection Dim rc As New ADODB.Recordset ' 接続を確立する cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\My Documents\db1.mdb;" ' テーブル名を指定してレコードセットを作成する rs.Open "Table1", cn, adOpenKeyset, adLockOptimistic ************************************* > cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ > "Data Source=C:\My Documents\db1.mdb;" この部分の接続文字はどのようにしたら取得できるのでしょうか? SQLserverのときは、コンポーネントから Microsoft ADO Data Control 6.0(AP4)(OLEDB) を追加し、プロパティでOLE DBプロバイダを選択して接続文字を取得したのですが、accessに繋ぐのは初めてで、わかりません。 どなたか宜しくお願いいたします!!

  • AccessのSQLで、レコード数の取得方法を教えてください。

    すみませんが、教えてください。 AccessをADO+SQLで操作しています。 cnn.Open **** sql="SELECT hoge FROM tabeleHoge;" set rec=cnn.Execute(sql) で、recオブジェクトから、レコード数を取得する方法ってあるのでしょか? sql="SELECT COUNT(*) FROM tableHoge;" を使わずに、できれば、嬉しいのですが。 以上、よろしくお願いいたします。

  • VB6でのSQLでのアクセスデーターの追加について

    abc = "insert into 社員テーブル(コード,名前) values ('0002','Takeda')" c1.Execute abc 上記のようにプログラムで直接データーを入力すると データーは追加で登録できるのですが 下記のように、テキストボックス1(tx1.Text)とテキストボックス2(tx2.Text)にデーターを入力して、入力した 内容を追加しようとするとエラーになります。 どこが間違っているのでしょうか? abc = "insert into 社員テーブル(コード,名前) values (tx1.Text,tx2.Text)" c1.Execute abc

  • VB6+SQLServer2005 DBの新規作成

    VB6+ADOを使用してSQLサーバーの新規データベースファイルを 作成しようと思っております。下記のようなプログラムを つくりましたがうまく動きません。お知恵を貸してください。 catDB.Createのところで 「インターフェイスがサポートされていません」 とエラーが出ます。 いままでAccess2000で動かしていたものをSQL2005に移設している ところです。 SQLサーバーは、はじめて触ります '--------------------------------------------- 'Const ADO_VERSION ="Microsoft.Jet.OLEDB.4.0;" Const ADO_VERSION ="SQLOLEDB;" '--------------------------------------------- Set catDB = New ADOX.Catalog catDB.Create "Provider=" ADO_VERSION & _ "Data Source=" & "d:\test"

  • SQLでできますか?

    SQLでできますか? INSERT INTO test (A) VALUES (B)というSQLを発行したいのですが、このSQLのVALUESのBにあたる部分を正規表現的に指定して、一度のクエリで以下のような結果を得たいのです。 1.テーブルhogeのpiyoカラムの値の先頭がappleになっている行を探す。 2.(1.)で抽出した行のidの値をBとする。 例えば、以下のようにです。 ■皆様が回答してくださるSQL文(1クエリで行いたい) ???????????? ■皆様が回答してくださるSQL文と同等の意味を持つSQL群 INSERT INTO test (A) VALUES (100) INSERT INTO test (A) VALUES (101) INSERT INTO test (A) VALUES (102) ■テーブルhoge _____id_____piyo__________created 1. 100 applebanana 2009/01/02 2. 101 apple_12345 2009/01/03 3. 102 appleXXXXXX 2009/01/04 4. 103 bananananan 2009/01/05 5. 104 ringogogogo 2009/01/06 分かりにくい説明ですが、お詳しい方、どうかご回答の程を宜しくお願いいたします。

    • ベストアンサー
    • MySQL
  • VBとアクセスでSQL文に変数を使いたいのですが

    したいことはレコードの挿入をSQL文で変数を使用して処理したいのですがうまく動作してくれません StrSQL_1 = _ "insert into 行先情報テーブル (社員ID, 行先, 帰社予定時刻, 備考)" & _ "values (7,'(変数1)','(変数2)','(変数3)')" 変数の部分が置き換わりません、いろいろ調べてみたのですがどうもわかりませんvaluesでは変数を使えないのでしょうか? もしそうだとするとどのようにすればレコードを挿入するSQL文で変数を利用できるのかをおしえていただけないでしょうか

  • Excel VBAにてADOを利用して、Access mdbへのコネク

    Excel VBAにてADOを利用して、Access mdbへのコネクションは可能ですがAccess adpへのコネクションができません。    ちなみにコードはコネクション部位のみ記述しますが、 cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="*****.adp;" になります。  なお、目的はExcel VBAを利用して、Access adpデータを取り込みたいので他の方法で可能ならば 他の方法でもかまいません。 以上、よろしくお願いします。

  • ADOでエクセルからSQL Serverへデータを移行するには

    エクセルvbaのADOを使って、 SQL Serverの「test」という名のデータベースの「Table_1」に 新規レコードを追加する事はできますか? エクセルからアクセスには Sub test() Dim データベース名 As String Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordset cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & データベース名 rs.Open "Tテーブル1", cn, adOpenKeyset, adLockOptimistic rs.AddNew rs.Fields("フィールド1") = データ rs.Update rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub で移行しています。 これをエクセルからSQL Serverへ移行させるにはどうすればいいのでしょうか? よろしくお願いします。