在这里重新开贴送100分,

zhujiangxiong 2003-12-12 03:23:27
我在做一个收费的东西,比如一合同货款100万,客户已经给我三次,第一次10万、第二次10万、第三次10万,这三次我都有记录(记录了金额、时间、经手人等),等于说我要看明细是可以了,如:
合同编号 应收款 已收款
001 100万 10(万)
001 100万 10(万)
001 100万 10(万)
但我现在还要一张表,就是
合同编号 应收款 已收款
001 100万 30(万)
第二张表我用了ADODataSet1.CommandText := 'select ''合同编号''=s_ht.ht_id, ''收款合计''=sum(s_skdmx.skdmx_skje) from s_ht,s_skdmx where s_ht.ht_id =s_skdmx.ht_id group by s_ht.ht_id';把给统计出来了,
但要命的是,我第二张表还想显示其它的字段信息以方便给人看,如:
合同编号(t1)客户名称(t1) 应收款(t1) 已收款(t2里几个记录相加)
001 上海 100(万) 30(万)
好象这样的表出不来,
问题一:
有没有办法(SQL语句)解决这样的表?

问题二:(用另外一种方法)
我再建一张表,用来累计一个合同收款的总数(skje_lj),我在保存每次收款记录的时候,把收款金额累计到skje_lj表里,再取我要的表就有了,但我不知道这个代码怎么写?就是把:收款的合同金额字段 + (收款累计表)的累计金额,然后改写上次的累计数。我记录收款的代码如下:
procedure Tdengjichengbenfm.BitBtn1Click(Sender: TObject);//"BitBtn1"保存按钮
begin
if ComboBox3.Text = '' then
begin
ShowMessage('你没有选择客户名称!请选择客户名称。')
end
else if ComboBox2.Text = '' then
begin
ShowMessage('你没有选择合同编号!请选择合同编号。')
end
else if ComboBox1.Text = '' then
begin
ShowMessage('你没有选择支付类型!请选择支付类型。')
end
else if Edit1.Text = '' then
begin
ShowMessage('金额不能为空!')
end
else
begin
ADODst.Open;
ADODst.Append;
ADODst.FieldByName('kh_khmc').AsString :=ComboBox3.Text;
ADODst.FieldByName('ht_id').AsString :=ComboBox2.Text;
ADODst.FieldByName('htcbmx_zcrq').AsString :=DateTimeToStr(DateTimePicker1.DateTime);
ADODst.FieldByName('htcbmx_cbmc').AsString :=ComboBox1.Text;
ADODst.FieldByName('htcbmx_je').AsString := Edit1.Text; //记录收费金额
ADODst.FieldByName('htcbmx_jsr').AsString :=Edit3.Text;
ADODst.FieldByName('htcbmx_bz').AsString :=Edit2.Text;
ADODst.Post;
就是要在收费信息登记完成是时把'htcbmx_je'+ 我新建累计表的累计数字段,并且改写该累计数?? <--------------------------代码加这里
ShowMessage('记录添加成功!');
close;
end;
end;

问题三 :
Key := #0和 Key := #7;分别代表什么键啊
...全文
21 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xmchw 2003-12-16
  • 打赏
  • 举报
回复
up
sandyboy 2003-12-16
  • 打赏
  • 举报
回复
我也要!
lgqTiger 2003-12-16
  • 打赏
  • 举报
回复
噢!楼主送分罗
jbzj 2003-12-16
  • 打赏
  • 举报
回复
有我的分吗?
bluz 2003-12-15
  • 打赏
  • 举报
回复
在adodataset手工加一个计算字段,让它等于后面两个字段相减就可以了。
jiayodo 2003-12-15
  • 打赏
  • 举报
回复
up
jxc163 2003-12-13
  • 打赏
  • 举报
回复
不知道
bxh2dai 2003-12-13
  • 打赏
  • 举报
回复
顶,呵呵
xyc189 2003-12-13
  • 打赏
  • 举报
回复
''未收合计''=(max(s_ht.ht_je)-sum(s_skdmx.skdmx_skje))
zhujiangxiong 2003-12-12
  • 打赏
  • 举报
回复
现在按照bluz() 的方法是可以了,出来的表格如下:
合同编号(t1)客户名称(t1) 应收款(t1) 已收款(t2里几个记录相加)
001 上海 100(万) 30(万)
但我还想再显示一个“未收合计”的字段,所以加上下面注释的语句

ADODataSet1.CommandText := 'select ''合同编号''=s_ht.ht_id,''客户名称''=max(s_ht.kh_khmc),''应收金额''=max(s_ht.ht_je), ''已收款合计''=sum(s_skdmx.skdmx_skje),

''未收合计''=(s_ht.ht_je-sum(s_skdmx.skdmx_skje)) //加上这句就不行了

from s_ht,s_skdmx where s_ht.ht_id =s_skdmx.ht_id group by s_ht.ht_id';

但是这样不行,懂SQL的说说该怎么加?
zhujiangxiong 2003-12-12
  • 打赏
  • 举报
回复
bluz() 真是牛啊!!我佩服和崇拜啊!!我搞了半天的时间你三个字母就帮助我解决了
我100相送
zhangnan623 2003-12-12
  • 打赏
  • 举报
回复
hh
bluz 2003-12-12
  • 打赏
  • 举报
回复
问题1可以这样解决,在想加入的字段上加max,例如 max(客户名称)

5,388

社区成员

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

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