You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多选列表框选中项删除关联记录报错:运行时错误3075

解决Access列表框多选删除时的3075语法错误

错误原因分析

出现「运行时错误3075」的核心原因有两个:

  • 列表框列索引错误:Access列表框的Column属性从0开始计数,你代码中用Column(2),如果ParcelID是列表框显示的第一列,实际应该是Column(0),这会导致取到空值,最终SQL语句变成[ParcelID]= ,因缺少运算符/值引发语法错误。
  • 数据类型未匹配:如果ParcelID是文本类型,SQL语句中未用单引号包裹值会触发语法错误;如果是数字类型,空值同样会引发问题。

修正后的代码方案

方案1:修正列索引+适配数据类型(单条删除)

先确认ParcelID在列表框中的列索引(从0开始),再根据数据类型调整SQL语句:

Private Sub deleteListItem_Click()
    Dim Var As Variant
    Dim parcelID As Variant
    
    If Me.listScanned.ItemsSelected.Count > 0 Then
        For Each Var In Me.listScanned.ItemsSelected
            ' 替换Column(0)为实际的ParcelID列索引(从0开始)
            parcelID = Me.listScanned.Column(0, Var)
            
            ' 根据ParcelID的数据类型选择对应SQL
            If IsNumeric(parcelID) Then
                ' 数字类型
                CurrentDb.Execute "DELETE * FROM TempDelivery WHERE [ParcelID] = " & parcelID
            Else
                ' 文本类型,用单引号包裹,同时转义值中的单引号
                CurrentDb.Execute "DELETE * FROM TempDelivery WHERE [ParcelID] = '" & Replace(parcelID, "'", "''") & "'"
            End If
        Next
        
        Me.listScanned.Requery
    End If
End Sub

方案2:用IN子句批量删除(更高效)

多选时循环单删效率偏低,可将选中的ParcelID拼接成IN条件,一次性完成删除:

Private Sub deleteListItem_Click()
    Dim Var As Variant
    Dim idList As String
    Dim parcelID As Variant
    
    If Me.listScanned.ItemsSelected.Count = 0 Then Exit Sub
    
    For Each Var In Me.listScanned.ItemsSelected
        parcelID = Me.listScanned.Column(0, Var)
        ' 根据数据类型处理拼接逻辑
        If IsNumeric(parcelID) Then
            idList = idList & "," & parcelID
        Else
            idList = idList & ",'" & Replace(parcelID, "'", "''") & "'"
        End If
    Next
    
    ' 去除开头多余的逗号
    idList = Mid(idList, 2)
    
    ' 执行批量删除
    CurrentDb.Execute "DELETE * FROM TempDelivery WHERE [ParcelID] IN (" & idList & ")"
    
    Me.listScanned.Requery
End Sub

关键注意事项

  • 确认列表框的ColumnCount和ColumnWidths设置,确保ParcelID对应的列索引正确,可通过调试查看Me.listScanned.Column(索引, Var)的值是否符合预期。
  • 文本类型的ParcelID必须用单引号包裹,且要通过Replace转义值中可能存在的单引号,避免SQL语法错误和注入风险。

内容的提问来源于stack exchange,提问作者Branco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 05:03:20