SQLSERVER2000 数据库
我有一个人员表(A001) (字段是不固定的,用户可以增加字段)
姓名  编号  性别  民族   ........
张三  01     1   01
李四  02     2   02还有一个代码表(sr_code)
类别  代码  描述
AX     1     男
AX     2     女
AE     01    汉族
AE     02    回族
AE     03    满族
AC     01    健康
AC     02    一般
。。请问怎么用 DBGrid 显示数据
姓名  编号  性别  民族   ........
张三  01    男   汉族
李四  02    女   回族当用户自己在A001 表中增加一个字段 健康状况 并指定代码为 AC 
又怎么显示。(用户还可以增加其他字段)  

解决方案 »

  1.   

    你直接让dbgrid与A001表相连不就可以了吗
      

  2.   

    你的这个表实际上就是把不同的字典表信息汇总在一个表中了.
    select A001.姓名,A001.编号,b.描述,c.描述
    from A001,
    (select 代码,描述 from sr_code where 类别='AX') as a,
    (select 代码,描述 from sr_code where 类别='AE') as b
    where A001.性别=a.代码
    and A001.民族=b.代码
      

  3.   

    总感觉dbgrid不太好用,可能自己不精
    其实StringGrid还是很好控制
      

  4.   

    你就是说想把性别,民族弄成中文描述是把?
    dbgrid只有一个DataSource的连接,所以你只能想办法在程序里用sql语句控制结果集,然后显示出来
      

  5.   

    硬是要写的话是可以的,不过比较麻烦,不推荐
    先select代码表所有类别,用delphi循环动态拼一句完整的SQL类似:SQL.Text:='select distinct 类别 from sr_code';
    Open;while not query.eof dokind:=FieldByName(‘类别’).AsString;fromStr:=fromStr+'(select 代码,描述 from sr_code where 类别='''+kind+''') as '+kind+',';
    whereStr:=whereStr+’and A001……’end;这样
    最后去掉开头结尾的and和逗号,然后一起拼成一句完整的SQL:‘select …..’+fromStr+whereStr…….不知道我写清楚没有
      

  6.   

    与DBGrid无关,
    直接在ADOQUERY 的字段属性中写
    如性别字段 ,则在性别的OnGetText中写
    procedure TForm1.ADOQuery1性别GetText(Sender: TField; var Text: String;
      DisplayText: Boolean);
    var TmpQuery : TADOQuery;
    begin
      try
        TmpQuery := TADOQuery.Create(nil);
        with TmpQuery do
        begin
          Close;
          SQL.Text := 'Select 描述 from sr_code where 类别=''AX'' and 代码=' + QuotedStr(Sender.Text);
          Open;
        end;
        Text := TmpQuery.FieldByName('描述').AsString;
      finally
        TmpQuery.Free;
      end;
    end;
      

  7.   

    创建一个视图,用TADOQuery操作视图。如果原表结构发生改变,维护视图即可。
      

  8.   

    创建视图
    Create View v_A
    As
    select   A001.姓名,A001.编号,b.描述,c.描述 
    from   A001, 
    (select   代码,描述   from   sr_code   where   类别='AX')   as   a, 
    (select   代码,描述   from   sr_code   where   类别='AE')   as   b 
    where   A001.性别=a.代码 
    and   A001.民族=b.代码通过Query加载视图;
    数据的结构直接在视图中更新代码;