ado+access中,如何解决access自增字段中序号连续的问题?---关税有分。(200分)

  • 主题发起人 主题发起人 ldaan3
  • 开始时间 开始时间
esinmon的方法也可以
 
多谢pwq1,这样可以了。
还是有疑问,那这样的话,我进行每进行一次删除或者是增加,
那么都要adoquery.close ,然后在 open 一次,
我的表中大约有1 万条数据, 这样删除一次的动作 到 重新排好,不是很慢???
其他人对此有什么看法呢?
 
有没有搞错?你的ID字段是什么类型的?不是长整型的吗?
字符型才用引号,数值型不用引号!
 
以我的经验,对一个数据集open 是最花时间的事情。
不知大家有没觉得?
 
如果这个字段不是其它表要引用的,和其它功能没有关系,只有在查看时有用,那还不如
用RecNo来取得记录的序号
 
to ldaan3:
>>对一个数据集open 是最花时间的事情
是不是最花时间我不知道,不过我打开6000条记录从没超过200毫秒。当然,前提是
你没有BLOB数据如图像。
 
呵呵,我第一次打开一个数据集时超慢,花了5秒钟,而数据还不到100!!!
一步一步调试,原来在执行adoquery1.active;=true那里停顿了好久,才知道原来是那里的问题。
 
我也碰到过这样的问题,而且跟麻烦。
就是数据表的排序不按自增字段排序。
我设了主键的啊。
为什么哪??
 
删除后
将自增字段删除
修改表结构不知可以吗?
 
就直接用命令把这个字段设置为相应记录数号不行吗?
 
1、自增字段不可能
2、增加一个数据表纪录当前纪录号,增加时加1,删除时减1,只是为加速用
3、当删除纪录号小于当前纪录号时,表中记录向前移动
注:这是什么要求?太费时!
 
ldaan3:你后面是怎么解决的啊?我现在也有这个问题,打开一个才2个字段,1条记录的数据
库居然花了1秒,分我可以另外给
 
用update,再优化cachesize.应该很快的.
我不知道你的所谓1,2,3,4的序号有没有前后意义,如果没有,可以这样,将第2条删除啦,就将最后地一条地序号改为2。
 
看了sql 的触发器语句说明,明白了一些。
可是不知道在delphi 中是怎么样使用触发器的,如:
create trigger mydelete on 111
for delete
as update ……
这个触发器语句是放在其他一个procedure 声明呢,
还是放在下面的adoquery1.sql.add()里面呢?
或者是其它地方呢?
procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;
begin
j:=0;
j:=adoquery1.Fields[0].AsInteger;
adoquery1.Delete;
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('update 111 set 序号=序号-1 where 序号>j');
adoquery1.ExecSQL;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from 111');
adoquery1.Active:=true;
end;



 
后退
顶部