Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

[5分]涉及外键记录的删除问题

yuxican  发表于:2014-12-07 16:31:24  
复制

On Error GoTo ErrorHandler
    Dim strMsg1, strMsg2 As String
    Dim intContactsCount As Integer

    DoCmd.SetWarnings False
    If Me.sfrList.Form.CurrentRecord < 1 Then
        Exit Sub
    End If
    
    Me.sfrList.SetFocus
    RunCommand acCmdSelectRecord

    strMsg1 = "确定要刪除[" & Me.sfrList![客户] & "]吗?"
    If MsgBoxex(strMsg1, vbQuestion + vbOKCancel) = vbCancel Then
        Exit Sub
    End If

    intContactsCount = DCount("[联系人ID]", "[TblClientContacts]", "[客户ID]='" & Me.sfrList![客户ID] & "'")

    If intContactsCount > 0 Then
        strMsg2 = "客户[" & Me.sfrList![客户] & "]包括[" & intContactsCount & "]个联系人,确定将他们都删除吗?"
        If MsgBoxex(strMsg2, vbQuestion + vbOKCancel) = vbCancel Then
            Exit Sub
        Else
            '            DAORunSQL ("DELETE FROM [TblClientContacts] WHERE [客户ID]=" & SQLText(Me.sfrList![客户ID]))
            '            DAORunSQL ("DELETE FROM [TblClient] WHERE [客户ID]=" & SQLText(Me.sfrList![客户ID]))
            DoCmd.RunSQL "DELETE FROM [TblClientContacts] WHERE [客户ID]=" & SQLText(Me.sfrList![客户ID])
            DoCmd.RunSQL "DELETE FROM [TblClient] WHERE [客户ID]=" & SQLText(Me.sfrList![客户ID])
        End If
    Else
        'DAORunSQL ("DELETE FROM [TblClient] WHERE [客户ID]=" & SQLText(Me.sfrList![客户ID]))
        DoCmd.RunSQL "DELETE FROM [TblClient] WHERE [客户ID]=" & SQLText(Me.sfrList![客户ID])
    End If
    Me.RefreshDataList
    Me.btnDelete.SetFocus
    
      

EXITHERE:
    DoCmd.SetWarnings True

    Exit Sub

ErrorHandler:
    MsgBoxex Err.Description, vbCritical
    Resume EXITHERE
End Sub
上面是一个删除按钮的代码,一个“客户”表,一个“联系人”表,客户和联系人分是都可能与“订单”表有一对多的关系。
碰到的问题:按删除后,程序会将客户的联系人删除(只能删除掉那此不存在于订单表中的,且不会出错所以错误处理语句捕不到),程序同时还会试着删除客户,也因客户在其它表中有关联记录,删不掉,也无提示。结果是此客户下的部分联系人被删除掉了,其余部分删不掉,用户也不知道原因。
想实现的效果:1)在执行删除动作之前检查联系人和/或客户是否在其它表中有相关记录,给出提示有关联的记录将无法删除;或者 2)当出现删除不能彻底删除所有期望的记录时就一条都不要删,给出提示。
谢谢!

 

Top
煮江品茶 发表于:2014-12-07 17:34:27

多此一举

保留客户与联系人,对其他数据没球影响,删它干嘛?



yuxican 发表于:2014-12-08 12:27:14

1。 煮江品茶 所言所言差矣,因无法保证每个用户都准确操作每一个步骤,各种情况都需考虑到。

所需情形会在这种情况下出现:某用户在用户清单中错误增加了一个“王二麻子”的客户,因此想把它删除掉,但点删除时他却选中了“李四”,叫我如何是好?

2。 在此发贴,旨在解决问题并向知者取经,学习技术,功能必要性并非唯一因素,而请各位指点实现方法更是重点。

谢谢



煮江品茶 发表于:2014-12-08 14:38:45

当王二麻子与李四什么事情没干时,删不删除王二麻子和李四什么影响也没有。当他们干了点什么的时候,谁干了点事,谁就不能被删除。至于发现王二麻子错干了李四的事情,修改干的事情而已,与王二麻子和李四的存在与否无关。

为什么不轻易选择删除王二麻子和李四呢?除了没必要删除外,最重要的是王二麻子和李四是重要的基础资料,这哥俩可能会干很多事情,这些事情构成了系统的大量动态数据。因此,一般不会开放给所有用户权限来对基础资料进行删除的操作。如果要对数据进行整理,也只能由管理员来进行,这样才能保证数据的安全。



YANGQINGHUA 发表于:2014-12-08 14:57:01

客户表和订单表是一对多关系

客户表和联系人表是一对多关系

联系人表和订单表没必要有任何关联



yuxican 发表于:2014-12-13 16:59:17

感谢各位的热心回复,排除这个功能的合理性外,鄙人在此寻求实现此功能的方法,求知识啊!

煮江品茶  所复有道理,若能告知实现我所需功能的方法就更加感激了。

YANGQINGHUA 所说可可操作,只是我要把订单表中的联系人ID都更换为联系人名字了。

无论如何,感谢!



总记录:5篇  页次:1/1 9 1 :