在多人操作的系统中怎么连续生成连续单号(sql server2000)(100分)

  • 主题发起人 主题发起人 lonelyboy
  • 开始时间 开始时间
L

lonelyboy

Unregistered / Unconfirmed
GUEST, unregistred user!
请问怎么可以以年为周期在系统中自动生成连续单号(每年从00001开始,一直到99999,明年又从00001开始.
如三个人一起录入就按单生成01234,和01235,01236两个号,一直下去
但是如果操作员在保存单据有,发现有错,删除一张单据(单号01234)后,如果有新入一张单据,电脑生成的号码会利用原来的单好01234,而不是新生成一个单号01237,
请问,怎么做可以达到这种效果
最好有例子,分是一回答就给的
 
我以前作过类似的东西,不过是paradox的。
建一张空闲单号表,凡是需要单号的,顺序到表中取;
删除单号的,单号放回空闲表。
 
function GetNo(AdoConnection:TAdoConnection;PreStr:String;TypeName:string):string;
var
adoqry_getno:TAdoQuery;
TmpPmParamCode,tmpstr,tmpwhcode,prestr2:String;
begin
adoqry_getno:=TAdoQuery.create(nil);
adoqry_getno.EnableBCD:=False;
With AdoQry_GetNo do
begin
Connection:=AdoConnection;
close;
sql.clear;
//采购合同
if (UpperCase(TypeName)='PC') then //OR (UpperCase(TypeName)='PO') then
begin
If UpperCase(TypeName)='PC' then TmpPmParamCode:=PreStr+'maxpcno';
// If UpperCase(TypeName)='PO' then TmpPmParamCode:=PreStr+'maxpono';

Sql.Add('select PmParamValueN from pmparam where PmParamCode=:PmParamCode');
Parameters.ParamByName('PmParamCode').Value:=TmpPmParamCode;
Open;
If (Eof) then //如果该年度还没有记录,则添加
begin
Close;
Sql.Clear;
Sql.Add('Insert Into PmParam(pmparamcode,PmParamValueN) '+
'Values('''+TmpPmParamCode+''','+'0)');
ExecSql;
result:='0001';
end
else
begin
Result:=Copy(IntToStr(10000+FieldByName('PmParamValueN').AsInteger+1),2,4)
end;
Close;
Sql.Clear; //更新数据库记录,将最大的记录号保存进去。
Sql.Add('Update PmParam Set PmParamValueN='+result+
'where PmParamCode='''+TmpPmParamCode+'''');
ExecSql;
close;
result:=PreStr+Result;
end
//采购订单
else if (UpperCase(TypeName)='PO') then //OR (UpperCase(TypeName)='PO') then
begin
Sql.Add('select max(substring(pono,'+inttostr(length(prestr)+1)+',4)) as maxpono from po with(index(pk_po)) '
+' where substring(pono,1,'+inttostr(length(prestr))+')='+quotedstr(prestr));
Open;
If fieldbyname('maxpono').asstring='' then //如果该年度还没有记录,则添加
result:='0001'
else
Result:=Copy(IntToStr(10000+FieldByName('maxpono').Asinteger+1),2,4);
result:=PreStr+Result;
end
//生产订单
else if (UpperCase(TypeName)='MO') then //OR (UpperCase(TypeName)='MO') then
begin
Sql.Add('select max(substring(mono,'+inttostr(length(prestr)+1)+',4)) as maxmono from mo with(index(pk_mo)) '
+' where substring(mono,1,'+inttostr(length(prestr))+')='+quotedstr(prestr));
Open;
If fieldbyname('maxmono').asstring='' then //如果该年度还没有记录,则添加
result:='0001'
else
Result:=Copy(IntToStr(10000+FieldByName('maxmono').Asinteger+1),2,4);
result:=PreStr+Result;
end
end;
adoqry_getno.Free;
end;
 
多人接受答案了。
 
后退
顶部