设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: laiguiyou
打印 上一主题 下一主题

[Access本身] 如何把下面这段代码作为函数来处理?

[复制链接]
11#
 楼主| 发表于 2007-8-15 19:14:08 | 只看该作者
自已顶.....

点击这里给我发消息

12#
发表于 2007-8-15 23:23:05 | 只看该作者
斗胆说几句,说错了不要见怪
首先,第一行的声明太长了!!!
而且你把从 a 到 ee 全部声明为了 Variant 类型了,如果你想把它们全部声明为 Single,这样声明是错误的。
第二,代码不仅繁琐,还有逻辑问题,看看红色部分。
    If Me.样品单 = False Then
        ……
    Else
        If [单据类型] = "CH" Then
                ……
            If Me.样品单 = True Then
                ……
            ElseIf Me.样品单 = False Then            '这里的样品单还会有False的吗?
                ……
            End If
            ……
        ElseIf [单据类型] = "LL1" Then
            ……
        End If
            ……
    End If
第三,表肯定设计得不好,如能巧妙地设计表和查询,是不用很多代码的。
第四,有很多重复的代码,就考虑使用循环,for...next,do...loop,或使用记录集。
第五,你应该取出代码的一小部分来请教别人,能说明问题就行了,这样的代码会把人吓跑的。
13#
 楼主| 发表于 2007-8-16 08:20:55 | 只看该作者
谢谢大宝的指教,请问,如果把它们全部声明为 Single,为什么会错误,应该如何声明才合理
14#
发表于 2007-8-16 09:19:08 | 只看该作者
代码流程的逻辑性您必须重新梳理一下。由于我对你的流程并不是特别了解,因此给您一个建议:
1、就象12楼说的:me.样品单 问题。
2、不是先读出所有的“样品计件参数”表里的值再去和目前的窗体数据去匹配,而是根据您的参数再用dlookup函数去读取相应的数据。幸好您的“样品计件参数”表里只有近30条记录,如果记录多了,同时使用的人多了,还不把服务器累死了?
3、在“样品计件参数”表中增加“部门”字段,将“订单量”字段分解成“上区间”和“下区间”两个字段。(通过字段类型及窗体代码的控制,也能保证区间输入不出大问题,否则如果操作员给你输入一个"10--8"甚至胡乱输入几个汉字程序竟然也允许通过,那不笑死人了?)这样您只需:
Me.单价2 = pr2 *  DLookup("倍数", "样品计件参数", '" & Me.订单量 & ">=[上区间] and " & Me.订单量 & "<=[下区间]  and [部门]=" & me.部门 & "'")

[ 本帖最后由 hi-wzj 于 2007-8-16 09:25 编辑 ]
15#
 楼主| 发表于 2007-8-16 09:34:19 | 只看该作者
谢谢hi-wzj的好建议,我试试先。应该会很好的
16#
 楼主| 发表于 2007-8-16 10:22:59 | 只看该作者
谢谢hi-wzj的好建议,我试试先。应该会很好的
17#
 楼主| 发表于 2007-8-16 10:23:42 | 只看该作者
Me.单价2 = pr2 *  DLookup("倍数", "样品计件参数", '" & Me.订单量 & ">=[上区间] and " & Me.订单量 & "<=[下区间]  and [部门]=" & me.部门 & "'")
这句好象有问题
18#
发表于 2007-8-16 12:04:58 | 只看该作者
你直接建一个报价倍数表不就完了吗
部门  单据类型 工序  订货上限  下限 倍数
19#
 楼主| 发表于 2007-8-16 13:31:28 | 只看该作者
是的,我已建好,代码是少了很多只用这个就可以了
Dim pr As Currency
    Dim pr2 As Currency

    Me.单价 = Nz(DLookup(Me.工序名称, "产品表查询", "[产品编号]=" & 产品编号.Value), 0)




    If [单据类型] = "CH" Then



        If Me.样品单 = True Then

            pr = Nz(DLookup(Me.工序名称, "产品表查询", "[产品编号]=" & 产品编号.Value), 0)
            pr2 = Nz(DLookup("彩绘单价", "产品表查询", "[产品编号]=" & 产品编号.Value), 0)


            If Me.部门 = 8 Then

                Me.单价2 = pr2 * DLookup("倍数", "样品计件参数", "[上区间]<= " & Me.订单量 & " And [下区间]>=" & Me.订单量 & " And [部门] = " & Me.部门 & "")

            Else
                Me.单价2 = pr * DLookup("倍数", "样品计件参数", "[上区间]<= " & Me.订单量 & " And [下区间]>=" & Me.订单量 & " And [部门] = " & Me.部门 & "")
            End If
        End If

    End If

但更新单价不能一次完成,须手工一个一个更新。不会用记录集。
现在是放在单价2的获得焦点事件中,如果用一个按钮点一下就好了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-16 09:39 , Processed in 0.159275 second(s), 31 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表