a表包含三个字段num1,num2,num3,即一条记录中有3个不同的人的编号
b表包含2个字段:number,name;number是人的编号
查询表a,显示在dbgrid1内
问题:怎么让dbgrid1显示人的姓名而不是编号?(保存时,存编号而不是姓名)
请 高手指点,谢谢!!

解决方案 »

  1.   

    双击 dbgrid1 增加 ---》0-TColumn---》fieldname:=name
      

  2.   

    select name from b where b.number=num1
      

  3.   

    to:taiguang(银狐) 
       表a内有3个存number值的字段啊我曾试过据查到num1,num2,num3逐个从b表查出对应的name
    但速度很慢,a内有100条记录就得在原来基础上查300次请各位帮忙想想别的方法,急啊,谢谢了!!
      

  4.   

    to:dongycumt(阡陌) 
       那我再说一下哈,
       a表包含三个字段num1,num2,num3,即一条记录中有3个不同的人的编号
    (num1,num2,num3的值来源于b表的number字段)
    b表包含2个字段:number,name;(number是人的编号,name是姓名)
    查询表a内的数据,显示在dbgrid1内
    一般情况下,dbgrid1将显示3列数据,而这所有的数据都是人的编号
    我希望实现的是:让dbgrid1显示3列相应的人的姓名,而不是编号
    换句话说吧:让用户看到的是姓名(就好象是给“人的编号”戴相应的面具,
    查到的是 编号,可看到的是 姓名)
    好了,不知道我这样说是否够详细了
    请大家帮忙想想哈,谢谢!
      

  5.   

    你可以select *,然后将aDataSet.Fields[0].Visible:=false那就看不到编号了.
      

  6.   

    select a.num1 as 编号,b.name as 姓名 from a left join b on a.num1=b.number 这样查询出来的A表就显示对应的b表中的姓名.
      

  7.   

    用控件,WWDBGRID或是其它。
      

  8.   

    To:darkie28(小二黑) 
       接下来呢?
      

  9.   

    To:lovend(颓废之吻) 
       谢谢!这样是可以了,可是dbgrid就成只读的了,我希望能编辑,请
    再帮忙想想,谢谢!!To:bbsftp(烨) 
       哪有这样的控件啊?能给我一种吗?谢谢!!
      

  10.   

    问题解决一半剩下的问题是:
    1。按楼上各位指点查出的是只读的,怎么才可成可编辑的呢?
    2。当num1,num2,num3中某个字段的值为空时,怎么才能查出那条记录呢
    比如某条记录中num2='',我在条件中加:or num2='',可还是查不到那条记录
    该怎么改呢?请各位高手指点哈,谢谢!!
      

  11.   

    select name,number from b join a可查询结果。
    多表查询能否对结果集进行编辑取决于使用的数据访问引擎,在很多情况下,使用ADO是可以编辑的,使用BDE要复杂些。
    上述情况,如果number是B表主键,而且同时是a表外键,使用ADO是可心编辑的
      

  12.   

    to:sxqwhxq(步青云) 
       我用的是bde,该怎么做呢?(number不是b 表的主键,它与a 表的关系仅仅是:a表的num1,num2,num3三个字段的值来源于number)
    另外,当num1,num2,num3中某个字段的值为空时,怎么才能查出那条记录呢
    比如某条记录中num2='',我在条件中加:or num2='',可还是查不到那条记录
    该怎么改呢?
    请帮忙想一想,谢谢了!!
      

  13.   

    这个我写过,
    直接用dbgrid就可以做到,dbgrid显示前有一个事件叫什么来着
    procedure TfrmMarkerMng.dbgCyDrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
      var
      i_test: integer;
      begin
      if DataCol=1 then
      begin
         adoDm.qrycheck.Close;
         i_test:=strtointdef(column.field.text,-1000);
         if i_test>0 then
         begin
         adoDm.qrycheck.SQL.Text:='select xm from YH_YHXX where PJYDM='+column.Field.Text;
         try
         adoDm.qrycheck.Open;
         except
         end;
         dbgcy.Canvas.textRect(rect,rect.left+2,rect.top+2,adoDM.qrycheck.fieldByName('xm').AsString);
         adoDm.qrycheck.Close;
         end;
      end;
    end;
    转换显示就可以了
      

  14.   

    to:aloking(黑鲸) 
      请以我上面说的那两个表为例说说怎么做,好吗
    对了,希望是用tquery,bde,因为我对Tadoquery更陌生
    你写的那段代码,没怎么看明白,好想只涉及到一个表啊
    另外一个表的内容怎么联系起来,请详细说说
    谢谢!!!!
      

  15.   

    adoDm.qrycheck.SQL.Text:='select xm from YH_YHXX where PJYDM='+column.Field.Text
    也就是在显示前转换显示的内容.
     query.sql.text:='select name from B where number='+columen.field.text;
      

  16.   

    To:aloking(黑鲸) 
        只有b表,怎么与a 表发生联系啊??
      

  17.   

    a 表是显示用的,直接连着dbgrid
    dbgCyDrawColumnCell 这个事件里面
    挨个更换出来
    还不明白?仔细看看我上面帖的那段代码吧。速度如果慢,想想其他方法减少访问数据库
      

  18.   

    谢谢aloking(黑鲸)!
    谢谢楼上各位朋友了!