Office中国论坛/Access中国论坛

标题: 大佬帮忙转换下代码~ [打印本页]

作者: arnonho    时间: 2022-6-6 12:14
标题: 大佬帮忙转换下代码~
If e.DataCol.Name = "客户" OrElse e.DataCol.Name = "商品名称" Then '如果内容发生变动的是品名列
    If e.DataRow.isnull("客户") OrElse e.DataRow.isnull("商品名称") Then '如果新值是空白,也就是品名列的内容为空
        e.DataRow("单价") = Nothing '那么清空此行单价列的内容
    Else
        Dim dr As DataRow
        '否则在产品表查找同名的产品行,将找到的行赋值给变量dr
        dr = DataTables("客户").Find("[客户名称] = '" & e.DataRow("客户") & "'")
        If dr IsNot Nothing Then '如果找到了同名的产品行,也就是dr不是Nothing
            Dim dr2 As DataRow = DataTables("商品").Find("[商品名称] = '" & e.DataRow("商品名称") & "'")
            If dr2 IsNot Nothing Then
                e.DataRow("单价") = dr2(dr("售价级别"))
            End If
        End If
    End If
End If

If e.DataCol.Name = "商品名称" Then
    If e.DataRow.isnull("商品名称") Then
        e.DataRow("单价") = Nothing
    Else
        Dim dr2 As DataRow = DataTables("商品").Find("[商品名称] = '" & e.DataRow("商品名称") & "'")
        If dr2 IsNot Nothing Then
            e.DataRow("规格") = dr2("规格")
        End If
    End If
End If


以上是我在别的软件的VB代码,能否帮忙转成ACCESS用的?
作者: roych    时间: 2022-6-6 13:41
1、Access没有DataTables控件,需要改成窗体,如果是子窗体,改成Me.子窗体名称。
2、既然没有DataTables控件,自然也没有对应的DataRow子集了。如果需要逐行搜索,需要改成DAO.Recordset,然后用FindFirst方法处理;如果不需要逐行查找,也可以改成SQL条件查询。
3、VBA也没有OrElse,改成Or;Nothing不太记得有没有了,如果没有,改成 IsNull(Me.控件名)。
4、建议先把Access窗体VBA翻一遍再回头看这个事情。别做伸手党。
作者: arnonho    时间: 2022-6-6 13:46
roych 发表于 2022-6-6 13:41
1、Access没有DataTables控件,需要改成窗体,如果是子窗体,改成Me.子窗体名称。
2、既然没有DataTables ...

谢谢,刚刚接触,并不是想做伸手党,多谢你的建议!
作者: worryd1    时间: 2023-11-17 10:43
学习了
作者: FXYDBA    时间: 2024-1-26 09:34
新手还没找到门在哪,也不敢问,怕别人说是伸手党




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3