我做了个小型的入库程序.三台机子共用一个数据库
我的编号的生成是从ini文件中取得
//新增.生成单号 初始是rk + 1000001
var T:Tinifile;
s:string;
begin
s:='rk' ;
button5.Enabled:=false;
try
T:=Tinifile.Create('.\djbh.ini');
djbh.Text:='RK'+t.ReadString(s,'djbh','');
finally
T.Free;
end;
gysmc.Enabled:=true;
tmsr.Enabled:=true;
button1.Enabled:=true;
button2.Enabled:=false;end;
//保存 然后编号保存至ini文件内尾数加1
procedure Trk.Button1Click(Sender: TObject);
var listitem:tlistitem;
i:integer;
T:Tinifile;
s,inidjbh:string;
begin
inidjbh:=inttostr(strtoint(copy(djbh.Text,3,6))+1);
s:='rk';
try
t:=Tinifile.Create('.\djbh.ini');
T.WriteString(s,'djbh',inidjbh);
finally
T.Free;
end;
button2.Enabled:=true;
djbh.Enabled:=false;
gysmc.Enabled:=false; 但现在的情况是.如果是一台机子操作,是没问题.但是如果多台操作.如何保证单据编号不会重复?希望高手能帮我解答一下.
我的编号的生成是从ini文件中取得
//新增.生成单号 初始是rk + 1000001
var T:Tinifile;
s:string;
begin
s:='rk' ;
button5.Enabled:=false;
try
T:=Tinifile.Create('.\djbh.ini');
djbh.Text:='RK'+t.ReadString(s,'djbh','');
finally
T.Free;
end;
gysmc.Enabled:=true;
tmsr.Enabled:=true;
button1.Enabled:=true;
button2.Enabled:=false;end;
//保存 然后编号保存至ini文件内尾数加1
procedure Trk.Button1Click(Sender: TObject);
var listitem:tlistitem;
i:integer;
T:Tinifile;
s,inidjbh:string;
begin
inidjbh:=inttostr(strtoint(copy(djbh.Text,3,6))+1);
s:='rk';
try
t:=Tinifile.Create('.\djbh.ini');
T.WriteString(s,'djbh',inidjbh);
finally
T.Free;
end;
button2.Enabled:=true;
djbh.Enabled:=false;
gysmc.Enabled:=false; 但现在的情况是.如果是一台机子操作,是没问题.但是如果多台操作.如何保证单据编号不会重复?希望高手能帮我解答一下.
解决方案 »
- delphi xe2中,aes加密
- 用image控件不能正常显示Sql server2000数据库中的图片
- ***************求助TStringList的奇怪问题。。。*****************
- delphi 更改可执行文件图标
- 有office outlook编程的进来挑战一下!!!
- 一个不解的问题
- 问一个关于DLL中调用内建的一个窗体的问题(本人结贴率百分之百,所以分不多)
- 请你吃饭:) 餐饮、酒店管理系统吧台部分的实现方法?及哪有下载的?
- Pascal 中怎样实现文件读写和创建文件??谢谢
- 如何实现在edit中每输入一个字符便出现相应提示的功能??
- 代码异常
- 不同表中的关联字段用列表显示问题
可以在数据库中,建一个系统信息表,存一记录表示当前单据的最后一次单据号,当你新建单据的时候,给这个记录值加1,并作为单据编号。
而单据的最大编号是rk-2008-10-10-0010
那么就需要先进行计算当前的单据号,得出编号:rk-2008-10-10-0009再与单据的最大编号比较,小了,对9+1,再计算,再比较,这样比较耗时,所以,建议在数据库中建一个信息表,存放最后一个单据的编号数值。如10,这样读出来后,直接对其+1,是11,就可以进行一次计算编号就可以了,
就是每次保存的时候,读取数据表中最后一条数据记录,取出编号字段,在此编号字段的基础上再加上'1'
过程很复杂...由其是这种英文字母与数值相混合的,,,,用DELPHI我还没有做过,,,以前用别的做成过
思路是先将数据以ID倒排序,取TOP 1的编号字段,,,,如你的编号是RK1000001,,,取文本右边7位转换成数值加上1,,,,再转换成文本当作编号写入数据表格....
每个人保存时都这样操作一次.保证不会有数据编号是重复的....
,读出来的不都是rk100001了吗?
(还要注意.如果取消单据的时候.要让ini文件减一.)这样就不会错了.给分吧.