0

Access 2007 を使用しており、mySQL データベースにリンクされたテーブルがいくつかあります。DAO を使用してレコードを mySQL リンク テーブルに挿入し、Select @@identity を使用して挿入された PK を取得しようとしていますが、その選択は 0 を返しています。

  Dim sql As String

  Dim oDB As Database
  Set oDB = CurrentDb 

  sql = "INSERT INTO Quotes ( CustomerID ) SELECT 1 AS Expr1;" 

  oDB.Execute sql 

  If oDB.RecordsAffected <> 1 Then 
    MsgBox "cannot create new quote"
    Exit Function
  End If

  Dim rsNewID As DAO.Recordset
  Set rsNewID = oDB.OpenRecordset("SELECT @@IDENTITY")  ' Create a recordset and SELECT the new Identity

  Dim intNewID As Long
  intNewID = rsNewID(0).Value ' Store the value of the new identity in variable intNewID
  'This value is 0, why?

このような別の質問を見たことがありますが、満足のいく回答が得られていません

4

3 に答える 3

1

fredrik は、mySQL ステートメントについて、部分的な評価を得ています。私は DAO を使用しているため、ステートメントは JET エンジンによって処理され、このステートメントはサポートされていないことに注意してください。ただし、これを機能させるには、Access でパススルー クエリとして実行する必要があります。fredrik の select ステートメントを使用してパススルー クエリを作成すると、うまくいきました。この Access パススルー クエリを DAO コードから呼び出したところ、うまくいきました。

于 2009-04-11T17:46:18.047 に答える
0

私はmysqlを使用していません。だから、私がmysqlについて言ったことを翻訳してください。

CustomerID は ID 列ですか (つまり、独自に ID を生成しますか)?
その場合は、最後に生成された ID を返す関数を使用します。

@@Identity 関数は、人々が SQL Server で使用するものです。私はmysqlで同等のものを知りません。これ
を見る

上記のコードを見ると、2 番目のレコードセットを開く必要はありません。はrsNewID1、最後に挿入された ID を取得するのに役立ちます。

お役に立てれば。

于 2009-04-11T06:03:10.327 に答える