前几天提过的问题,不过我说得不清楚,而且也没有朋友正面回答过,所以今天再提一下:希望能正常显示,也同时希望语句能简练一点。Access表下两个表表1(字段‘积分’和‘级别’)积分           级别
0                
3                
10               
101              
1010             
10002
200
……表2(字段 二级  三级 四级 五级)  二级  三级 四级   五级
   10   100  1000   10000
但是在Access表2中 有二级  三级 四级  五级 四个字段,它们的字段内容为积分界限,分别由DBedit1、Dbedit2、Dbedit3、Dbedit4控制,操作者可以自由定义表2中的数据。如果以上表为例,我需要得到的结果:当0~9积分级别为一级,10~99积分级别为二级……以此类推。
我自己写了几句:     begin
      adoquery1.close;
      adoquery1.sql.clear;
      adoquery1.sql.add('update 表1,表2 set 表1.级别=''一级'' where 表2.二级>表1.积分');
      adoquery1.ExecSQL;
     end;
     begin
      adoquery1.close;
      adoquery1.sql.clear;
      adoquery1.sql.add('update 表1,表2 set 表1.级别=''二级'' where 表1.积分>=表2.二级');
      adoquery1.ExecSQL;
     end;
     begin
      adoquery1.close;
      adoquery1.sql.clear;
      adoquery1.sql.add('update 表1,表2 set 表1.级别=''三级'' where 表1.积分>=表2.三级');
      adoquery1.ExecSQL;
     end;
    ……
这样写下去不会报错,但后一位(如果是三级、四级或五级)就不能正常附给“级别”了。各位能否帮小弟看一下呢?应该如何更改,或者是否会有更简练的写法。

解决方案 »

  1.   

    With AdoQuery1 do begin 
         close;
         sql.clear;
         sql.add('update 表1,表2 set 表1.级别=''一级'' where 表2.二级>表1.积分');
         ExecSQL;
         sql.clear;
         sql.add('update 表1,表2 set 表1.级别=''二级'' where 表1.积分>=表2.二级');
         ExecSQL;
         sql.clear;
         sql.add('update 表1,表2 set 表1.级别=''三级'' where 表1.积分>=表2.三级');
         ExecSQL;
     end;
      

  2.   


    建议修改表2,改成
    一级 二级 三级
    10   100  1000  .....
    然后用这个更新语句
    update 表1 set 表1.级别=表2.级别 from 表1,表2 where 表1.积分<表2.积分
      

  3.   

    看错了你的表2,这样设计字段对以后添加等级很不利,建议作如下修改:id         积分     等级
    identity    10      一级
    (自增)      100     二级
    .....
      

  4.   

    谢谢terence4444(T4) 的建议,我会考虑一下更改,但是我是因为不知道代码如何写才改成
    一级 二级 三级
    10   100  1000  .....
    这种形式的但是也希望把所有的问题都弄清楚,如果按照DoerSoft() 的写法还是不能将最后一个字段附给“级别”,也就是写到    ……
         ExecSQL;
         sql.clear;
         sql.add('update 表1,表2 set 表1.级别=''五级'' where 表1.积分>=表2.五级');
         ExecSQL;
     end;之后还是不能正常显示五级。只能显示四级,我也不知道为什么,是否执行了前面四个Update之后,不能执行下去,还是遇到什么冲突了?