【发布时间】:2020-09-24 12:04:44
【问题描述】:
我是 MS Access 的新手,在这里找不到问题。我的代码从一开始就工作,但现在我在尝试删除数据记录时不断收到此错误。这是我的代码:
Private Sub cmdLoeschen_Click()
If MsgBoxYesNo(CancelOrderConfirmPrompt) Then
If [Prozessspezifikationen].Delete(Me![Prozessspezifikation ID]) Then
MsgBoxOKOnly CancelOrderSuccess
eh.TryToGoToRecord acNewRec
Else
MsgBoxOKOnly CancelOrderFailure
End If
End If
End Sub
使用的删除功能:
Function Delete(ProzessspezifikationID As Long) As Boolean
Dim rsw As New RecordsetWrapper
If rsw.OpenRecordset("Prozessspezifikationen", "[Prozessspezifikation ID] = " & ProzessspezifikationID) Then
Delete = rsw.Delete
End If
End Function
地点:
-
[Prozessspezifikation ID]是基础表中的主键 -
[Prozessspezifikationen]是一个自增长整数 - 该表包含多个外键
我使用以下查询来获取公式中所需的数据:
SELECT Prozessspezifikationen.*, Products.Bezeichnung, Products.ZeichnungsNr
FROM Products
INNER JOIN Prozessspezifikationen
ON Products.ArtikelID = Prozessspezifikationen.ArtikelID;
由于我是 MS Access 的新手,而且它似乎不是语法错误,所以我有点迷茫。
RecordsetWrapper(摘录):
Option Compare Database
Option Explicit
Private m_rs As DAO.Recordset2
Public Function GetRecordsetClone(rs As DAO.Recordset2) As DAO.Recordset2
If Not m_rs Is Nothing Then
Debug.Assert False
Else
Set m_rs = rs.Clone
Set GetRecordsetClone = m_rs
End If
End Function
OpenRecordset 函数
Public Function OpenRecordset(Domain As String, _
Optional Criteria As String = "1=1", _
Optional OrderBy As String, _
Optional RecordsetType As DAO.RecordsetTypeEnum = dbOpenDynaset, _
Optional RecordsetOptions As DAO.RecordsetOptionEnum _
) As Boolean
If Not m_rs Is Nothing Then
CloseRecordset
End If
Dim strSQL As String
strSQL = "SELECT * FROM [" & Domain & "] WHERE " & Criteria
If OrderBy <> "" Then
strSQL = strSQL & " ORDER BY " & OrderBy
End If
On Error GoTo ErrorHandler
Set m_rs = CurrentDb.OpenRecordset(strSQL, RecordsetType, RecordsetOptions)
OpenRecordset = True
Done:
Exit Function
ErrorHandler:
Debug.Assert m_rs Is Nothing
If eh.LogError("RecordsetWrapper.OpenRecordset", "strSQL = " & Chr(34) & strSQL & Chr(34)) Then Resume
End Function
删除函数
Public Function Delete() As Boolean
On Error GoTo ErrorHandler
m_rs.Delete
Delete = True
Done:
Exit Function
ErrorHandler:
If eh.LogError("RecordsetWrapper.Delete") Then Resume
End Function
关闭记录集函数
Public Function CloseRecordset() As Boolean
On Error GoTo ErrorHandler
m_rs.Close
CloseRecordset = True
Done:
Set m_rs = Nothing
Exit Function
ErrorHandler:
If eh.LogError("RecordsetWrapper.CloseRecordset") Then Resume
End Function
Public Property Get Recordset() As DAO.Recordset2
Set Recordset = m_rs
End Property
Private Sub Class_Terminate()
If Not m_rs Is Nothing Then
m_rs.Close
Set m_rs = Nothing
End If
End Sub
我希望你能帮助我。如果需要,我可以为您提供更多信息。
【问题讨论】:
-
您遇到的错误是什么?
-
标题中写着:Access Run-Time error-2465。找不到您的表达式中引用的字段“1”。
-
如此复杂的代码。 :( 您至少应该指定触发错误的确切行,以及导致错误的调用堆栈。
-
@Andre
If [Prozessspezifikationen].Delete(Me![Prozessspezifikation ID]) Then正在触发。调用堆栈中没有其他内容(它甚至不调用删除方法) -
Debugging VBA Code。尝试为相关对象添加调试监视。目前还不清楚,
[Prozessspezifikationen]实际上是什么对象。您代码中的 Delete() 方法没有参数,但您使用 ID 调用它。