全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1342
推到 Plurk!
推到 Facebook!

格式化编号技术

答題得分者是:malanlk
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-17 12:03:12 IP:222.184.xxx.xxx 未訂閱
想实现这样一个功能: 资料表中设一个编号字段 窗口跳出时,编号等于是当前日期加流水号 比如050917001,前面是当前日期,后面是流水号 第二天为0518001就是按当天的流水号排,而不是以表中所有的流水号顺序排。
------
我的编程起步于ktop,我将永远支持ktop
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-17 14:24:48 IP:211.22.xxx.xxx 未訂閱
一段範例,請參考!
procedure TForm1.Button1Click(Sender: TObject);
var
   NumberString,DateString:AnsiString;
   i:integer;
begin
     for i := 1 to 10 do
     begin
      DateString := FormatDateTime('mmdd', Date);
      NumberString := Format('%s%.3d',[DateString,i]);
      ShowMessage(NumberString);
     end;
end;
---------------------------------------------- We will either find a way, or make one. -Hannibal -。
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-17 17:33:59 IP:222.184.xxx.xxx 未訂閱
大大的程式我已理解。现在有一点,就是如果数据表中已有数据,比如0917001,那么我如何取到这个001后再加上1。这个001三位数要证在0917这一天是唯一的,并且是递增的。在0918这一天中第一个票据号又要是001
------
我的编程起步于ktop,我将永远支持ktop
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-09-17 21:17:15 IP:61.62.xxx.xxx 未訂閱
將提供流水號的 數據表改用 日期,流水號 兩個欄位. 在要求新流水號時只要加一個 where 日期=單據日期 的條件就可以了
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-09-18 01:05:50 IP:211.22.xxx.xxx 未訂閱
引言: 大大的程式我已理解。现在有一点,就是如果数据表中已有数据,比如0917001,那么我如何取到这个001后再加上1。这个001三位数要证在0917这一天是唯一的,并且是递增的。在0918这一天中第一个票据号又要是001
嗯~認同malanlk兄的作法,按ntjrr兄的需求,是要將編號欄位分成日期與流水號,如此比較好檢索以及處理新增的流水號編號。
'Select 日期,流水號 From XTable Where 日期 ='   '0918'   ' Order By 流水號 ASC'
或者
'Select MAX(流水號) From XTable Where 日期 ='   '0918'    '''';
這樣找到的流水號最後一筆,就是0918日最大的一號,如果沒有那麼是本日第一號。 ---------------------------------------------- We will either find a way, or make one. -Hannibal -。
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-09-18 07:38:40 IP:222.184.xxx.xxx 未訂閱
不知道一般情况下,前辈们是怎样做的,有没有遇到过象我所说的情况,如果遇到的话,流水号是不断递增,永不重复的,还是遇到新的一天就再从001开始的。如果从001开始的话,就怕电脑日期出问题,比如CMOS电池没电了,就会日期错乱,那样极有可能有重号产生。 malanlk大大意思,好象是新建一个表,专供取号,里面放两个字段。 Stallion大大的意思,就是在当前表里加两个字段,然后再从所有记录里取值。 这里面又可以分两种可能,一种如果流水号一直递增,那么很简单,设一个流水号字段,取最大值,然后FORMAT 当前日期等一写就好了,永无重号。 如果遇到新的一天就再从001开始,那么就要两个字段,当日期字段不等于当前日期时,流水号等于1,日期字段等于当前日期;如果当前日期等于日期字段,那么流水号加1。但这里面 会遇到我所说的日期错乱问题,那这种取法就要重号了。
------
我的编程起步于ktop,我将永远支持ktop
h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-09-18 10:20:09 IP:222.248.xxx.xxx 未訂閱
按malanlk與Stallion兩位高人的說法,再給日期與流水號欄位設置一個UNIQUE索引約束,就可避免出現重複的編號了。 ---------------------------- 於Delphi K.Top之上 博采眾家之長, 奉獻綿薄之力 ---------------------------
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-09-18 10:31:39 IP:61.219.xxx.xxx 未訂閱
不會重號吧, Where 有日期條件, 如果 CMOS 錯亂只是取到非預期日期的流水號而已吧... 之前有討論過避免重號的方式, 之前的處理方式再加一個日期欄位及條件就可以了, 不然你取個 CMOS 錯亂重號的例子給我看...
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-09-18 11:55:33 IP:222.184.xxx.xxx 未訂閱
引言: 不會重號吧, Where 有日期條件, 如果 CMOS 錯亂只是取到非預期日期的流水號而已吧... 之前有討論過避免重號的方式, 之前的處理方式再加一個日期欄位及條件就可以了, 不然你取個 CMOS 錯亂重號的例子給我看... >< face="Verdana, Arial, Helvetica"> 前辈的这段分析相当精辟,我也试了一下,确实不会取到重号,我这一次所讲的和您上面所指的那篇有区别,我现在用的方法不是新建一个数据表来从中取值的,而是直接在本资料表中取值的,也不是在写入表中时取值,而是窗口跳出后就取值。我后来在本资料表中用了三个字段,一是日期字段,二是流水号,三才是我要的正式编号。当日期等于当前日期时取流水号加1,当不等于时(也就是取不到值时)那么赋于流水号的值为1。
------
我的编程起步于ktop,我将永远支持ktop
系統時間:2024-04-28 19:45:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!