主题:关于fetch和loop的问题,每次都只能插入一个记录,不能实现多个记录的插入
我的数据库表是放到MS sql server里面存放的。以下代码是DropDownListBox控件的selectionchanged事件,实现的功能是根据月份的改变而检索出相应月份员工的员工号、基本工资、津贴、考勤、医疗报销、保险、总月工资、时间,其中津贴、考勤和总工资的值是要经过计算得来的。我已经排除了是数据库表里的表记录不够多的问题,但是是每次检索结果都只能检索出一个值而已,如果一句一句地代码执行的话又见输出结果栏那里是能够检索出多个记录,真不知道是为什么,麻烦各位高手指点一下,非常感谢了!
下面是代码了:
//工种
int gz
int jbgz
//加班时间,加班类别
string jb_date
string jblb
//津贴,加班天数
int jt
int jb_daynumber
//缺勤费和缺勤天数
int kq
long qq_daynumber
string qq_lb
//医疗保险和保险费
int ylbxfy
int bxf
//当月应得工资
int ygz_total
//员工号
string emp_no
//月工资时间
string ygz_date
//取得所要生成的工资的时间
ygz_date=sle_1.text + ddlb_1.text
declare emp_no_all cursor for
select yg.emp_no,yg.emp_gz from yg;
open emp_no_all;
fetch emp_no_all into :emp_no,:gz;
do WHILE sqlca.sqlcode=0//将工种基本工资赋给这个变量
select gzbz.gzjbgz into :jbgz from gzbz where gzbz.gz=:gz;
//将加班时间和加班类别赋给这两个变量
select jt.jb_daynumber,jt.jblb into :jb_daynumber,:jblb from jt where
jt.emp_no =:emp_no and jt.jb_date=:ygz_date;
if jblb="1" then
jt=jb_daynumber * 100
elseif jblb = "2" then
jt=jb_daynumber * 200
elseif jblb = "3" then
jt=jb_daynumber * 300
else
jt=0
end if
//医疗保险和保险
select ylbx.ylbxfy,ylbx.bxf into :ylbxfy,:bxf from ylbx where ylbx.emp_no =:emp_no and ylbx.ylbx_date=:ygz_date;
//扣除缺勤费
select kq.qq_daynumber,kq.qq_lb into :qq_daynumber,:qq_lb from kq where kq.emp_no =:emp_no and kq.qq_date=:ygz_date;
if qq_lb="1" then
kq=qq_daynumber * 20
elseif qq_lb="2" then
kq=qq_daynumber * 10
elseif qq_lb="3" then
kq=qq_daynumber * 5
else
kq=0
end if
ygz_total = jbgz + jt + ylbxfy - bxf - kq
//生成员工月工资
insert into ygz (emp_no,ygz_date,jbgz,jt,ylbx,bx,kq,ygz_total) values (:emp_no,:ygz_date,:jbgz,:jt,:ylbxfy,:bxf,:kq,:ygz_total);
//各个变量清零
jbgz=0
jt=0
jblb=""
jb_daynumber=0
ylbxfy=0
bxf=0
qq_lb=""
kq=0
qq_daynumber=0
fetch emp_no_all into :emp_no,:gz;
LOOP
close emp_no_all;
dw_1.retrieve()
以下是代码运行的情况:
员工号 基本工资 津贴 考勤 医疗报销 保险 总月工资 时间
000009 1200 600 80 50 20 1750 200804
000009 1200 600 0 60 30 1830 200805
000009 1200 600 10 50 20 1820 200806
四月份本来有好几个记录的,上面只有检索出了一个000009,很疑惑。