在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;
提交的太快了,还没有写完。 ……………………………… 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;
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;
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;
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;
………………………………
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;
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;
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;