2014/07/29

[DateUtils]查出指定時間的當月第一天和最後一天

突然有這樣的一個需求,上網查了一下發現很大一票的高手在這塊都自己刻一份副程式。

難道 VCL Framework 裡就沒有好用的函式可使嗎?

答案是:有的

EndOfAMonth in Delphi Basics 中有提到了我想要的東西。

在 DateUtils 裡有「StartOfTheMonth」和「EndOfTheMonth」這兩個函式,可以很輕鬆地取得指定時間的 1 號 和 28.29.30.31 的最末日

範例如下:
var
  vFirstDate, vLastDate: TDateTime;
begin
  vFirstDate := DateUtils.StartOfTheMonth(Now());
  vLastDate   := DateUtils.EndOfTheMonth(Now());
  ShowMessage('The Month first Date: ' + DateToStr(vFirstDate) + #13#10 +
              'The Month last Date: ' + DateToStr(vLastDate));



只是,按「易讀程式之美學」一書所建議的起始和最末範圍命名法則有點小小的衝突,
==============
Start → First
End → Last
==============
但因為不會有「32」日這種超出日期的可能,這種小缺點就忍耐一下吧 (笑)


2014/07/15

TDataSet.OnValidate 和 OnChange 事件使用心得

OnValidate:
  單純的檢查事件,在這個事件中無法對 Sender(TField) 進行改值。


OnChange:
  接在 OnValidate 事件後觸發,值的變更可在此事件中處理。

2014/07/07

State-Less? DataSnap for RESTful is easy!!!

在看了「Delphi XE2 DataSnap Development Essentials」元件章節後,才發現幾個很特別的屬性:

2014/06/27

FireBird Recursive (遞迴) 的支援

今天在查詢 SQL SERVER 對遞迴的支援時,查到這個網頁

一試果然提升效率 600%

那 FireBird 能否支援呢?
請參考 FireBird Select -- Recursive CTEs 一節

2014/06/26

RAD Studio XE6 在行動開發上總覺得還不是很穩

不論是新的 REST DataSnap 還是 FireMonkey 開發

總是讓我感到 EMBT 的謎團爆多,看來只能繼續觀望了

2014/06/16

Session function in FireBird

我在 Session funtion programming in PostgreSQL's PL/pgSQL 這篇文章中有提到:
PostgreSQL 對 Session function 的支援程度。

這次換上 FireBird 又會擦出什麼火花呢?

在 FireBird 裡,所使用的是 DSQL (Dynamic SQL) ,在 FireBird 2.0 新增,2.1 和 2.5 都有部分調整。

實際操作的感覺是:
即時性的 PSQL 在 DSQL 下實現 (“on-the-fly” PSQL within a DSQL context.)

語法是:EXECUTE BLOCK

  • EXECUTE BLOCK 做單一值的回傳
語法如下:
execute block
returns (mm Integer)
as
begin
  mm = 100;
  suspend;  --要加這句話做回傳輸出
end

如此,我們會得到


  • 帶有參數的處理語法如下:
EXECUTE BLOCK(arge1 Integer = ? arge1, arge2 Integer = ? arge2)
   RETURNS (SimpleSum Integer)
AS
BEGIN
  SimpleSum = arge1 + arge2;
  suspend;
END

執行畫面:

執行結果:



  • 要取得資料集合的方式如下:
EXECUTE BLOCK
   RETURNS (arge varchar(100))
AS
BEGIN
  FOR SELECT cast(KDT as varchar(100)) FROM M_TSE WHERE KDT >= '2014/06/16' into :arge
  DO
  suspend;
END

會得到



總結:
雖然沒有像 SQL Server 那樣的方便,但也算得上比 PostgreSQL 好設計,在 Run-Time 時期的作業有更多選擇了! :D


See also:
DSQL, ESQL, PSQL, ISQL 名詞解釋
FireBird Document: EXECUTE BLOCK