2009-04-11 5 views
0

私はAccess 2007を使用しており、いくつかのリンクテーブルをmySQLデータベースに持っています。私は、MySQLがテーブルをリンクにレコードを挿入するためにDAOを使用し、Select @@アイデンティティを使用して挿入PKを取得しようとしているが、その選択は、私は満足していないanother question like this,を見てきました0@@ Identityを選択して、アクセス先のリンクテーブルを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? 

戻っているのです私のために答えた

答えて

1

フレドリックは、MySQL文に対して、部分的なクレジットを取得します。私はDAOを使用しているので、ステートメントはJETエンジンによって処理され、このステートメントをサポートしていないことに注意することが重要です。これは、Accessでのクエスチョンスルーとして実行する必要があります。私がfredrikのselectステートメントを使ってクエリを実行した後、そのトリックが実行されました。私は私のDAOコードからこのアクセスパススルークエリを呼び出し、それは働いた。

+0

うれしいです! :) – fredrik

0

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

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

@@ Identity関数は、SQL Serverで人々が使用するものです。私はmysqlで同等のことを知っていません。
this

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

これが役に立ちます。

2

SELECT LAST_INSERT_ID()

+0

何らかの理由で、これがAccessから機能していません。 PassThroughクエリでない場合、Accessでクエリでバックエンド関数を使用することはできません。それは私に "Last_Insert_ID()"機能を見つけることができないと伝えます –

+1

あなたはパススルーとして試しましたか? –

関連する問題