自动生成编号的问题,谢谢,急用啊 (30分)

  • 主题发起人 主题发起人 cpinfo
  • 开始时间 开始时间
C

cpinfo

Unregistered / Unconfirmed
GUEST, unregistred user!
如何生成编号

例子:比如2002年9月份北京------生成结果如下:0209110001,其中02为2002年,09为9
月份,11为北京(可以改,如上海为12),0001为自动生成,下一条记录自动
加1,如0209110002 ?

我用的是d5+access,如何使用啊?
 
这里有一个帮助文件里面的例子,不知道是否对你有帮助
void __fastcall TForm1::Button1Click(TObject *Sender)

{
Word Year, Month, Day, Hour, Min, Sec, MSec;
TDateTime dtPresent = Now();
DecodeDate(dtPresent, Year, Month, Day);
Label1->Caption = AnsiString("Today is Day ") + IntToStr(Day) + AnsiString(" of Month ") + IntToStr(Month) + AnsiString(" of Year ") + IntToStr(Year);
DecodeTime(dtPresent, Hour, Min, Sec, MSec);
Label2->Caption = AnsiString("The time is Minute ") + IntToStr(Min) + AnsiString(" of Hour ") + IntToStr(Hour);

}
这是用BCB些的
转换成delphi的代码你应该会吧
 
以下是Delphi代码
procedure TForm1.Button1Click(Sender: TObject);
var
Year, Month, Day, Hour, Min, Sec, MSec : Word ;
dtPresent : TDateTime;
begin
dtPresent := Now();
DecodeDate(dtPresent, Year, Month, Day);
Label1.Caption := AnsiString('Today is Day ') + IntToStr(Day) + AnsiString(' of Month ') + IntToStr(Month) + AnsiString(' of Year ') + IntToStr(Year);
DecodeTime(dtPresent, Hour, Min, Sec, MSec);
Label2.Caption := AnsiString('The time is Minute ') + IntToStr(Min) + AnsiString(' of Hour ') + IntToStr(Hour);
end;
你改一改就可以用,但是如果你定义生成的编号是整形变量,需要注意整形书的范围
 
说清楚你的问题,你是生成编号的问题(是在什么情况下生成编号),还是使用的问题?
可用字符串组合生成,最后四位可用SQL的Max(BH)提取分离,再+1。
 
可以考虑使用计数器。
 
可以使用存储过程来做
 
先记录上次使用的日期和序列号,下次需要使用时,分析上次的序列号,
如果日期为当前日期,那只需要将后面的加1,即为下一个序号;
并保存这个新序号,以便下一次继续使用,若比当前日期早,则
直接使用当前日期的第一个序号,并保存这个序号和日期。
说明:这里要求日期不能提前(当然如果不能满足这个条件,也可以
但是那就要求必须保存所有前面使用的序号)。
此外,序号可保存在文件或数据库中
 
procedure TForm1.Button1Click(Sender: TObject);
var
day:string;
city:string;
Idno:string;
x:string;
i:integer;
begin
day:=FormatDateTime('yymm',now); //前四位
city:=ComboBox1.Text ;
//排列方式为0209110001, 0209210002 无重复
x:= inttostr(ADOQuery1.RecordCount);
if Length(x)<4 then
begin
for i:= Length(x) to 3 do
begin
x:= '0'+x;
end;
end;
Idno := day + city +IntToStr(ADOQuery1.RecordCount+1);
//排列方式为0209110001, 0209210001 无重复
//写sql的时候加条件将 11 21 之类的分类就可以了
end;
 
用formatdatetime函数
 
这种问题还是用存储过程好,处理多用户方便
 

Similar threads

D
回复
0
查看
911
DelphiTeacher的专栏
D
D
回复
0
查看
868
DelphiTeacher的专栏
D
D
回复
0
查看
840
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部