2011-12-16 40 views
0

私のvb.netアプリケーションからmsaccess dbにデータを挿入しています。msaccessクエリで最後に挿入されたレコードを取得する方法

テーブルに最後に挿入されたレコードを追加する方法が混乱します。 MS-SQLではそのために@@ IDENTITYを取得しますが、MSAccessでは私のために働いていませんでした。

最後に挿入されたレコードをテーブルに追加するにはどうすればよいですか?

+0

どういう意味ですか?オブジェクトを作成してそれに対してクエリを実行すると、@@ identityを使用できます。 http://stackoverflow.com/questions/2082427/how-to-retrieve-last-autoincremented-value-in-ms-access-like-identity-in-sql-s、http://stackoverflow.com/questions/ 5942781/select-identity-scoped-by-db-objectなどです。 – Fionnuala

答えて

6

例:

Dim db As Database 
Set db = CurrentDb 

db.Execute "INSERT INTO Table1 (atext) Values('abc')", dbFailOnError 

Dim rs As dao.Recordset 

Set rs = db.OpenRecordset("select @@identity") 
Debug.Print rs(0) 

それはテーブルの上に自動インクリメントキーがあることを必要とします。

-1

数字の(自動インクリメントの場合もある)プライマリキーを使用することは常に良い方法です。その後、常にMAXを選択することができます。これは挿入された最新のレコードです。

+0

hmmは面白そうですが、2人のユーザーがselectステートメントを実行する前にレコードを同時に挿入するとどうなるでしょうか... – KoolKabin

+0

自動増分のプライマリキーは一意ではなく、順序が重要な場合は、それで、あなたは、複数のユーザーのためのあらゆる種類の興味深い作業に入っています。 – Fionnuala

+0

@KoolKabin:レコードを作成したユーザー名を格納します。したがって、「作成者」が現在のユーザーと等しいMAXを取得できます。理想的ではないが、より良い。理想的なソリューションはSQL Server Expressに移行することです(無料です)。 – HardCode

0

アクセスはバッチまたは出力パラメータ内の複数のステートメントの実行をサポートしていないため、AccessではSQL Serverよりも複雑です。

MSDN documentationによれば、RowUpdatedイベントのハンドラを追加する必要があります。

しかし、これに慣れる前に、トランザクション内で挿入コードをラップしてから、トランザクション内でselect @@ identityメソッドを実行します。動作しないかもしれないが、ショットの価値がある。

+0

トランザクションを使用する必要はありません。同じ接続オブジェクトを使用する限り、@@ identityを使用して最後に挿入されたIDを取得します。 –

0

私の知る限り、MS Accessには最後に追加された行を取得する機能がありません。

実際には、私は自動増分列(通常は主キーです)を作成します。私はテーブル内の最後の行を取得することを望むとき、私はこのクエリを実行します。

SELECT TOP 1 * FROM [Table] ORDER BY [IdColumn] DESC 

それは単に逆の順序でID列でテーブルの行をソートし、本当に最初のものを(取ります表の最後の行)。

+0

アクセスサポートは@@ identityを使用します。したがって、select @@ identityを使用して投稿されたソリューションは正常に動作します。はい、この機能は組み込まれており、あなたの答えは間違っています。 –

関連する問題