来了解一个关于query+datasource+DBGrid的概念问题?(100分)

  • 主题发起人 主题发起人 yybug
  • 开始时间 开始时间
Y

yybug

Unregistered / Unconfirmed
GUEST, unregistred user!
将一个query的cacheupdate和requestlive设为true,query的数据提交由updatesql来实现。下面的理解对不对?
当在dbgrid中加一条记录时,触发datasource的statechange进入dsinsert状态。
可我在DBnavigator上连续按4次insert,却发现触发了4次statechange.(我认为应该在insert状态不退出来,即一次statechange)。

添加纪录过程中,按cancel,又应该触发datasource的什么事件?

添加纪录后,点击别的记录或按post,在datasource中是否都是由insert状态转到brower状态,即一次statechange?

点击按钮,执行query.ApplyUpdates; 是否会触发query的onUpdateRecord事件?我在该事件里面写如下代码是否必要
UpdateSQl.DataSet:=Query;
UpdateSQl.Apply(UpdateKind);
UpdateAction:=uaApplied;
incData:=0;(incdata用于自动编号,因为query缓存了很多新纪录,我本想通过datasource计数进入dsinsert的次数,然后加上数据库中已有的记录数形成编号。最后在提交数据库时,对计数器incdata清零)。现在我发现执行query的ApplyUpdates根本不触发onUpdateRecord事件。

像自动编号这种功能,应该如何实现呢?(不想用数据库底层支持的)
 
自动编号?
好方法还是坏方法?
好方法:用数据库自带的自编号功能。比如:SQL SERVER的识别种子 ORACLE里面的伪列
ACCESS的自动编号字段

坏方法:建一个表sys_ID,只要一条记录
字段如下: ID FID1 FID2 …………
表的关键字 自动编号的一个字段1 自动编号的一个字段1

然后写两个函数,sp_GETID(field:string) sp_PutID(field:string)
前者可以获取当前字段的值,后者可以更新字段值,参数是指明要更新哪个字段
呵呵,个人觉得这样的方法,可移植性强,
不过增加了系统的开销。

这样可以了么?如果不可以,我可以写段示范程序,

 
我的意思是:
一个车辆租用库,它的车辆租用单编号是自动生成的,结果如下:
租车单编号 租车人 租车时间 用途
2002-002 张三 2002-09-10 取货
2002-003 李四 2002-10-01 送人
.....
2002-100 张三 2002-11-10 送人
......
 
使用datasource的onUpdateRecord事件计数,效果好了很多。
还要注意一次提交居然有2次OnUpdateRecord事件。
欢迎大家继续谈论
 
后退
顶部