to sportsman:采用自增型的存在一个问题,如果删除一个记录后,付款编号就不连续了。
每年的编号都是从1开始的。
to 黄文林:编号不是一个字段,是付款编号中的一个组成部分。付款编号是字符串。
补充一下:
付款编号是这样组成的:
"FK"+年份的缩写(两位)+编号数字+小编号(小编号是表示用户对某笔付款的承付次数,
因为有时不是一次付清的)
我的代码如下,请大家帮忙分析一下(效率太低),优化一下:
function Tpaymentdetailform.Getthebiggestfkbh():integer; //获取最大的付款编号
var
yy1,mm1,dd1,yy2,mm2,dd2:word;
tempnum,maxnumber:integer;
str1,str2,tempstr:string;
begin
//使用querytemp来进行查询
with querytemp do
begin
with sql do
begin
close;
clear;
text:='select 付款编号 from 承付单表';
end;
open;
end;
decodedate(date(),yy1,mm1,dd1); //先求出年份
maxnumber:=0; //最大的付款编号数
if (not querytemp.isempty) then
begin
querytemp.First;
while (not querytemp.eof) do
begin
decodedate(querytemp.fieldbyname('付款日期').asdatetime,yy2,mm2,dd2);
if (yy1=yy2) then //属于同一年份的
begin
tempstr:=querytemp.fieldbyname('付款编号').asstring;
str1:=trim(copy(tempstr,pos('-',tempstr)+1,Length(tempstr))); //取出"fFK00-1-2"的"1-2"
str2:=trim(copy(str1,1,pos('-',str1)-1)); //取出"1-2"的"1"
tempnum:=strtoint(str2);
if (tempnum>maxnumber) then maxnumber:=tempnum;
end;
querytemp.next;
end;
end;
maxnumber:=maxnumber+1;
Getthebiggestfkbh:=maxnumber;
end;