我的数据库表是放到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,很疑惑。