根据日期来生成 ID 的代码
很值得保存起来
procedure TFocVoucherDetailForm.spbtNewClick(Sender: TObject);
var
sVoucherID,sTemp,sYear,sMonth:string;
begin
sYear:=Copy(IntToStr(YearOf(Now)),3,2);
sMonth:=IntToStr(MonthOf(Now));
sMonth:=Copy('0',length(sMonth),2-length(sMonth))+sMonth;
if FocData.tbFocVoucher.IsEmpty then
begin
sVoucherID:=sYear+sMonth+'0001';
end else
begin
FocData.tbFocVoucher.Last;
sTemp:=Copy(FocData.tbFocVoucher.FieldByName('VoucherID').AsString,1,4);
if (sTemp=(sYear+sMonth)) then
begin
sTemp:=IntToStr(StrToInt(Copy(FocData.tbFocVoucher.FieldByName('VoucherID').AsString,5,4))+1);
sTemp:=Copy('000',length(sTemp),4-length(sTemp))+sTemp;
sVoucherID:=sYear+sMonth+sTemp;
end else
sVoucherID:=sYear+sMonth+'0001';
end ;
//--------------------------------------------------------------------------//
整理了一下,变成一个过程放在一个类中
class function TPublicFunction.GetAutoCreateIDWithDate(theDataSet:TdataSet;FieldName:string):string;
var
sOrderID,sTemp,sYear,sMonth:string;
begin
if not theDataSet.Active then theDataSet.Open;
sYear:=Copy(IntToStr(YearOf(Now)),3,2);
sMonth:=IntToStr(MonthOf(Now));
sMonth:=Copy('0',length(sMonth),2-length(sMonth))+sMonth;
if theDataSet.IsEmpty then
begin
sOrderID:=sYear+sMonth+'0001';
end else
begin
theDataSet.Last;
sTemp:=Copy(theDataSet.FieldByName(FieldName).AsString,1,4);
if (sTemp=(sYear+sMonth)) then
begin
sTemp:=IntToStr(StrToInt(Copy(theDataSet.FieldByName(FieldName).AsString,5,4))+1);
sTemp:=Copy('000',length(sTemp),4-length(sTemp))+sTemp;
sOrderID:=sYear+sMonth+sTemp;
end else
sOrderID:=sYear+sMonth+'0001';
end ;
result := sOrderID;
end;