救急! ( 积分: 200 )

  • 主题发起人 主题发起人 傻瓜程序员
  • 开始时间 开始时间

傻瓜程序员

Unregistered / Unconfirmed
GUEST, unregistred user!
有一数据库表AA:
姓名 物品名称
A 物品1
A 物品2
A 物品3
A 物品4
A 物品5
B 物品1
B 物品2
B 物品3
每个人对应的物品的种类是不一样的,有的人能对应20多个!
要把这个表先用StringGrid显示出来格式为:
姓名
A 物品1 物品2 物品3 物品4 物品5
B 物品1 物品2 物品3
同时用frReport报表打印出来的格式也是:
A 物品1 物品2 物品3 物品4 物品5
B 物品1 物品2 物品3
望高手帮助小弟一下!
有不同解决方法也望告诉小弟!小弟将非常感激!
 
有一数据库表AA:
姓名 物品名称
A 物品1
A 物品2
A 物品3
A 物品4
A 物品5
B 物品1
B 物品2
B 物品3
每个人对应的物品的种类是不一样的,有的人能对应20多个!
要把这个表先用StringGrid显示出来格式为:
姓名
A 物品1 物品2 物品3 物品4 物品5
B 物品1 物品2 物品3
同时用frReport报表打印出来的格式也是:
A 物品1 物品2 物品3 物品4 物品5
B 物品1 物品2 物品3
望高手帮助小弟一下!
有不同解决方法也望告诉小弟!小弟将非常感激!
 
StringGrid 这里面还可以实现,但报表好象实现不了~~~
首先排一下序:select * from table order by 姓名,货物名称
然后用循环从第一个开始,一个个加进StringGrid中.......
if qry.fields[0].asString=SG.cell[0,x-1] then
//x表示当前行标
//添加到末尾
else
//新增一行
 
用SQL语句就能查到啊......
select 姓名,货物名称 from AA group by 姓名,货物名称 order by 姓名,货物名称
然后循环加进stringgrid,比如是使用ADOQUERY来执行这个SQL
var
i,m,n,maxm:integer;
tmpname:string;
begin
tmpname:='&&&&';
n:=-1;
maxn:=1;
while not adoquery.Eofdo
begin
if ADOQuery.FieldValues['姓名']=tmpname then
begin
inc(m);
StringGrid1.Cells[m ,n]:=ADOQuery.FieldValues['货物名称'];
end
else
begin
if maxm<m then
maxm:=m;
m:=1;
inc(n);
StringGrid1.Cells[0 ,n]:=ADOQuery.FieldValues['姓名'];
StringGrid1.Cells[m ,n]:=ADOQuery.FieldValues['货物名称'];
end;
adoquery.Next;
end;
StringGrid1.ColCount:=maxm;
StringGrid1.RowCount:=n+1;
end;
 
oder by就分组了,stringgrid没用过,但是类推的话,是和楼上兄弟说的差不多
 
先用数据库查询出这样的结果比较好,下面的例子应该可以解决:
行列转换--合并
有表A,
id pid
1 1
1 2
1 3
2 1
2 2
3 1
如何化成表B:
id pid
1 1,2,3
2 1,2
3 1
创建一个合并的函数
create function fmerg(@id int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+cast(pid as varchar) from 表A where id=@id
set @str=right(@str,len(@str)-1)
return(@str)
End
go
--调用自定义函数得到结果
select distinct id,dbo.fmerg(id) from 表A
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2473947
 
我觉得可以用个临时的表存储用SQL语句查询得到的结果(满足要求的),再对在个临时表进行处理。
 
用交叉数据报表或旋转数据是个不错的主意,但是必须知道是多少列,以及列规则。
 
www.zptang.ys168.com
 
试试Grid++Report,可以免费使用, 主页:http://www.rubylong.cn
 
后退
顶部