关于数据库的计算及相关库的更新问题(100分)

  • 主题发起人 主题发起人 老Q
  • 开始时间 开始时间

老Q

Unregistered / Unconfirmed
GUEST, unregistred user!
本人正在做一个数据库管理系统,遇到这样一个问题:如何才能使DBGrid只显示本次追加的记录,并且提交本次追加的记录到数据库后,同时更新相关的表。比如两个表,销售表和库存表,本次销售一台电视机,两台冰箱,三台空调,要求只在DBGrid中显示本次销售记录,并且提交到数据库时库存表做相应的计算改动,请写出代码
 
至少有两个办法
1. 笨方法:做一个临时表,开始时即清空,确认之后才进入主库
2、TTable 有个属性,可以确定显示何种记录的,以前用过,但现在找不到了 :(
 
..demos/DB/CachedUp
 
在TQuery中写SQL:
Query1.Sql.Text := 'select * from aaa where 1=2';
Query1.Open;
这样得到的结果是空的。DBGRID显示也是空。
然后增加记录……
这时候DBGRID中显示的只有你的新记录。
增加完后提交……
不知道这是不是你要的效果。
 
增加完后再做一次查询,用adminis的方法。
一次改多个表可以用事务提交的方法。
to crab:用table的方法是用Filter属性。但是这个属性不太好用。不如SQL方便。

 
各位大虾:
我想使用TTable控件的CachedUpdates属性,打开销售表时,
将它的UpdateRecord属性设置为rtInserted, 这样,就可以在
销售窗口中只看到新增的销售记录,但是需要一个函数来更新
库存表,这个函数如何写,那位大虾肯帮忙?
 
呵呵,我想起来了,就是那个 rtInserted 属性,谢谢。
更改库存表,可以遍历 销售表的每条记录,查到在库存表中的对应记录,查到,
则更新数量,查不到,则增加新记录。
table1.first;
while not table1.eof do begin
if table2.FindKey(table1.fieldbyname('商品编号').AsString) then
begin table2.edit;
table2.fieldbyname('数量').Asinteger := table2.fieldbyname('数量').AsInteger + table1.fieldbyname('数量').Asinteger;
table2.post
end else begin //插入新记录
table2.Append;
//设置新记录属性
table2.fieldbyname('数量').Asinteger :=
table1.fieldbyname('数量').Asinteger;
table2.post
table1.Next;
end; //while
 
首先谢谢Crab大侠多次帮助,继续请Crab大侠及其他各位大侠拉一拉:
Crab大侠提供的例程很好,很有帮助,基本解决了我的问题,能够只显示
新追加记录,并将库存表更新,我已经试过了,可是新的问题又出现了,
当先后两次追加的记录有相同的"销售日期"和"商品代号"时,总是出现
"key violation"的错误提示,不知是什么原因?都快急死我了!我
使用的是Paradox表,"销售日期"和"商品代号"字段都有key
 
接受答案了.
 
后退
顶部