如何在InterBase(5.0)里实现AutoINC字段?(50分)

  • 主题发起人 主题发起人 haitao
  • 开始时间 开始时间
H

haitao

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在InterBase(5.0)里实现AutoINC字段?

我按对help的理解,作了如下操作,以失败告终,
请各位指教。

所有操作均在SQL Explorer里进行。

创建的Table如下:
CREATE TABLE CJ_QYYM (
F_ID INTEGER, //希望它是autoinc类型
FNO CHAR(8),
FYM INTEGER
)

在database的Generators中新建:
CREATE GENERATOR GENQYYMID;
SET GENERATOR GENQYYMID TO 2

在CJ_QYYM的Triggers中新建:
CREATE TRIGGER TRIQYYM FOR CJ_QYYM AFTER UPDATE POSITION 0 AS
BEGIN
new.f_id=gen_id(genqyymid,1) ;
END

在CJ_QYYM的Data页进行新增记录,
不动f_id字段,任意输入fno,fym字段,
结果发现f_id字段始终是空着!
并没有自动递增填数!
 
1、f_id=用主键!
2、用before insert触发器!
 
谢谢!还是Delphi-fun :)
文中的
CREATE TRIGGER TRIQYYM FOR CJ_QYYM AFTER UPDATE POSITION 0 AS
实际已经试过Before/After Insert/Update的所有组合。
记得F_ID设为非NULL,Primary Key设为F_ID,也试过!
不过刚才再试,可以了!
(只是不填F_ID时,会报错,随便填一个,再保存、刷新
--可能以前没注意刷新,
就看到自动递增的F_ID了!)

我最近因Paradox作ISAPI(CGI)的数据库,有很多memo型字段,
(主要用于一个基于web的内部办公管理系统。
http://www.netease.com/~haitao/oaweb/index.htm)
当.mb文件达到1M多时,频繁出错!
决心移到InterBase,只是Paradox的AutoInc用惯了。

现在第一次试成了!

得寸进尺:现在使用方便了,但是设置不方便,而且复制数据库Table
也不能直接将Generators、Triggers随同复制。
能不能也象Paradox这样方便:一选类型即可。

另外在Sybase上,听说将一个字段设为Identity就可达到
AutoInc的效果--如果真的,倒也象Paradox这样方便了。
但是,今天我一试,发现:
不填F_ID时保存,会报错:Field must have a value;
而填F_ID时保存,会报错:Explicit value specified for identity
is table XXX when IDENTITY_INSERT is set yo OFF.
这不是跟我过不去 :-<
 
在这里,提个问题还要扣分,:-(
应该鼓励大家提问题才是啊。
只好在这里以注释方式提出:
我试着以Delphi3连Sybase,发现用
Table1.Locate(...)时,速度奇慢,
而且内存使用暴涨!
而连本地的InterBase就正常。
难道Locate一个Sybase表是将这个表
读到Client才比较的吗?!

后来,该为Tquery(select ... where ...)才正常。
总感觉这样会丢掉些什么。
 
后退
顶部