数据库查询(200分)

  • 主题发起人 主题发起人 LINZONGM
  • 开始时间 开始时间
L

LINZONGM

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个表:
sb(设备),rq(日期),sl(数量)
如何生成这样一个查询(假设查询1号---5号的数据):
日期 数量 日期 数量 日期 数量 日期 数量 日期 数量 日期 数量
设备 1号(查询到的数据)2号 3号 4号 5号 6号
 
这种查询没法做,
你查出5条记录,界面上自己安排不就行了
 
一定要日期横排吗?那你的表格/打印纸张都不能确定。我宁愿竖排。
 
我同意方栩的观点。如果你一定要这样做,可有多种方法实现:
方法一:用存储过程建一具有上面格式的临时表(<日期 数量>的个数可根据查询处的记录数处理),
然后把查询处的数据存储到该临时表中。
方法二:把数据存到文件中,再从文件中读取数据。
方法三:结合delphi前台应用程序处理
 
你用什么数据库,如果用sqlserver应该可以,只要动态增加字段不就行了,把该字段的值赋给
他,一切ok
 
我正遇此问题,不过嫌麻烦就改成竖排,代价是占了很多空位
 
如果你真要这么做,只有通过存储过程来实现,
先通过查询得到一个记录集,
在根据记录集动态建表,如有n条记录,则有2n个字段
建好表后,再把数据往表里填就行了!
 
难道真的没办法实现吗?
我用的是DBF。
如果是竖排要怎样做呢?
我没碰到过这样的问题,请各位高手指点
 
竖排也用临时表就可以了。
 
建议使用临时表
 
希望大家能够说得清楚点,我没处理国类似问题,谢谢
 
如果你使用的是oracle的话,那么矩阵报表正好可以用上.

建立临时表
procedure Tform1.Button1Click(Sender: TObject);
begin
with table1 do //建临时表
begin
active:=false;
tablename:='print';
fielddefs.clear;
fielddefs.add('sb',ftstring,0,true);
fielddefs.add('rq1',ftdate,0,true);
fielddefs.add('sl1',ftinteger0,true);
fielddefs.add('rq2',ftdate,0,true);
fielddefs.add('sl2',ftinteger0,true);
//在这里还可以再加字段,想加多少就加多少
indexdefs.clear;
indesdefs.add('primaryIndex','sb',[ixprimary]);
createtable;
active:=true;
end; //临时表建立完成

with table1 do //向表中动态写入数据
begin
   append;
fieldbyname('sb').AsString:='sb1';
fieldbyanem('rq1').Asdate:=strtodate('80-12-1980');
.....
end;//向表中动态写入数据完成
  
end;
以后直接对table1操作就可以了
以上已经测试,但现在输入中可能有非法字符
 
关键是我不用ORACLE啊,是用DBASE表
 
以上的代码就适用于dbase。
我是说如果是oracle的话,就没有那么麻烦了,矩阵报表可以用上。
 
TO 三石: 那什么是矩阵表?怎么实现的?能教教我吗?
 
矩阵报表是oracle8i中报表生成器上一种专用的报表方案,oracle8i的文档中有这种报表的设计
如果你使用的不是oracle8i以上版本的话,可能用不上。
 
哦,谢谢你了。
 
后退
顶部