Office中国论坛/Access中国论坛

标题: 用IF语句能实现这样的循环吗? [打印本页]

作者: 贫龙    时间: 2011-12-17 16:22
标题: 用IF语句能实现这样的循环吗?
假如 Me.收费项目="学费" 且 Me.班级="103班"或"105班" 时
若   Me.入学日期在2010年2月以前
Me.收费金额="1000"
若   Me.入学日期在2010年2月-2011年3月
Me.收费金额="1300"
若   Me.入学日期在2011年3月-2011年9月
Me.收费金额="1500"
否则
Me.收费金额="2000"
假如 Me.收费项目="学费" 且 Me.班级="101班"或"102班"或"104班"或"106班" 时
若   Me.入学日期在2010年2月以前
Me.收费金额="1200"
若   Me.入学日期在2010年2月-2011年3月
Me.收费金额="1500"
若   Me.入学日期在2011年3月-2011年9月
Me.收费金额="1800"
否则
Me.收费金额="2100"
假如 Me.收费项目="学费" 且 Left(Me.班级, 1) = 2或3或4或5或6 时
若   Me.入学日期在2010年2月以前
Me.收费金额="1300"
若   Me.入学日期在2010年2月-2011年3月
Me.收费金额="1600"
若   Me.入学日期在2011年3月-2011年9月
Me.收费金额="1900"
否则
Me.收费金额="2200"
假如 Me.收费项目="学费" 且 Left(Me.班级, 1) = 7或8或9 时
若   Me.入学日期在2010年2月以前
Me.收费金额="1400"
若   Me.入学日期在2010年2月-2011年3月
Me.收费金额="1700"
若   Me.入学日期在2011年3月-2011年9月
Me.收费金额="2000"
否则
Me.收费金额="2500"

或者不筛选日期,直接赋4个值到金额里,采用下拉框显示,到底怎么样最好呢?
要把这些转换成代码,怎么写啊???




作者: roych    时间: 2011-12-17 19:08
EH那个是你吧?这里不再详细回复了。建立好一个基础表即可实现查询了。

年级  班级   入学日期      学费
1       101   2010-1-31    1200
1       101   2011-2-28    1500
1       101   2011-8-31    1800

对日期进行比较即可返回学费。
在这里再次希望看到此贴的新手们在学Access时不要好高鹜远,脚踏实地地学才是正道。尽管代码可以解决很多问题,却不是解决问题的唯一方式。必要的基础表还是要有的。——当然,通过代码也可以创建表、查询甚至关系等等,但是我想问一句,有这个必要去舍近求远吗?
作者: ycxchen    时间: 2011-12-18 15:08
版主说得有道理!
作者: 贫龙    时间: 2011-12-18 15:45
本帖最后由 贫龙 于 2011-12-18 15:53 编辑

我开始也用的表,用组合框联动和判断语句,但始终弄不好。我传个附件帮我看看吧!

[attach]47721[/attach]

里面收费标准是这样的:
1-9年级共29个班级,其中103班和105班的学费是一个标准,其它1-6年级一个标准,7-8年级一个标准,9年级一个标准。
其中又按入学时间分4个档次,所以不知怎么搞才好。

要达到这样要求:在选择收费项目后,金额下拉框自动显示。

作者: Henry D. Sy    时间: 2011-12-18 20:45
老是说一个标准,一个标准的,具体是什么标准,
一共也就10几条标准,为什么不写出来。
放在表中也就20条记录吧了。就这么难,一直不肯贴出来,叫他人如何帮你呀!!
作者: roych    时间: 2011-12-19 01:15
按顶楼的标准,——希望我没有理解错,——随手做了一个(详见测试窗体)。但你在4L又说要分标准了,不过新标准俺不得而知。所以还是按旧标准执行。
表关系都还没建立好,建议还是先别谈联动不联动的问题。设计一个软件,没下过一定功夫去了解需求和规划,仅靠需要一张表,才建立一张表的做法是不妥当的。
[attach]47726[/attach]
作者: 贫龙    时间: 2011-12-19 09:27
标准都在表里,可能我的表述不清楚吧。
[attach]47727[/attach]
作者: Henry D. Sy    时间: 2011-12-19 11:24
把你的一切标准贴出来,很难吗?
作者: 贫龙    时间: 2011-12-19 16:12
1-9年级共29个班级

学费:
103班和105班
08年2月以前入学:1000元;
09年9月以前入学:1100元;
10年3月以前入学:1200元
10年3月之后:1400元。
其它1-6年级
08年2月以前入学:1100元;
09年9月以前入学:1200元;
10年3月以前入学:1300元
10年3月之后:1600元。
7-8年级
08年2月以前入学:1200元;
09年9月以前入学:1300元;
10年3月以前入学:1400元
10年3月之后:1700元。
9年级
08年2月以前入学:1300元;
09年9月以前入学:1400元;
10年3月以前入学:1500元
10年3月之后:1800元。

资料费:
103班和105班:300元
其它1-6年级:400元
7-8年级:500元
9年级:600元

校车:
长线:500元
短线:400元

兴趣班:200元
校讯通:30元
书包:35元
作者: Henry D. Sy    时间: 2011-12-19 16:42
表中学生的记录太少,不足以测试!
仅有的几条记录,还多数是空值
自己想学,不能用这种很不耐烦的态度!
作者: roych    时间: 2011-12-19 17:03
本帖最后由 roych 于 2011-12-19 17:08 编辑
贫龙 发表于 2011-12-19 16:12
1-9年级共29个班级

学费:


每个班级没有列出来啊,例如二年级有几个班。
我还是那句话,基础数据还是要处理好,不能一蹴而就的。有时间我再写一个系统给你试试。
作者: 贫龙    时间: 2011-12-19 17:12
Henry D. Sy 发表于 2011-12-19 16:42
表中学生的记录太少,不足以测试!
仅有的几条记录,还多数是空值
自己想学,不能用这种很不耐烦的态度!

[attach]47735[/attach]

谢谢,我一定提供所有资料。
作者: 贫龙    时间: 2011-12-19 17:13
roych 发表于 2011-12-19 17:03
每个班级没有列出来啊,例如二年级有几个班。
我还是那句话,基础数据还是要处理好,不能一蹴而就的。 ...

班级
101班
102班
103班
104班
105班
106班
107班
201班
202班
203班
204班
301班
302班
303班
304班
401班
402班
403班
404班
501班
502班
503班
601班
602班
701班
702班
801班
802班
901班
作者: 贫龙    时间: 2011-12-21 07:58
有谁可以帮帮我啊{:soso_e149:}{:soso_e150:}
作者: 贫龙    时间: 2011-12-21 07:59
有谁可以帮帮我啊!?{:soso_e149:}{:soso_e150:}
作者: Henry D. Sy    时间: 2011-12-21 10:40
贫龙 发表于 2011-12-21 07:59
有谁可以帮帮我啊!?

你都不贴资料,如何帮忙?
作者: 贫龙    时间: 2011-12-21 16:22
所有的都提供了啊,测试记录也加了。
作者: Henry D. Sy    时间: 2011-12-21 20:31
贫龙 发表于 2011-12-21 16:22
所有的都提供了啊,测试记录也加了。

应该用表格的方式贴出来
作者: roych    时间: 2011-12-25 18:44
1、表需要重新设计,带条件的数据应当分离出来(例如资料费、中餐费、学费等),成为独立的一张表。
2、如果非要在选择里统一的话,可以考虑加上计算公式的字段,用Eval函数处理。
先贴一段代码供参考(缴费部分已结束。校车安排、退费等等模块还在写。不过今天是圣诞节,想休息下。):
代码说明:
新建模块,粘贴代码并保存模块,然后新建查询,在查询窗格里输入自定义字段,例如:学费:Schooling([入学日期], [入学班级])

  1. Function Schooling(SclDate As Date, ClassNo As String) As Currency
  2. Schooling = 0
  3. Select Case SclDate
  4.     Case Is < #3/1/2009#
  5.         Select Case ClassNo
  6.             Case "103", "105"
  7.                 Schooling = 1850
  8.             Case "701", "702", "801", "802", "901"
  9.                 Schooling = 2300
  10.             Case Else
  11.                 Schooling = 2000
  12.         End Select
  13.     Case Is < #10/1/2009#
  14.         Select Case ClassNo
  15.             Case "103", "105"
  16.                 Schooling = 2000
  17.             Case "701", "702", "801", "802", "901"
  18.                 Schooling = 2600
  19.             Case Else
  20.                 Schooling = 2400
  21.         End Select
  22.     Case Is < #3/1/2011#
  23.         Select Case ClassNo
  24.             Case "103", "105"
  25.                 Schooling = 2300
  26.             Case "701", "702", "801", "802", "901"
  27.                 Schooling = 3000
  28.             Case Else
  29.                 Schooling = 2700
  30.         End Select
  31.     Case Else
  32.         Select Case ClassNo
  33.             Case "103", "105"
  34.                 Schooling = 3000
  35.             Case "701", "702", "801", "802", "901"
  36.                 Schooling = 3500
  37.             Case Else
  38.                 Schooling = 3100
  39.         End Select
  40. End Select
  41. End Function
复制代码

作者: Henry D. Sy    时间: 2011-12-25 19:38
个人感觉这样硬编码不好,维护比较困难(比如费用变更)
应该用表来保存这些费用,然后用查询得到费用。

作者: roych    时间: 2011-12-26 00:45
Henry D. Sy 发表于 2011-12-25 19:38
个人感觉这样硬编码不好,维护比较困难(比如费用变更)
应该用表来保存这些费用,然后用查询得到费用。

的确不好。
从原则上来说,缴费应该只跟年级有关,而不该再和入学日期有关。——莫非留学生(留级的学生就可以少花些钱读书)?
如果所有费用只跟年级有关,那么可以整合在一起,但就楼主的问题而言,既有只跟年级有关的(例如资料费什么的),也有固定的(例如体检),还有校车跟长短线有关……这些再和学费整合在一起并不容易。
当然可以建立多个表和编号字段。只是录入时较为麻烦,只能分多个表录入再用联合查询汇总(一张表多个编号字段,当录入多个数据时,始终不是个好办法)。
作者: ycxchen    时间: 2011-12-26 09:24
Henry D. Sy 发表于 2011-12-25 19:38
个人感觉这样硬编码不好,维护比较困难(比如费用变更)
应该用表来保存这些费用,然后用查询得到费用。

支持!
作者: 贫龙    时间: 2011-12-27 11:05
如果将收费标准简化,是不是比较好做呢,不用考虑以后更改数据标准麻烦,反正一年就二次更改。
这个是不是用组合框联动就可以搞定啊,但有几个还是要判断班级,要怎么做呢?

班级
学费
资料费
中餐
兴趣班
校讯通
校服
书包
校车
早餐
103班
1850;2000;2300
300
550
200
30
30;50;75;80;120
35
260;450
300
105班
101班
2000;2400;2700;3100
400
600
102班
104班
106班
107班
201班
202班
203班
204班
301班
302班
303班
304班
401班
402班
403班
404班
501班
502班
503班
601班
602班
701班
2300;2600;3000;3500
500
650
702班
801班
802班
901班
800

作者: Henry D. Sy    时间: 2011-12-27 11:52
一共29个班,每个班又分4个入学时间段,4*29=108条记录,保存到一张学费表!
其他各费用分门别类的各自保存在相应的表上。
然后再说第二步。。。。。。。




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