dbgrideh 的一个小问题,超难很有用(自动计算) 我想这个问题很有用?对大家也有很帮助

cc莫默 2007-09-11 05:40:25
具体是这样的,
摘要 借方, 贷方 余额
提现 100 100
付款 20 80
收入 200 280

要求在改变借方,贷方的值时, 余额随之发生变化
例子
把提现 借方100 改变150
结果就变成
摘要 借方, 贷方 余额
提现 150 150
付款 20 130
收入 200 330

我想这个问题很有用?对大家也有很帮助?
...全文
180 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
落幕年代 2012-06-12
  • 打赏
  • 举报
回复
还有你那 借和贷 一直没判断
落幕年代 2012-06-12
  • 打赏
  • 举报
回复
怎么解决的 把答案弄上来啊
天行归来 2007-09-12
  • 打赏
  • 举报
回复
借方和贷方是用户干预触发 OnChange 事件,怎么可能死循环导致堆栈溢出,是不是你在OnChange里头又设置该字段 的值?
另外,检查一下你的程序,是不是用了 "余额" 的OnChange?
hsmserver 2007-09-12
  • 打赏
  • 举报
回复
呵呵,不能写onchange中,那样肯定溢出的
cc莫默 2007-09-12
  • 打赏
  • 举报
回复
为什么在dataset.fields.onchange事件执行 adoquery1.Prior; 就报stack overflow错误
cc莫默 2007-09-12
  • 打赏
  • 举报
回复
谢谢lynmison ,hsmserver 两位我选试试
天行归来 2007-09-12
  • 打赏
  • 举报
回复
msn:lynmison@hotmail.com
cc莫默 2007-09-12
  • 打赏
  • 举报
回复
可我看见过别的程序实现过, 是实时变化的
hsmserver 2007-09-12
  • 打赏
  • 举报
回复
加个提交按钮用来提交
在onchang内不能改变记录指针
cc莫默 2007-09-12
  • 打赏
  • 举报
回复
两位有qq吗,方便告诉我一下,谢谢你们了
cc莫默 2007-09-12
  • 打赏
  • 举报
回复
两位好心人,能在帮帮我吗?hsmserver 说不能在dataset.fields.onchange事件中写 adoquery1.prior;
那要在那里写?
代码贴出来,请帮我看看
//借方字段的事件 我在这里先不减贷方数额
procedure TForm1.ADOQuery1jyChange(Sender: TField);
//var
// i,j:integer;
begin
//先上移一条
adoquery1.Prior;
//取出余额数
i:=adoquery1.FieldByName('ye').AsInteger;//余额
//下移一条,回到当前记录
adoquery1.Next;
while not adoquery1.eof do
begin
//取出当前记录的金额
j:=adoquery1.FieldByName('jy').AsInteger;
adoquery1.Edit;
//当前行记录余额等于 前一条记录金额(jy)加当前行记录余额(s)
adoquery1.FieldByName('ye').Value:=i+j;
//保存当前行记录的余额
i:=adoquery1.FieldByName('ye').AsInteger;
//记录下移
adoquery1.Next;
end;
end;
帮我看看,我实在太笨了,感谢两位,

天行归来 2007-09-11
  • 打赏
  • 举报
回复
hmserver其实已经给你答案了。
1、编写事件
procedure OnCalcBalance(sender: TField);
begin
当前记录集前移一条
取出余额
记录集.Next;
while not 记录集.eof
begin
根据摘要,处理数据逻辑关系
记录集.Next;
end;
end;

2、初始化,在打开记录集的时候动态绑定
procedure InitParam();
begin
打开记录集
if 记录集.FindField('借方')<>nil then 记录集.FindField('借方').OnChange := OnCalcBalance;
if 记录集.FindField('贷方')<>nil then 记录集.FindField('贷方').OnChange := OnCalcBalance;
贷方
end;
hsmserver 2007-09-11
  • 打赏
  • 举报
回复
先取当前记录行的改变以后的数据假如为i
然后prior取数据假如为j
再next然后根据借方和贷方是否为0判断j:=j+vale;
一直到eof不就行了

cc莫默 2007-09-11
  • 打赏
  • 举报
回复
不是流水,有点像银行对账,

lynmison 我如何获取上一个余额字段的数据 如果是同一记录的我知道用onCalcFields就能实现
hsmserver 2007-09-11
  • 打赏
  • 举报
回复
和grideh有什么关系
你可以在dataset.fields.onchange中
写代码重新生成
好象你也对业务不太清楚,一般流水是不允许改的
新增或着冲红的方式
天行归来 2007-09-11
  • 打赏
  • 举报
回复
这个很简单,在记录集的字段对象OnChange作计算就可以了。即,借方/贷方值发生变化,计算余额。
cc莫默 2007-09-11
  • 打赏
  • 举报
回复
这个问题难到没个遇到过?

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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