私のvb.netアプリケーションからmsaccess dbにデータを挿入しています。msaccessクエリで最後に挿入されたレコードを取得する方法
テーブルに最後に挿入されたレコードを追加する方法が混乱します。 MS-SQLではそのために@@ IDENTITYを取得しますが、MSAccessでは私のために働いていませんでした。
最後に挿入されたレコードをテーブルに追加するにはどうすればよいですか?
私のvb.netアプリケーションからmsaccess dbにデータを挿入しています。msaccessクエリで最後に挿入されたレコードを取得する方法
テーブルに最後に挿入されたレコードを追加する方法が混乱します。 MS-SQLではそのために@@ IDENTITYを取得しますが、MSAccessでは私のために働いていませんでした。
最後に挿入されたレコードをテーブルに追加するにはどうすればよいですか?
例:
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)
それはテーブルの上に自動インクリメントキーがあることを必要とします。
数字の(自動インクリメントの場合もある)プライマリキーを使用することは常に良い方法です。その後、常にMAXを選択することができます。これは挿入された最新のレコードです。
hmmは面白そうですが、2人のユーザーがselectステートメントを実行する前にレコードを同時に挿入するとどうなるでしょうか... – KoolKabin
自動増分のプライマリキーは一意ではなく、順序が重要な場合は、それで、あなたは、複数のユーザーのためのあらゆる種類の興味深い作業に入っています。 – Fionnuala
@KoolKabin:レコードを作成したユーザー名を格納します。したがって、「作成者」が現在のユーザーと等しいMAXを取得できます。理想的ではないが、より良い。理想的なソリューションはSQL Server Expressに移行することです(無料です)。 – HardCode
アクセスはバッチまたは出力パラメータ内の複数のステートメントの実行をサポートしていないため、AccessではSQL Serverよりも複雑です。
MSDN documentationによれば、RowUpdatedイベントのハンドラを追加する必要があります。
しかし、これに慣れる前に、トランザクション内で挿入コードをラップしてから、トランザクション内でselect @@ identityメソッドを実行します。動作しないかもしれないが、ショットの価値がある。
トランザクションを使用する必要はありません。同じ接続オブジェクトを使用する限り、@@ identityを使用して最後に挿入されたIDを取得します。 –
私の知る限り、MS Accessには最後に追加された行を取得する機能がありません。
実際には、私は自動増分列(通常は主キーです)を作成します。私はテーブル内の最後の行を取得することを望むとき、私はこのクエリを実行します。
SELECT TOP 1 * FROM [Table] ORDER BY [IdColumn] DESC
それは単に逆の順序でID列でテーブルの行をソートし、本当に最初のものを(取ります表の最後の行)。
アクセスサポートは@@ identityを使用します。したがって、select @@ identityを使用して投稿されたソリューションは正常に動作します。はい、この機能は組み込まれており、あなたの答えは間違っています。 –
どういう意味ですか?オブジェクトを作成してそれに対してクエリを実行すると、@@ 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