请教关于stringgrid的问题,高手指点下小弟

chdaner 2009-07-06 10:11:59
我有表a如下: 学号 竞赛科目 成绩 (其中竞赛科目为列表框组件,包含语文,数学,英语)
001 语文 72
001 英语 64
002 数学 71

我的想法是:上面的表显示在dbgrid中,

然后通过按钮点击,在组件stringgrid中显示成如下内容

学号 语文 数学 英语
001 72 64
002 71

数据库用的是sql 2000,

刚刚学delphi,请高手指点下小弟,最好能提供详细的实例,感谢,

另外如果我想新增个科目如物理之类的,应该要怎么做呢?

...全文
72 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
dinoalex 2009-07-06
  • 打赏
  • 举报
回复
不是两个dbgrid.是两个adoquery,新增列? 加什么列?在stringgrid里加的话,直接赋值就行了,如果在数据库里的话,那要看你是的是什么列的,那个SQL语句是根据竞赛科目来写的,里面有多少个,你就写多少个
chdaner 2009-07-06
  • 打赏
  • 举报
回复
这个我倒是会写,但是这样的话,就得用到两个dbgrid,一个stringgrid, 因为这样循环赋值是取的第二个数据集dbgrid里面的数据,这样还有个问题,如果想新增列的话,还可不可行。

能不能只用一个dbgrid,一个stringgrid呢,如果这样的话,赋值语句就要换了。
dinoalex 2009-07-06
  • 打赏
  • 举报
回复
for i:= 0 to adoquery1.fieldcount -1 do
stringgrid1.cell[i,0]:= adoquery1.fields[i].fieldname; //加表头
r:= 1;
while not adoquery1.eof do
begin
for i:= 0 to adoquery.fieldcount -1 do
stringrid1.cell[i,r]:= adoquery1.fields[i].asstring;
inc(r);
end

大致是这样吧,手写,没测,你自己测吧
SuperTitan001 2009-07-06
  • 打赏
  • 举报
回复
一个个添加吧,别老想着偷懒,呵呵
chdaner 2009-07-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 dinoalex 的回复:]
点击按钮,得到结果集,再把结果集写进stringgrid里不就行了?
[/Quote]

dinoalex
你好,现在有了一点眉目,只是我只会把结果集写进另外一个dbgrid里面,stringgrid不会操作,具体要写进去,是不是还要写个循环,一个个的添加?
能给个与stringgrid关联的语句吗?
dinoalex 2009-07-06
  • 打赏
  • 举报
回复
max主要用来是配合group by.

也可以不用max这个聚合函数
dinoalex 2009-07-06
  • 打赏
  • 举报
回复
点击按钮,得到结果集,再把结果集写进stringgrid里不就行了?
chdaner 2009-07-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dinoalex 的回复:]
select 学号,
max(case 竞赛科目 when '语文' then 成绩 else 0 end) 语文,
max(case 竞赛科目 when '数学' then 成绩 else 0 end) 数学,
max(case 竞赛科目 when '物理' then 成绩 else 0 end) 物理,
from tb
group by 学号
[/Quote]

请问一下,'max' 的作用是什么?
chdaner 2009-07-06
  • 打赏
  • 举报
回复
同一科目的多条记录肯定会有的。
chdaner 2009-07-06
  • 打赏
  • 举报
回复
这是写在数据库里面的吧

我想写在程序中的话,应该要怎么做呢?
SuperTitan001 2009-07-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dinoalex 的回复:]
select 学号,
  max(case 竞赛科目 when '语文' then 成绩 else 0 end) 语文,
  max(case 竞赛科目 when '数学' then 成绩 else 0 end) 数学,
  max(case 竞赛科目 when '物理' then 成绩 else 0 end) 物理,
from tb
group by 学号
[/Quote]

正解,如果没有同一科目的多条记录,可以不用max
chdaner 2009-07-06
  • 打赏
  • 举报
回复
不好意思,因为比较急,所以发了两贴

感谢楼上的回复

我上面的记录只是举个例子,学号是不定的,记录会有很多个
骑牛上铂金 2009-07-06
  • 打赏
  • 举报
回复
是个行列互换的问题,搜索一下应该有很多相关帖子!
dinoalex 2009-07-06
  • 打赏
  • 举报
回复
select 学号,
max(case 竞赛科目 when '语文' then 成绩 else 0 end) 语文,
max(case 竞赛科目 when '数学' then 成绩 else 0 end) 数学,
max(case 竞赛科目 when '物理' then 成绩 else 0 end) 物理,
from tb
group by 学号
dinoalex 2009-07-06
  • 打赏
  • 举报
回复
怎么发两帖了?
chdaner 2009-07-06
  • 打赏
  • 举报
回复
有劳各位,太感激了。
nbzip 2009-07-06
  • 打赏
  • 举报
回复
不管用SQL还是语句,这问题都是容易的.

楼主要加油了.
chdaner 2009-07-06
  • 打赏
  • 举报
回复
哎,高手帮帮忙啊
chdaner 2009-07-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dinoalex 的回复:]
select 学号,
max(case 竞赛科目 when '语文' then 成绩 else 0 end) 语文,
max(case 竞赛科目 when '数学' then 成绩 else 0 end) 数学,
max(case 竞赛科目 when '物理' then 成绩 else 0 end) 物理,
from tb
group by 学号
[/Quote]


再问个白痴的问题,这个sql语句应该要放在哪里?

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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