问题讨教?(50分)

  • 主题发起人 主题发起人 hnzqw
  • 开始时间 开始时间
H

hnzqw

Unregistered / Unconfirmed
GUEST, unregistred user!
有两个表,
进货表:进货ID、进货日期、供货商、品种、进货数量、进货金额
付款表:付款ID、进货ID、付款日期、付款数量、付款金额
GRID1中显示的为一个来自上述两个表联合查询的结果。如下:
付款ID 付款日期 供货商 付款数量 付款金额

要实现的目的为:在GRID中浏览纪录时,在4个LABEL中分别显示当前供货商的进货数量总和、
进货总金额;付款总数量、付款总金额。



 
另外用2個TQuery,用sql的Group by 語句等到這些和,顯示出來就可以了
query2.sql.add('select SUM(进货数量),SUM(进货金额) from 进货表');
query3.sql.add('select SUM(付款数量),SUM(付款金额) from 付款表');
label1.caption:=query1.fieldbyname(SUM(进货数量)).AsString;
label2.......(下面3個label略)......
 
但我希望查询的结果是根据GRID中供货商的不同在LABEL中得出不同的值。
你的意思是在TQUERY中另外要加参数吧?
我在程序中动态生成两个TQUERY组件,但感觉运行时对速度影响大。能不能详细地解绍一个好的方法。谢谢!
 
SQL语句可以这样写:
query1.sql.add('select 供货商,SUM(进货数量),SUM(进货金额),SUM(付款数量),SUM(付款金额)
from 进货表 left join 付款表 on 进货表.进货ID=付款表.进货ID group by 供货商');
然后给query的Filter属性付值:
query1.Filter:='供货商='''+Edit1.text+'''';
然后调用
label1.caption:=query1.fields[0].AsString;
label2.caption:=query1.fields[1].AsString;
label3.caption:=query1.fields[2].AsString;
label4.caption:=query1.fields[3].AsString;
当然你可以把Edit1.text换成你在Grid中选择到的数据,
当更换供应商时,给query1.filter和label.caption重新付一次值。
 
多人接受答案了。
 
后退
顶部