请问一下我有一个客户订单窗体,当我添加资料时,订单编号是:日期(090506)+001....这样编下去,现在问题出来了,当我每次关闭时还要判断编号是否重复,并且我每次单击新增时编号是自动产生.

解决方案 »

  1.   

    GUID
    DATETIME
    随便你怎么生成啊
      

  2.   

    订单号系统自动生成,日期+001形式,每次新增的时候获取系统时间,然后从数据库中读取最大编号,把最后三位读取出来加1作为新的订单号。
    {------获取最大编号------}
    function GetMaxNum: string;
    var
      tmpstr: string;
      qdx: TADOQuery;
      count: Integer;
    begin
      //格式为:DX080505-001
      qdx := TADOQuery.Create(nil);
      qdx.Connection := DataModuleForm.ADOConnLVDX;
      try
        tmpstr := LSzh + RegulateDate(Now);
        qdx.Close;
        qdx.SQL.Text := 'select count(*) as sum from TbDataNum where xnum like ''' + tmpstr + '%''';
        qdx.Open;
        count := qdx.FieldValues['sum'];
        if count = 0 then
          Result := tmpstr + '-001'
        else
        begin
          count := count + 1;
          case Length(IntToStr(count)) of
            1: Result := tmpstr + '-00' + IntToStr(count);
            2: Result := tmpstr + '-0'  + IntToStr(count);
            3: Result := tmpstr + '-'   + IntToStr(count);
          end;
        end;
      except
        on EOleException do DBConnFlag:=False;
      end;
      qdx.Free;
    end;
      

  3.   

    日期加时间:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      s:string;
    begin
       s:=formatdatetime('yyyymmddhhmmss',now);
       showmessage(s);
    end;
      

  4.   

    有的数据库有自增字段,建立自增字段,使用GUID函数,利用日期函数获得系统日期,将系统日期与编号两个字符串合并,建立触发器,在插入数据时执行触发器中的代码。
      

  5.   

    建议建立一个触发器,将单号由formatdatetime('yyyymmdd',date)+流水号组成
      

  6.   

    {------获取最大编号------}
    function GetMaxNum: string;
    var
      tmpstr: string;
      qdx: TADOQuery;
      count: Integer;
    begin
      //格式为:DX080505-001
      qdx := TADOQuery.Create(nil);
      qdx.Connection := DataModuleForm.ADOConnLVDX;
      try
        tmpstr := LSzh + RegulateDate(Now);
        qdx.Close;
        qdx.SQL.Text := 'select count(*) as sum from TbDataNum where xnum like ''' + tmpstr + '%''';
        qdx.Open;
        count := qdx.FieldValues['sum'];
        if count = 0 then
          Result := tmpstr + '-001'
        else
        begin
          count := count + 1;
          case Length(IntToStr(count)) of
            1: Result := tmpstr + '-00' + IntToStr(count);
            2: Result := tmpstr + '-0'  + IntToStr(count);
            3: Result := tmpstr + '-'   + IntToStr(count);
          end;
        end;
      except
        on EOleException do DBConnFlag:=False;
      end;
      qdx.Free;
    end;
      

  7.   

    给你两个函数,分别在程序启动时调用一次(getNum),和每次生成新编号后调用一次(setNum)就可以了(也可以只需在在程序关闭时调用一次)。
    还要注意你的编号生成时加一个判断比如:
       function getNewNum:string;
       begin
          //为了适应你的程序开着过夜,第二天继续运行,需要重新排号
          if curDay <> date() then
          begin
            curDay := date();
            curNum := 1;
          end
          else
            Inc(curNum);
          // 在下边根据你需要的格式和位数返回你需要的编号
       end;
     
    全局变量  curNum:integer;    //当前最新编号
     curDay:TdateTime;  //今天的时间
     procedure getNum;  //加载最新号码
     var
        tmpNum:Tstringlist;
     begin
        tmpNum := Tstringlist.create;
        tmpNum.LoadFromFile(ExtractFilePath(Applicaiton.exename)+'curNum.ini');
        if strtodate(tmpNum[0])<>date() then
           curNum := 1
        else
           curNum := Inc(strtoint(tmpNum[1]);
        curDay := Date();
        tmpNum.free;
     end; procedure setNum;   //设置最新号码
     var
        tmpNum:TstringList;
     begin
        tmpNum := Tstringlist.create;
        tmpNum.Add(datetostr(date());
        tmpNum.Add(inttostr(curNum));
        tmpNum.saveAsFile(ExtractFilePath(Application.exename)+'curNum.ini');
        tmpNum.Free;
     end;