如何自动生成编号??不重复的。删除就可能会出现重复。请问如何解决(100)

  • 主题发起人 主题发起人 jink
  • 开始时间 开始时间
问题:1、button1Click: adoquery.append;adoquery2.append; adoquery1.fieldbyname('客户名称').asstring:=edit1.text; adoquery2.fieldbyname('客户名称').asstring:=edit1.text; adoquery1.post; adoquery2.post2、adoquery2.locate('客户id',adoquery1.fieldbyName('客户ID').asstring,[]); adoquery2.edit; adoquery2.fieldbyname('客户名称').asstring:= adoquery1.fieldbyname('客户名称').asstring; adoquery2.post;3、在dbGrideh1增加一个事件:dbGrideh1Click; begin adoquery2.locate('客户id',adoquery1.fieldbyName('客户ID').asstring,[]); //adoquery2始终会跟着adoquery1动。 end;4、自动编号: 只增加新的,删了的不再用: adodataset1.Append; function GetBagID:string; var i:integer; begin result:=con1.execsql('select max('客户ID') from 表1); i:=strtointdef(copy(result,5,4),0)+1; result:='KH'+formatdatetime('yy',now) +copy(format('%.4f',[i/10000]),3,4);//9999内不重复 end; 删了补用:function GetBagID:string;var i:word;begin i :=1; qryGetID.sql.text:='select id from tableName order by id'; qryGetID.open; while (not qryGetID.Eof) do begin if qryGetID.FieldbyName('id').AsInteger=i then begin inc(i); end else break; qryGetID.Next; end; qryGetID.Close; result:=inttostr(i);end;
 
谢谢 大器晚成 哦
 
自动生成编号的函数给你 不是很好 里面的代码写的很简单,早的时候写的 没有优化! function getDjbh(Headstr:string;DbBiaoStr:string;zdname:string;iLen:integer=3):string; // 例如: dm.getDjbh('CGD','cg_cgd','bh') 得到采购单号 开始头为CGD 表为cg_cgd 列名为bhfunction TDm.getDjbh(Headstr, DbBiaoStr, zdname: string; iLen: integer): string;varq_show:TAdoquery;i,k:integer;str:string;begin q_show:=Tadoquery.Create(nil); q_show.Connection:=adoc; q_show.SQL.Add('Select max('+zdname+') from '+DbBiaoStr+' where '+zdname+' like '''+Headstr+FormatDateTime('yymmdd',Now)+'%'''); q_show.Open; if isnull(q_show.Fields.Fields[0].asstring) then begin if ilen=3 then result:=Headstr+FormatDateTime('yymmdd',Now)+'001'; if ilen=2 then result:=Headstr+FormatDateTime('yymmdd',Now)+'01'; end else begin if ilen=2 then begin str:=q_show.Fields.Fields[0].AsString; i:=strtoint(copy(str,length(str)-1,2))+1; if i<10 then result:=Headstr+FormatDateTime('yymmdd',Now)+'0'+inttostr(i) else result:=Headstr+FormatDateTime('yymmdd',Now)+inttostr(i); end; if ilen=3 then begin str:=q_show.Fields.Fields[0].AsString; i:=strtoint(copy(str,length(str)-2,3))+1; if i<10 then result:=Headstr+FormatDateTime('yymmdd',Now)+'00'+inttostr(i) else if (i<100) and (i>=10) then result:=Headstr+FormatDateTime('yymmdd',Now)+'0'+inttostr(i) else result:=Headstr+FormatDateTime('yymmdd',Now)+inttostr(i); end; end; q_show.Free;end;
 
好用不好用也需要你“之”一声的!
 
zkktom的函数可以,但是如果是多客户操作的话在前台生成编号有重复的可能性非常大,最好的办法就像 songrun 说的那样 在存储过程中操作,加事务处理更保险
 
后退
顶部