delphi edit显示数据库的编号字段,默认是0001,不可修改,如果每添加一条记录自动+1即第二条记录为0002
以此类推。数据库编号字段为bh;连接数据用的是adoconnectiondatasourceadoquery;这个功能怎么实现呢?...
以此类推。数据库编号字段为bh;连接数据用的是adoconnection datasource adoquery;这个功能怎么实现呢?
展开
3个回答
展开全部
前面二位的搞法,不是不可以,而是是否符合要求。如果采用表中记录数加1,比如表中原有记录数是100,最后一条记录的编号是0100,现在加一条记录,编号应该是0101,但是再加这条记录之前,用户删除了一条编号为0078的记录。因此按照记录数加1,这条新加记录的编号就会仍然为0100,这样编号字段值是0100的记录就有二条了。重复了,之所以要编号,就是为了使记录有所区别,这又怎么办呢?另外我希望新添加记录编号是那条被删除的记录的编号,又怎么办呢?这就需要的新的编号进行合法性检测,而且一次检测还不行,这当然比较简单,就是按记录数加1的原则取得一个编号之后,就对表中这个编号是否存在进行检测,如果不存在,就停止检测,进行赋值操作,如果已经存在,就再次加1,进行再次检测,用一个直到型循环语句就可以解决了。
但是,要填补被删除的编号就麻烦了,除非你知道这个被删除的编号,直接在编号编辑框输入这个编号,但用户是不愿意记住这个编号的,其实这也不符合软件处理事务的规则,什么软件,还要用户用脑子记数据,这就需要程序员用代码来找那个被删除的编号了,写找编号代码当然简单,从第一个编号开始,一个一个找,直到找到为止。这种办法对于记录在千条以下,还可以,当记录超过一千条时,找这个过程就够长咯,我试过千条以内可能需要一秒钟,程序的停顿感很明显。大家有没有办法,尽量的缩短找的时间。希望赐教。
但是,要填补被删除的编号就麻烦了,除非你知道这个被删除的编号,直接在编号编辑框输入这个编号,但用户是不愿意记住这个编号的,其实这也不符合软件处理事务的规则,什么软件,还要用户用脑子记数据,这就需要程序员用代码来找那个被删除的编号了,写找编号代码当然简单,从第一个编号开始,一个一个找,直到找到为止。这种办法对于记录在千条以下,还可以,当记录超过一千条时,找这个过程就够长咯,我试过千条以内可能需要一秒钟,程序的停顿感很明显。大家有没有办法,尽量的缩短找的时间。希望赐教。
展开全部
function getid()
var
a:string;
i:integer;
with adoquery1 do beign
close;
sql.clear;
sql.add('select max(bh) as bh from table ');//oracle 数据库去掉as
execsql;
open;
a:=trim(fieldvalues['bh']);//也可以取EDIT的值。a:=trim(edit1.text);但edit1.text先要得到数据表中的最大BH。否则每次从0001开始计数
i:=strtoint(a);
i:=i+1;
a:='000'+inttostr(i);
reslult:=copy(a,length(a)-3,4);
end;
每添加一条记录,调用一下这个函数。
edit1.text:=getid();
如果需要插入到表中,也应该知道怎么调用了吧
var
a:string;
i:integer;
with adoquery1 do beign
close;
sql.clear;
sql.add('select max(bh) as bh from table ');//oracle 数据库去掉as
execsql;
open;
a:=trim(fieldvalues['bh']);//也可以取EDIT的值。a:=trim(edit1.text);但edit1.text先要得到数据表中的最大BH。否则每次从0001开始计数
i:=strtoint(a);
i:=i+1;
a:='000'+inttostr(i);
reslult:=copy(a,length(a)-3,4);
end;
每添加一条记录,调用一下这个函数。
edit1.text:=getid();
如果需要插入到表中,也应该知道怎么调用了吧
更多追问追答
追问
我没用过函数的方法耶 能给出完整的代码么?谢谢拉
追答
放到你事件之后,var之前就行了。
procedure TfmReceiving.button1Click(Sender: TObject);
//把函数全部复制到这里就行,在这个事件中你就可以调用了
var
s:string;
begin
如果几个事件中都要调用,就需要复制到外面,和事件平级,然后在前面定义一下这个函数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-04-11 · 知道合伙人软件行家
关注
展开全部
以bh字段进行排序 -> 获取最后一条记录的bh值 -> 下条bh := Inc(StrToInt(bh))
更多追问追答
追问
怎么获取最后一条记录的值,还有编号必须是4位数的
追答
以bh字段进行排序,db.last ,Format('%.4d', ibh)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询