Office中国论坛/Access中国论坛

标题: 请教一个关于left/right函数格式的问题,谢谢!! [打印本页]

作者: howze    时间: 2009-7-15 20:27
标题: 请教一个关于left/right函数格式的问题,谢谢!!
本帖最后由 howze 于 2009-7-15 22:41 编辑

先看图说话
[attach]38882[/attach]
小弟想根据积压时间,将表里的说自动划分,然后自动算出奖金
这步现在我已经实现了,但是问题在于:
不同的代码,奖金的比率不同,比如1开头的代码,奖金比率分别是0.1、0.2、0.3
2开头代码的比率是0.2、0.3、0.4
因此我的代码如下:
Private Sub cmdCalculate_Click()
    Dim strSQL As String
   
    If Not IsNull(Me.cboTableName) Then
   
If Left(代码, 1) = 1 Then
    strSQL = "UPDATE " & Me.cboTableName & " INNER JOIN 计算标准1 ON [@Table].积压时间 = 计算标准1.积压时间 SET [@Table].划分 = [划分标准],[@Table].奖金 =[@Table].单价*[比率];"
    strSQL = Replace(strSQL, "@Table", Me.cboTableName)
   
ElseIf Left(代码, 1) = 2 Then
    strSQL = "UPDATE " & Me.cboTableName & " INNER JOIN 计算标准2 ON [@Table].积压时间 = 计算标准2.积压时间 SET [@Table].划分 = [划分标准],[@Table].奖金 =[@Table].单价*[比率];"
    strSQL = Replace(strSQL, "@Table", Me.cboTableName)
    End If
   
Debug.Print strSQL
    CurrentProject.Connection.Execute strSQL
    Me.fsubQuery.Requery
    MsgBox "成功"
End If
End Sub
可是这样以来就总是提示出错,麻烦各位大哥给看看吧,是不是我的left函数的格式不对?
谢谢了!!!
作者: Ombre    时间: 2009-7-15 21:24
Private Sub cmdCalculate_Click()
    Dim strSQL1, strsql2 As String
   
   
    If IsNull(Me.cboTableName) Then Exit Sub
   
     strSQL1 = " UPDATE " & Me.cboTableName & " SET " & _
             " 划分 = Switch([积压时间] Like '*1-10*','D1-D2',[积压时间] Like '*11-20*','D2-D3',[积压时间] Like '*21-30*','D3-D4')," & _
             " 奖金 = Switch([积压时间] Like '*1-10*',[单价]*0.2,[积压时间] Like '*11-20*',[单价]*0.3,[积压时间] Like '*21-30*',[单价]*0.4) where " & "Left([代码], 1) =1"
    strsql2 = " UPDATE " & Me.cboTableName & " SET " & _
             " 划分 = Switch([积压时间] Like '*1-10*','D1-D2',[积压时间] Like '*11-20*','D2-D3',[积压时间] Like '*21-30*','D3-D4')," & _
             " 奖金 = Switch([积压时间] Like '*1-10*',[单价]*0.2,[积压时间] Like '*11-20*',[单价]*0.3,[积压时间] Like '*21-30*',[单价]*0.4) where " & "Left([代码], 1) =2"

   
    Debug.Print strSQL1
   
  Debug.Print strsql2

    CurrentDb.Execute strSQL1
        CurrentDb.Execute strsql2
    Me.fsubQuery.Requery
   
    Me.txtSumOfPrice1 = DSum("[单价]", Me.cboTableName, "[积压时间] Like '*1-10*'")
    Me.txtSumOfPrice2 = DSum("[单价]", Me.cboTableName, "[积压时间] Like '*11-20*'")
    Me.txtSumOfPrice3 = DSum("[单价]", Me.cboTableName, "[积压时间] Like '*21-30*'")
    Me.txtSumOfBonus1 = DSum("[奖金]", Me.cboTableName, "[积压时间] Like '*1-10*'")
    Me.txtSumOfBonus2 = DSum("[奖金]", Me.cboTableName, "[积压时间] Like '*11-20*'")
    Me.txtSumOfBonus3 = DSum("[奖金]", Me.cboTableName, "[积压时间] Like '*21-30*'")

End Sub

作者: howze    时间: 2009-7-15 21:57
很感谢楼上的帮忙
这是换了一种方法来实现了
但是能不能用if +left的方法来实现呢?
谢谢
作者: howze    时间: 2009-7-15 22:41
楼上大哥,我更新了一下,麻烦能不能再看看?
谢谢
作者: Ombre    时间: 2009-7-15 22:47
用if应该就麻烦了
只能用ADO取数据来循环了
作者: howze    时间: 2009-7-15 22:48
用if应该就麻烦了
只能用ADO取数据来循环了
Ombre 发表于 2009-7-15 22:47


那代码应该如何写呢?
麻烦指点一下
万分感谢!!!
作者: Ombre    时间: 2009-7-15 22:55
dim rs as adodb.recordset
set rs= new adodb.recordset
sql="select * from " & Me.cboTableName
rs.open sql,currentproject.connection.connectionstring,1,1
do until rs.eof
if left(rs(0),1)=1 then
docmd.runsql "update......."
elseif left(rs(0),1)=2
docmd.runsql "update........"
endif
loop
以上没验证
作者: howze    时间: 2009-7-15 23:04
请教一下
为什么rs() 括号里要是0呢?
还有connectionstring,1,1
这里的1,1是什么意思?
麻烦指点一下
谢谢
作者: Ombre    时间: 2009-7-15 23:20
因为是select *
rs(0) 就是说第一个字段 rs(1)就是第2个字段...也可以用rs("字段名")来表示
两个1常量 分别表示adOpenDynamic,adLockBatchOptimistic
作者: howze    时间: 2009-7-15 23:29
万分感谢,我先试试
谢谢了!!!
作者: howze    时间: 2009-7-15 23:37
还是不成功
算的结果不对
而且那个msgbox会一直弹
关都关不掉
郁闷啊
作者: howze    时间: 2009-7-16 16:53
还是没解决
再顶一下
作者: Ombre    时间: 2009-7-16 17:26
我看你的附件不是已经解决了吗?
作者: howze    时间: 2009-7-16 21:05
我看你的附件不是已经解决了吗?
Ombre 发表于 2009-7-16 17:26


附件没有解决啊
不相信你试一下
我把一些代码加成注释了
你去掉'试试
肯定不行




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