0

クエリで次のようなことをしようとしています。

Dim rs As RecordSet
Dim NewPrimaryKey as Long

Set rs = Currentdb.OpenRecordset("SELECT * FROM MyTable WHERE MyPrimaryKey Is Null;")

With rs
      .AddNew
      NewPrimaryKey = !MyPrimaryKey
      !DateValue = Now()
      ...
      .Update
End With

JETエンジンを使用してMSAccess2003で実行できるクエリを使用する方法についてのポインタをいただければ幸いです。

4

1 に答える 1

2

2つのSQLステートメントを使用して、私が望むことを達成できます。最初にINSERT。次に、「SELECT @@ Identity」を選択して、最後に追加された自動番号値を取得します。両方のSQLステートメントとのデータベース接続にオブジェクト変数を使用します。

Dim db As DAO.Database
Dim NewPrimaryKey As Long
Dim strInsert As String

strInsert = "INSERT INTO MyTable ([DateValue])" & vbCrLf & _
    "VALUES (Now());"
Set db = CurrentDb
db.Execute strInsert, dbFailOnError
NewPrimaryKey = db.OpenRecordset("SELECT @@Identity")(0)
Debug.Print NewPrimaryKey
Set db = Nothing

予約語であるため、フィールド名DateValueを角かっこで囲みました。

編集:1つのSQLステートメントで複数のレコードを挿入する場合でも、SELECT@@Identityは最後の自動番号を提供します。これは、その接続インスタンスを介して実行される挿入の最後の自動番号です。また、使用される自動番号のシーケンスは取得されません。最後のものだけ。

strInsert = "INSERT INTO MyTable3 ([some_text])" & vbCrLf & _
    "SELECT TOP 3 foo_text FROM tblFoo" & vbCrLf & _
    "WHERE foo_text Is Not Null ORDER BY foo_text;"
于 2011-07-26T06:29:30.240 に答える