请教关于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,请高手指点下小弟,最好能提供详细的实例,感谢,

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

...全文
77 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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,927

社区成员

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

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