三层取返回值问题 (100分)

  • 主题发起人 主题发起人 goldstone
  • 开始时间 开始时间
G

goldstone

Unregistered / Unconfirmed
GUEST, unregistred user!
在三层中,我通过clientdataset.applyupdate(0)向服务器提交插入操作,由于其中的id是种子型,我在客户端无法取得,既clientdataset新插入的记录中id字段是空,实际是有值的,如何取回来
 
在提交之前先取得当前最大的ID值,那么你插入的记录的ID就是"取得的最大的ID"+1
 
id是种子型,id+1是不对的,而且我在提交完之后才可以取得id,可是clientdataset里id是空的,难到要自己在clientdataset上自己给他加上去吗
有没有别的办法
 

ClientDataSet1.FieldByName('ID').NewValue;
试试,它是取记录的新值
 
ClientDataSet1.FieldByName('ID').NewValue;
用过,也是空值
 
你用的是哪种数据库?
 
对了,种子型不需要你对它赋值,它会自动生成,你若要知道是多少
只要在clientdataset.applyupdate(0)后去数据库里取一下就行了
(Oracle 里的种子用SQL语句赋值如:SQ_ORDER_FORM是种子型,用
SQ_ORDER_FORM.NEXTVAL赋新值;SQ_ORDER_FORM.CURRVAL取当前值)
个人观点。
 
现在问题是clientdataset。applyupdate(0)后,其实数据已经提交给数据库而且成功,但是
clientdataset里没有id的值
 
关注
这问题也曾让我很头大,我采用了马上刷新的方法,clientdataset.refresh,
但效果不好,所以我现在基本上不用多层结构了
 
请在DataSetProvider1中的OnGetData中撰写程序代码即可,可用在Detail文件参考资料文件中的UpdateDate
 
clientdataset.refresh的效果是不好,也可能根本没用。
我用的方法是:
clientdataset.close;
clientdataset.open;
就行了
 
clientdataset.close;
clientdataset.open;
太夸张了吧,一切白努力了,重新去数据
 
不好意思,没看清题意!我上面说的是如果你想知道要添加记录的ID可以这样做,至于显示
在ClientDataset中,应该在提交后刷新(先Close再Open),这样才能从服务器获取提交后生
成的ID!
 
先Close再Open这是很恐惧的事情,如果记录有100000条怎么办,要半天才能取回来,不行的
 
有人回答再加分
 
先说清楚你用什么数据库,
再把你的添加数据的那段代码贴出来看看,不然谁搞的清呀
 
三层结构的客户端和数据服务器端在多数情况下是不保持联系的
当客户端取得了数据后,就存放在一个本地的文件里
这时如果客户修改或增加数据,本地的CLIENTDATASET会有另一个文件
对变化的内容(增、减、修改)有个记录。根据这些记录CLIENTDATASET
会组织SQL语句发给数据服务器执行。
这时问题出现了:
如果数据服务器的数据被其他用户作了改动,该如何立即体现在客户端
(你的问题类似于此,只不过ID是由计算机修改的)
李维的 《DELPHI5。X分布式多层应用系统篇》里对此有一般详细的介绍
我考虑用的方法是:在服务器里把刚刚更新的内容查询出来(一般情况下数据不会很大)
而不是CLOSE 再OPEN重新下载所有的数据,根据这些数据来更新本地的那个文件。
例如:你的情况,只需在服务器把更新后的ID值取出在改写本地的。
 
szhhp 这种方法我做了,总是感觉不太好,有没有更好的。
 
用不着显示id值,读是可以读出来的,我做的系统就是这样用的,没出过问题
 
后退
顶部