我看到好多软件,起入库单单号是自动累加的
当然你可以另外输,它反正以后也会累加,
关于这方面的设计思想,请大哥们请教!

解决方案 »

  1.   

    1、使用触发器
    2、Select Max(字段名) Form 表名
    然后将返回的值加1————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  2.   

    我的入库单格式是:rk030901001,
    它由'rk'及'030901'日期及001组成,后面的数字自动能增加,在数据库中怎么找到最大值?
      

  3.   

    在SQL Server 中可以用如下的SQL语句实现:SELECT MAX(CONVERT(int, SUBSTRING(入库单号字段名, 3, 9))) AS maxrkdh
    FROM tb1
      

  4.   

    pilicat(delphi迷) :
    是否要限定日期,因为日期不同,最大值也不同。
      

  5.   

    Oracle有一个Dual表可以实现序列的自动累加!
    Create sequence aaa increment by 1 start with 1;--创建一个序列
    Select aaa.Nextval from Dual;--下一个值
    Select aaa.Currval from Dual;--当前值
      

  6.   

    var
       MaxBH, AYear, AMonth,fieldBh,firstA,maincode: String;
       i: Integer;
    begin
      AYear := DateToStr(DmDcom.SysDate);   //2003-08-07
      Delete(AYear, 5, 6);     //2003
      AMonth := MidStr(DateToStr(SysDate),6,2); // 08
      if MidStr(AMonth,2,1) = '-' then
      begin
        AMonth := '0' + AMonth ;
        AMonth := MidStr(AMonth,1,2);  //08
      end;
       firstA:='RK';     maincode:= firstA+UserName+AYear+AMonth;
      with DataSet do
      begin
        Close;
        CommandText := 'Select MAX('RKDBH')  maxbh From '+tablename
                     +' Where RKDBH  Like ''' + FirstA + UserName + '%'''
                     +'and SUBSTR(RKDBH,8,4)='+chr(39)+AYear +chr(39)
                     +'and SUBSTR(RKDBH,12,2)='+chr(39)+AMonth +chr(39)
                     +'and length(RKDBH)=16 ';
        Open;
        MaxBH := FindField('maxbh').AsString;
        close;
      end;  delete(MaxBH, 1, Length(MaxBH)-3);  try
        if MaxBH = '' then
        begin
          result := maincode+'001';
          exit;
        end;
        
        MaxBH := IntToStr(StrToInt(MaxBH) + 1);
        if Length(MaxBH) < 3 then
          For i := 1 to 3 - Length(MaxBH) do
            MaxBH := '0' + MaxBH;  //补零
        Result := FirstA + UserName + AYear+ AMonth + MaxBH;
      except
        Application.MessageBox('单据编号生成数据错误', '错误', MB_OK);
        Result := 'ERROR';
        Exit;
      end;
      

  7.   

    以上的方法解决不了多人同时并发的问题。
    具体的方法看你用的是什么数据库。
    如果是 ORACLE ,你可以建一个序列对象的字段,由 ORACLE 自己来控制单号的递增。-- Create sequence 
    create sequence inc_field
    minvalue 1
    maxvalue 999999
    start with 1
    increment by 1
    cache 20;
    以后你可以用 inc_field  来控制;
    如下所示在 INSERT INTO 时:CREATE TABLE MYTEST(ID NUMBER,NAME VARCHAR(8));insert into mytest values(Inc_field.Nextval, 'ddggd');Inc_field.Nextval  在那个字段的位置,那个字段便增中一,
    但是该字段必须在为 NUMBER 类型, 如上面的 ID 字段。
      

  8.   

    如果是oracle可能创建一个序列,它会自动增加的。如:
    create sequence ECS.AR_TAX_LINES_S
    minvalue 1
    maxvalue 2147483647
    start with 1
    increment by 1
    cache 20
    order;
    用下面语句取值:
    SELECT ECS.AR_TAX_LINES_S.NEXTVAL INTO NO FROM DUAL;如果是sql server用:
    SELECT MAX(CONVERT(int, SUBSTRING(入库单号, 3, 9))) AS maxrkdh FROM tb1
    或者用一字典表记录当前表的最大数,下次取出这个最大数加1即可。如现在为1005,就在这里写入1005,下次把1005取出加1,并update 1005为1006。
      

  9.   

    告诉我你的EMAIL,我会给你发一个我现在做的自增函数的,如果有问题的话请你告诉我
      

  10.   

    dickeybird888(于伟刚)
    我也想要一个,
    [email protected]
    建个表,存有当前的最大单据号,可以用触发器写
      

  11.   

    access数据库有一个自增的属性。看看书吧。
      

  12.   

    access数据库是有一个自增的属性,但你要可以另外输,然后累加就不行了。
    要实现这一点还是用一个表保存最大数。
      

  13.   

    nod楼上,你也可以通过sql语句或者视图生成
      

  14.   

    字符型不会按照数值大小排序,一般是这样:年月日+4位流水号,
    你可以用:select * from table order by convert(int,fieldname);//fieldname就是指序号字段名
    你可以
    last;
    str:=fieldbyname('fieldname').asstring;
    取出字符串,copy(str,1,6)取出年月日,再strtoint(copy(str,7,4))取出后4位的整形值,加1即可。