@@@请问怎么更换dbgrid显示的内容!!谢谢!!

heart007 2005-03-22 02:23:38
a表包含三个字段num1,num2,num3,即一条记录中有3个不同的人的编号
b表包含2个字段:number,name;number是人的编号
查询表a,显示在dbgrid1内
问题:怎么让dbgrid1显示人的姓名而不是编号?(保存时,存编号而不是姓名)
请 高手指点,谢谢!!
...全文
240 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
heart007 2005-05-08
  • 打赏
  • 举报
回复
谢谢aloking(黑鲸)!
谢谢楼上各位朋友了!
aloking 2005-04-15
  • 打赏
  • 举报
回复
a 表是显示用的,直接连着dbgrid
dbgCyDrawColumnCell 这个事件里面
挨个更换出来
还不明白?仔细看看我上面帖的那段代码吧。速度如果慢,想想其他方法减少访问数据库
heart007 2005-04-15
  • 打赏
  • 举报
回复
To:aloking(黑鲸)
只有b表,怎么与a 表发生联系啊??
aloking 2005-03-29
  • 打赏
  • 举报
回复
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;
heart007 2005-03-29
  • 打赏
  • 举报
回复
等得心都凉了
。。。。。。。。
aloking 2005-03-28
  • 打赏
  • 举报
回复
在表中加索引 就是一个定位,应该挺快的
数据也不多,才100条嘛。
aloking 2005-03-28
  • 打赏
  • 举报
回复
这个我写过,
直接用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;
转换显示就可以了
heart007 2005-03-28
  • 打赏
  • 举报
回复
急啊,请大家帮帮忙啊
谢谢!
heart007 2005-03-28
  • 打赏
  • 举报
回复
to:aloking(黑鲸)
请以我上面说的那两个表为例说说怎么做,好吗
对了,希望是用tquery,bde,因为我对Tadoquery更陌生
你写的那段代码,没怎么看明白,好想只涉及到一个表啊
另外一个表的内容怎么联系起来,请详细说说
谢谢!!!!
仙侣步惊云 2005-03-25
  • 打赏
  • 举报
回复
select name,number from b join a可查询结果。
多表查询能否对结果集进行编辑取决于使用的数据访问引擎,在很多情况下,使用ADO是可以编辑的,使用BDE要复杂些。
上述情况,如果number是B表主键,而且同时是a表外键,使用ADO是可心编辑的
heart007 2005-03-25
  • 打赏
  • 举报
回复
问题解决一半剩下的问题是:
1。按楼上各位指点查出的是只读的,怎么才可成可编辑的呢?
2。当num1,num2,num3中某个字段的值为空时,怎么才能查出那条记录呢
比如某条记录中num2='',我在条件中加:or num2='',可还是查不到那条记录
该怎么改呢?

请各位高手指点哈,谢谢!!
heart007 2005-03-25
  • 打赏
  • 举报
回复
to:sxqwhxq(步青云)
我用的是bde,该怎么做呢?(number不是b 表的主键,它与a 表的关系仅仅是:a表的num1,num2,num3三个字段的值来源于number)
另外,当num1,num2,num3中某个字段的值为空时,怎么才能查出那条记录呢
比如某条记录中num2='',我在条件中加:or num2='',可还是查不到那条记录
该怎么改呢?
请帮忙想一想,谢谢了!!
heart007 2005-03-24
  • 打赏
  • 举报
回复
To:lovend(颓废之吻)
谢谢!这样是可以了,可是dbgrid就成只读的了,我希望能编辑,请
再帮忙想想,谢谢!!

To:bbsftp(烨)
哪有这样的控件啊?能给我一种吗?谢谢!!
heart007 2005-03-24
  • 打赏
  • 举报
回复
To:darkie28(小二黑)
接下来呢?
heart007 2005-03-23
  • 打赏
  • 举报
回复
to:taiguang(银狐)
表a内有3个存number值的字段啊

我曾试过据查到num1,num2,num3逐个从b表查出对应的name
但速度很慢,a内有100条记录就得在原来基础上查300次

请各位帮忙想想别的方法,急啊,谢谢了!!
bbsftp 2005-03-23
  • 打赏
  • 举报
回复
用控件,WWDBGRID或是其它。
lovend 2005-03-23
  • 打赏
  • 举报
回复
select a.num1 as 编号,b.name as 姓名 from a left join b on a.num1=b.number

这样查询出来的A表就显示对应的b表中的姓名.

darkie28 2005-03-23
  • 打赏
  • 举报
回复
你可以select *,然后将aDataSet.Fields[0].Visible:=false那就看不到编号了.
heart007 2005-03-23
  • 打赏
  • 举报
回复
to:dongycumt(阡陌)
那我再说一下哈,
a表包含三个字段num1,num2,num3,即一条记录中有3个不同的人的编号
(num1,num2,num3的值来源于b表的number字段)
b表包含2个字段:number,name;(number是人的编号,name是姓名)
查询表a内的数据,显示在dbgrid1内
一般情况下,dbgrid1将显示3列数据,而这所有的数据都是人的编号
我希望实现的是:让dbgrid1显示3列相应的人的姓名,而不是编号
换句话说吧:让用户看到的是姓名(就好象是给“人的编号”戴相应的面具,
查到的是 编号,可看到的是 姓名)
好了,不知道我这样说是否够详细了
请大家帮忙想想哈,谢谢!
雪狼__ 2005-03-23
  • 打赏
  • 举报
回复
愚昧,没看懂楼主意思.....
加载更多回复(6)

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧