hur.cn - 华软网

 热门搜索

这样的效果PB能做到吗???

  作者:未知    来源:网络    更新时间:2018/10/11
我的数据库为oracle8.17,其中有一个名为cgcgcg的表,cgcgcg中有两个字段id,dwbm,其中ID字段为自动增加字段,自动增加字段我通过在oracle中建了一个触发器和序列来实现的,下面是触发器与序列的sql
*******************************
-- Create sequence 
create sequence SE_CG
minvalue 0
maxvalue 210522999999999
start with 210522800021
increment by 1
cache 20;
*****************************
create or replace trigger tr_cg2
  before insert on cgcgcg  
  for each row
declare
  -- local variables here
begin
  select SE_CG.NEXTVAL INTO :NEW.ID FROM DUAL;
end tr_cg2;

现在我针对cgcgcg表做了一个数据窗口,我想要实现当我按下[增加]按钮的时侯,我就能看到ID字段此时就能自动生成一个新的编号!!!,我原来的效果是当按下保存按钮后我才能看到新的ID编号,请问要实现这样的效果,详细代码该怎么写???????????????

------华软网友回答------
不行,除非就是你insert一条,然后检索出来,这样和你新增的效果差不多
------华软网友回复------
一定行的,东软的人做出来了,我已经看到了效果,只是苦于没有源码,谁能回答我的问题???????
------华软网友回复------
通常为自己独自建张专门寄存当前最大流水号的表,不用触发器,当点“增加”按钮时,即从该表掏出该最大值加1赋给流水号字段即可
------华软网友回复------
你看不到东软的源码怎么知道不是Insert的呢
这类情况就算直接在Oracle里填都要保存后才出来正确的编号
------华软网友回复------
如果只是你一个人对该表操作,且一次只措置惩罚一条记录,能够用
select SE_CG.CURRVAL FROM DUAL;
取得序列的当前值

如果是多用户并发操作或一次措置惩罚多条记录,只可在保存后再掏出来。
------华软网友回复------
按照楼主的思绪是不行的,由于在增加时你没有提交事务对象,后端是不会马上新增的。

如果楼主要在新增时看到效果,能够在新增时从数据库掏出最大的ID号,然后加1后,setitem到datawindow所对应的列。我想你所说的东软应该是这样做的。
------华软网友回复------
东软的做法应为前台插入编号,后台保存执行
------华软网友回复------
不要用触发器, 插入时在前台用 select SE_CG.NEXTVAL INTO :ll_key FROM DUAL; 将ll_key赋给插入的行
------华软网友回复------
按照progrose的说法,请问我的[新增]按钮的click事件的源码是什么?给出源码马上结贴
------华软网友回复------
如 2002 所说的做,就能够到达你的效果
------华软网友回复------
按照progrose的说法,请问我的[新增]按钮的click事件的源码是什么?给出详细源码马上结贴?????????????????????????????????????????????????????
------华软网友回复------
增加的时候把值赋给id字段就能够了:

//声明
sting ls_id//序列id,字符型,不对能够改


//连接数据库代码自己填,如果已经连上就不用再联了,由于要从数据库中取序列
    ……
    select SE_CG.nextval into ls_id from dual;
    dw_1.setitem(dw_1.insertrow(0),"id",ls_id)
//断开数据库的代码自己设定
------华软网友回复------
这样的话新增时取序列,不保存的话,抛弃序列,不影响数据库主键唯一性      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。