1

データベースのバックエンド MS Access 2003 を MySQL 5.1 にアップグレードしました。バックエンド MYSQL 5.1 データベースを ODBC (MySQL ODBC 5.1 Driver) 経由で MS Access フロントエンド .mdb にリンクしています。

DAO レコードセットを使用しています。.AddNew メソッドを使用して新しいレコードを追加し、使用して更新します

.Update メソッド; 更新ステートメントの後、自動番号フィールドを変数にフェッチして、

「実行時エラー '-2147352567 (80020009)' 現在のレコードがありません」エラー。

ただし、MS-Access 2003 バックエンドを持つ以前のバージョンでも同じコードが機能します。

'new 
if bNew  = true then
    lngInvoiceID = 0
else 'edit , 
    lngInvoiceID = Forms("frmInvoice").[tbInvoiceID].value
end if


Set rstAux = dbsLocal.OpenRecordset("Select * from tblElectronicInvoices where
eipID = " & lngInvoiceID, dbOpenDynaset, dbSeeChanges)

rstAux.AddNew

rstAux.Update
lngInvoiceID = Nz(rstAux.Fields("eipID"), 0)

'自動番号フィールドである eipID を取得しようとすると、現在のレコードがありませんというエラーが発生します。

以前の MS Access コードには、フロントエンドへのバックエンド リンク テーブルへのアクセスがあります。dbSeeChanges のオプションが指定されておらず、update ステートメントの前に、autonumber フィールドの新しい ID を取得できました。

4

1 に答える 1

1

数年前、バックエンド データベースを Access から MySQL に移動した後 (フロントエンドは Access のまま)、同じ状況に遭遇しました。次の回避策を使用して終了しました。

Dim cdb As DAO.Database, qdf As DAO.QueryDef, rst As DAO.Recordset
Dim lngCustomerID As Long
Set cdb = CurrentDb

' create pass-through query to insert new row and then retrieve the IDENTITY value
Set qdf = cdb.CreateQueryDef("")
qdf.Connect = cdb.TableDefs("customers").Connect  ' get .Connect from existing linked table
qdf.ReturnsRecords = False
qdf.SQL = "INSERT INTO customers (customerName) VALUES ('GordCo')"
qdf.Execute
qdf.ReturnsRecords = True
qdf.SQL = "SELECT LAST_INSERT_ID()"
Set rst = qdf.OpenRecordset(dbOpenSnapshot)
lngCustomerID = rst(0).Value
Debug.Print "LAST_INSERT_ID() returned " & lngCustomerID
rst.Close
Set rst = Nothing
Set qdf = Nothing
于 2013-10-12T15:37:02.560 に答える