人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Accessでオートナンバー型のKeyを、INSERT後に取得したいのですが、その方法を教えてください。初心者のため、初歩的質問で申し訳ないですがよろしくお願いいたします。


1.テーブル TBL001
ID オートナンバー レプリケーションID KEY設定
NAME テキスト型

2.UPDATE例
※下記のようなコードで、Rsに割り当てられたIDを入れたいです(実際にはこのコードではRs代入時にエラーになります)
'変数
Dim strSQLStatement As String
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
'DB登録
strSQLStatement = "INSERT INTO TBL001 (NAME) VALUES ('山田太郎')"
Set Cn = CurrentProject.Connection
Set Rs = Cn.Execute(strSQLStatement)
Rs.Close: Set Rs = Nothing
Cn.Close: Set Cn = Nothing

私の環境です
MS Acsess 2003 SP1
Windows XP SP2


●質問者: zfmx
●カテゴリ:はてなの使い方 コンピュータ
✍キーワード:access as dB Key MS
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● きつねこ
●23ポイント

select * from TBL001 where name = '山田太郎'

更新時の日時分秒を入力する'insertDateTime'等、適当にテーブルにカラムを新設して

insert時に同時に更新するようにしてやり、検索時にあわせて検索すると間違いありません。

CSVなどから一斉にデータ入力があって日時分秒(およびマイクロ秒)まで固有にならない場合がありもっと徹底的にやりたい場合は、

'key'等、照合専用のカラムを作り、uniqueをtrueにした上で適当に乱数生成したりして埋めるといいと思います。

◎質問者からの返答

ご回答ありがとうございました


2 ● mj99
●35ポイント ベストアンサー

こうゆうことですかね。

Sub hoge()
 
 Dim cn As ADODB.Connection
 Dim rs As New ADODB.Recordset
 
 Set cn = CurrentProject.Connection
 rs.Open "SELECT * FROM TBL001", cn, adOpenDynamic, adLockPessimistic
 
 rs.AddNew ' レコード追加
 
 Debug.Print StringFromGUID(rs("ID").Value) ' 設定されたIDをプリント
 
 rs("NAME").Value = "山田太郎"
 
 rs.Update ' レコードの変更を確定
 
 rs.Close
 
End Sub

◎質問者からの返答

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

このような方法があるとは知りませんでした。


3 ● freemann
●22ポイント

以下のようなコードでできると思います。

ここでIDは新しいほうが大きくなっていくのであとから挿入したものの方が大きいはずなので、同じ名前の人がいても、MAX関数で取得すれば今挿入したもののIDが取得できます。

(注意)

こちらはAccess2007で検証しました。フィールド名にNAMEを設定するとエラーがでますので、便宜上aNAMEとしています。

テキスト0:登録したい名前を入れるテキストボックス

ラベル6:登録した名前のIDを表示するためのラベル

Private Sub コマンド7_Click()

Dim strSQL As String

Dim Conn As ADODB.Connection

Dim Rs As New ADODB.Recordset

strSQL = "INSERT INTO TBL001(aNAME) VALUES('" & Me.テキスト0.Value & "')"

Set Conn = CurrentProject.Connection

Conn.Execute (strSQL)

strSQL = "SELECT MAX(ID) AS xID FROM TBL001 WHERE aNAME = """ & Me.テキスト0.Value & """ GROUP BY aNAME"

Rs.Open strSQL, Conn, adOpenStatic

If Rs.RecordCount = 0 Then

MsgBox "レコードが登録されていません"

Exit Sub

End If

Me.ラベル6.Caption = Rs![xID].Value

End Sub

◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ