2014年12月4日 星期四

文字自動序號的寫法

先前看過林壽山先生寫的 DBGrid顯示流水號方式 內容是用Integer的方式來做序號的產生。不過在我接觸的專案中,一般都是用文字來做序號,例如0001。主要是因為在排序時,會比較方便做處理,在顯示上也比較美觀。所以在此提供一下文字自動序號的解法。
首先在要文字自動序號的明細檔的DataSet建一個AggregateField欄位,如下圖
最重要的是在 Expression 加上MAX(NO_SEQ)。NO_SEQ就是我們要自動序號的文字欄位。

接下來在DataSet(本例為jdsG_SOS) 的 AfterInsert Event中加上 jdsG_SOSNO_SEQ.AsString := AutoSEQ(jdsG_SOSMAXSEQ.AsString);

而AutoSEQ這個Function的程式碼如下

function AutoSEQ(MaxSEQ : String):String;
const
  NOSize =4;
var
  I : Integer;
  NO : String;
begin
  NO := '';
  for I := 1 to NOSize-1 do NO := NO+'0';
  if Length(MaxSEQ)>0 then
  begin
    I := StrToInt(MaxSEQ)+1;
    NO := NO+IntToStr(I);
    NO := Copy(NO,Length(NO)-NOSize+1,NOSize);
  end
  else
  begin
    NO := NO+'1';
  end;

這樣在執行時,就可以看到NO_SEQ會出現0001這樣的序號了,如果修改為0003,接下來的序號也會變成0004。
希望提供的方式對DELPHI愛用者有幫助。