我用Tquery,执行select * from tab1取出记录,用dbgrid显示。有一个字段xz,类型为char(1),值只能为'1','2','3'中的一个。我想在dbgrid显示的时候,将其翻译过来,变为'系统管理员','查询员',‘维护员'。因为这个值不太会变动,我想将其写在程序里,而不是放在数据库里。请教各位,该怎么做?如果用数据库,又该怎么做?

解决方案 »

  1.   

    在Sql语句查询时写
    case xz when '1' then '系统管理员' when '2' then '查询员' when '3' then‘维护员';
      

  2.   

    一、不写入数据库:
    1、计算字段方式:创建一个计算字段(假设为MC),段后在数据集的OnCalcFields事件中写
    procedure TForm1.ADODataSet1CalcFields(DataSet: TDataSet);
    begin
      Case ADODataSet1.FieldByName('XZ').AsInteger of
        1:MC:='系统管理员';
        2:MC:='查询员';
        3:MC:='维护员';
      end;
    end;
    2、Select语句方式:
      楼上的已经回答;
    3、第三方控件方式:
      使用Ehlib;在KeyList 和 PickList加入“1,2,3”和“系统管理员,查询员,维护员”,在Grid显示时就能自动对应出来;二、写入数据库:
    你得存入一个代码表,然后在Select时使用内连方式(Inner Join)取出数据;参见一下下面的语句
    SELECT WORKER.BH, WORKER.XM, WORKER.XB, DMB_XL.XL AS 学历
    FROM DMB_XL INNER JOIN
          WORKER ON DMB_XL.BH = WORKER.XL
      

  3.   

    添加字段的OnGetText及OnSetText, 如下:
    procedure TdmMain.dsCategoryTypeCodeGetText(Sender: TField;
      var Text: String; DisplayText: Boolean);
    begin
      case Sender.AsInteger of
        1: Text:='系统管理员';
        2: Text:='查询员';
        3: Text:='维护员';
      end;   
    end;procedure TdmMain.dsCategoryTypeCodeSetText(Sender: TField;
      const Text: String);
    begin
      if Text = '系统管理员' then
        Sender.AsInteger = 1
      else if Text = '查询员' then
        Sender.AsInteger = 2
      else if Text = '维护员' then
        Sender.AsInteger = 3
      else
        Sender.AsInteger = 0;
    end;再设定字段对应的表格列的PickList的值为:系统管理员
    查询员
    维护员
      

  4.   

    照楼上的方法就ok了。
    chenylin(陈SIR) ( )讲得比较多,虽可行,但是不推荐用。
    如果只是显示,不操作数据的话,推荐用:smilefox2000(遥远的绝响)的方法。
      

  5.   

    回复人: smilefox2000(遥远的绝响) ( ) 信誉:100  2005-04-06 18:32:00  得分: 0  
     
     
       在Sql语句查询时写
    case xz when '1' then '系统管理员' when '2' then '查询员' when '3' then‘维护员';