我想单号是200305060001的形式,前八为是日期,后面是区分本日内的号码(它是加一递增),我在窗体内有edit1,在窗体启动时根据当天日期和本日库里的最大号码,将号码加一,然后组合日期,生成新的单号??如果库里没有当天记录,则单号号码为0001,这个代码怎么写呀??在那里写??请指教??

解决方案 »

  1.   

    在BeforeInsert里面加入计算代码:下面过程做参考,功能相同!位数不同Flow_Str为流水帐号=单号是200305060001。
    procedure Calc_Id;
    var Flow_Str,Mid_Str,Last_Str:String;
    begin
      Flow_Str:=Data_Str(now);
      with Query_Calc do
      begin
        Close;
        SQL.Clear;
        Query_Main.DisableControls;
        SQL.Text:='Select top 1 Flow_id From hwqsd where flow_id like ''%'+Flow_Str+'%'' order by Flow_id DESC';
        try
          Open;
        except
          ShowMessage('数据库出错');
          Query_Main.EnableControls;
          Exit;
        end;
      end;
      if Query_Calc.RecordCount<>0 then
      begin
        Mid_Str:=Query_Calc.FieldByName('Flow_id').AsString;
        Query_Calc.Close;
        if Pos(Flow_Str,Mid_Str)<>0 then
        begin
          Last_Str:=IntToStr(StrToInt(RightStr(Mid_Str,3))+1);
          if Length(Last_Str)=1 then
            Insert('00',Last_Str,1);
          if Length(Last_Str)=2 then
            Insert('0',Last_Str,1);
          Mid_ID:=LeftStr(Mid_Str,8)+ Last_Str;
        end else
          Mid_ID:=Flow_Str+'001';
      end else
        Mid_ID:=Flow_Str+'001';
      Query_Main.EnableControls;
    end;
      

  2.   

    提交的太快了,还没有写完。
    ………………………………
    function Data_Str(MyCurrDate:TDateTime):String;   //生成日期字符串的函数
    var Mid_Str:String;
        Mid_Value:Integer;
    begin
      Mid_Str:=inttostr(yearof(MyCurrDate));
      Mid_value:=Monthof(MyCurrDate);
      If Mid_value<10 then
        Mid_Str:=Mid_Str+'0'+IntToStr(Mid_value)
      else
        Mid_Str:=Mid_Str+IntToStr(Mid_value);
      Mid_value:=dayof(MyCurrDate);
      If Mid_value<10 then
        Mid_Str:=Mid_Str+'0'+IntToStr(Mid_value)
      else
        Mid_Str:=Mid_Str+IntToStr(Mid_value);
      Result:=Mid_Str;
    end;
      

  3.   

    TForm.Create(..)里写:
    var sDate,sBillNo: string;
    begin
       sDate:=FormatDateTime('yyyymmdd',date);
       //检索数据表是否为空,如果是 则:
       edit1.text:=sDate+'0001';
       //否则,查找单号最大的(用select max(单号)...)
       sBillNo:=inttostr(strtoint(copy(最大的单号,9,4)+1));
       case length(sBillNo) of
       1:   edit1.text:=sDate+'000'+sBillNo;
       2:   edit1.text:=sDate+'00'+sBillNo;
       3:   edit1.text:=sDate+'0'+sBillNo;
       4:   edit1.text:=sDate+sBillNo;
       end;
      

  4.   

    function pGetID: String;
    var
      vStr, vTempStr : String;
    begin
      vStr := FormatDateTime('yyyymmdd', Date());
      with ADOQuery1 do
      begin
        Close;
        SQL.Text := 'SELECT MAX(编号) AS d FROM 表 WHERE 编号 LIKE ' + QuotedStr(vStr + '%');
        Open;
        vTempStr := FieldByName('d').AsString;
        vStr := Copy(vTempStr, Length(vStr) + 1, Length(vTempStr) - Length(vStr));
        vTempStr := FormatFloat('0000', StrToInt(vStr) + 1);
      end;
      Result := vTempStr;
    end;
    //调用
    Edit1.Text := pGetID;