设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 4795|回复: 13
打印 上一主题 下一主题

[Access本身] 请教一个关于left/right函数格式的问题,谢谢!!

[复制链接]
跳转到指定楼层
1#
发表于 2009-7-15 20:27:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 howze 于 2009-7-15 22:41 编辑

先看图说话

小弟想根据积压时间,将表里的说自动划分,然后自动算出奖金
这步现在我已经实现了,但是问题在于:
不同的代码,奖金的比率不同,比如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函数的格式不对?
谢谢了!!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2009-7-15 21:24:27 | 只看该作者
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
3#
 楼主| 发表于 2009-7-15 21:57:02 | 只看该作者
很感谢楼上的帮忙
这是换了一种方法来实现了
但是能不能用if +left的方法来实现呢?
谢谢
4#
 楼主| 发表于 2009-7-15 22:41:54 | 只看该作者
楼上大哥,我更新了一下,麻烦能不能再看看?
谢谢
5#
发表于 2009-7-15 22:47:13 | 只看该作者
用if应该就麻烦了
只能用ADO取数据来循环了
6#
 楼主| 发表于 2009-7-15 22:48:38 | 只看该作者
用if应该就麻烦了
只能用ADO取数据来循环了
Ombre 发表于 2009-7-15 22:47


那代码应该如何写呢?
麻烦指点一下
万分感谢!!!
7#
发表于 2009-7-15 22:55:27 | 只看该作者
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
以上没验证
8#
 楼主| 发表于 2009-7-15 23:04:58 | 只看该作者
请教一下
为什么rs() 括号里要是0呢?
还有connectionstring,1,1
这里的1,1是什么意思?
麻烦指点一下
谢谢
9#
发表于 2009-7-15 23:20:45 | 只看该作者
因为是select *
rs(0) 就是说第一个字段 rs(1)就是第2个字段...也可以用rs("字段名")来表示
两个1常量 分别表示adOpenDynamic,adLockBatchOptimistic
10#
 楼主| 发表于 2009-7-15 23:29:25 | 只看该作者
万分感谢,我先试试
谢谢了!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-17 04:58 , Processed in 0.108209 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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