我的软件是工资系统,现在我在做工资录入部分,我想实现的功能是点击添加,先在数据库里搜索到每一个员工上个月的工资,然后改个月份,也就是下面的Pay_Yuefen(string)字段重新插入GDB_Pay表,同时显示在DBGRID中做一些修改。现在的问题是,我在DBGRID中显示的不仅包括GDB_Pay中的所有项(除Pay_ID外),还有GDB_Employee中的Employee_ID字段。
以下是我用来搜索上月工资的SQL语句:()
select a.*,b.*,c.* from GDB_Employee a ,GDB_Pay b ,(select User_Name,max(Pay_YueFen) as maxYueFen from gdb_pay group by User_Name) c where a.Employee_Name=b.User_Name and c.User_Name=b.User_Name and c.maxYueFen=b.Pay_YueFen我该使用何种方式实现我的目的,如果是要建立临时表,能否详细说明,我是菜鸟,什么都不懂啊。分不够再开新帖,解决为止。以下是我的数据库结构
 表1: GDB_Employee (本行人员表)
字段 说明 类型 大小 主键 非空
autoid 自动编号 Int 4 PK T
Employee_ID 人员编号 Char 10 T
Employee_Name 姓名 Char 10 T表3:GDB_Pay (工资表)
字段 说明 类型 大小 主键 非空
Pay_ID 自动编号 Int 4 PK T
Pay_YueFen 月份 Char 8 T
User_Name 姓名 Char 8 T
BiaoZhunGZ 标准工资 Float 8 T
FuDongGZ 浮动工资 Float 8 T
JiaBanGZ 加值班费 Float 8 T
Other_A 其他 Float 8 T
Other_B 其他 Float 8 T
YingDeGZ 应得工资 Float 8 T
YangLaoJin 养老金 Float 8 T
GongJiJin 公积金 Float 8 T
DaiYeJin 待业金 Float 8 T
BingShiJia 病事假 Float 8 T
QiTaKou 其他扣 Float 8 T
ShiFaGZ 实发工资 Float 8 T

解决方案 »

  1.   

    select a.*,b.*,c.* 
    ///////////////
    你这样肯定是显示所有字段三
      

  2.   

    to GoldShield(金盾):
      我查了没全部显示,除了两个AUTOID都显示了。
      

  3.   

    用join 会出错,说是操作符丢失
      

  4.   

    楼主把需要查出的字段全部写到SQL里,别用* ,*表示所有的都显示。
      

  5.   

    比如:
    select a.Employee_Name,b.(除了Pay_ID的所有字段),c.maxYueFen from GDB_Employee a ,GDB_Pay b ,(select User_Name,max(Pay_YueFen) as maxYueFen from gdb_pay group by User_Name) c where a.Employee_Name=b.User_Name and c.User_Name=b.User_Name and c.maxYueFen=b.Pay_YueFen
      

  6.   

    搂住的思路每搞清楚你现在查出来的数据时经过连接,分组的而显示在dbgrid中的,你想直接编辑dbgrid来插入数据时不行的
      

  7.   

    有人提议我先把查询结果放入临时表,然后改了月份以后再显示到DBGRID中进行修改,这样可行吗?具体该怎么做?
      

  8.   

    select a.*,b.*,c.*  into #temptbl ......把dbgrid的dataset指向#temptbl用完了 要 drop #temptbl
      

  9.   

    to jinjazz(人雅的标记--落寞刺客):
    能麻烦你教我具体怎么写吗?我没用过,不知道怎么实现,谢谢
      

  10.   

    那你干脆建立一个表resulttbl,结构就和你上面查询的结果那样truncate table resulttbl   --清空insert into resulttbl 
    select a.*,b.*,c.* from GDB_Employee a ,GDB_Pay b ,(select User_Name,max(Pay_YueFen) as maxYueFen from gdb_pay group by User_Name) c where a.Employee_Name=b.User_Name and c.User_Name=b.User_Name and c.maxYueFen=b.Pay_YueFen
     --插入把dgrid联系到resulttbl这个表去操作.不过不明白你为什么非要对这个数据集来操作,感觉没有意义.
      

  11.   

    一颗红星已经把过程说完了。
    query有个特性,就是多表查询的结果不能修改,如果非要修改的话,
    所以dbgrid的dataset的查询语句这样写:
    select a.*,b.*,c.* from GDB_Employee a ,GDB_Pay b ,(select User_Name,max(Pay_YueFen) as maxYueFen from gdb_pay group by User_Name) c where a.Employee_Name=b.User_Name and c.User_Name=b.User_Name and c.maxYueFen=b.Pay_YueFen into #temptable--存入临时表select *  form #temptable--返回结果
      

  12.   

    楼主上一帖已经说过他用的是ACCESS所以是不能创建临时表的,只能创建物理(临时)表。
    请楼主把要求显示在DBGrid中的字段罗列出来。
      

  13.   

    你多放几个edit,点击添加按钮,把上月的大部分信息自动写到edit上,然后让客户填写,然后点击提交按钮,用insert 语句插入到GDB_Pay 当中去,另外的员工表又不需要插入数据
      

  14.   

    我的建议是新建一个备用表,里面填的是每个员工的工资信息,结构和GDB_Pay一样,当新的一月造表时,将其内容显示出来改好后全部追加到GDB_Pay中即可,既方便又高效,设计起来也简单的多。
      

  15.   

    to  jinjazz(人雅的标记--落寞刺客):
    我原来就是这样做的,可他们说连着点确定也是很麻烦的,所以我就郁闷了,看来我的数据库中得多建一张表用来临时操作了。to wizardqi(男巫) :
    我要显示的是除Pay_ID外的所有GDB_Pay表中的内容和GDB_Employee表中的Employee_ID(就是这字段害人,可他们非要)
      

  16.   

    你建个表结构如下:表4:GDB_PayTemplate (工资表摸版)
    字段 说明 类型 大小 主键 非空
    Employee_ID 人员编号 Char 10 T
    Pay_YueFen 月份 Char 8 T
    User_Name 姓名 Char 8 T
    BiaoZhunGZ 标准工资 Float 8 T
    FuDongGZ 浮动工资 Float 8 T
    JiaBanGZ 加值班费 Float 8 T
    Other_A 其他 Float 8 T
    Other_B 其他 Float 8 T
    YingDeGZ 应得工资 Float 8 T
    YangLaoJin 养老金 Float 8 T
    GongJiJin 公积金 Float 8 T
    DaiYeJin 待业金 Float 8 T
    BingShiJia 病事假 Float 8 T
    QiTaKou 其他扣 Float 8 T
    ShiFaGZ 实发工资 Float 8 T
    --------------------------------------------------------------
    然后把每个员工信息以及工资信息添进去。
    当然在造表前你可以这样做:
    update GDB_PayTemplate set Pay_YueFen='当前年月'
    然后DBGrid显示所有的GDB_PayTemplate中的内容,更改一些必须更改的内容后Post一下;
    接下来你可以这样做:
    insert into GDB_Pay select Pay_YueFen,User_Name,BiaoZhunGZ,FuDongGZ,JiaBanGZ,Other_AOther_B,YingDeGZ,YangLaoJin,GongJiJin,DaiYeJin,BingShiJia,QiTaKou,ShiFaGZ from GDB_PayTemplate一切OK!   ^_^