Delphi/400において、更新日時を参照する等の目的で
IBM i 側のシステム日時を使用したい場合、弊社の開発事例では
「TCall400を用いて、日時取得用に別に作成しておいたCLを呼び出してその戻り値を使用する」
ことが多いのですが、例えばネイティブ接続を使用しない場合はCLを呼び出せません。
このような事情がある場合、SELECTのSQL単体でシステム日時を取得できます。
設定方法
以下のようなSQLを発行すると、IBM i側のシステム日時が入った結果が開きます。
SELECT CURRENT DATE AS XXXX, CURRENT TIME AS YYYY,
CURRENT TIMESTAMP AS ZZZZ FROM SYSIBM/SYSDUMMY1
- CURRENT DATE はシステム日付(TDateField)
- CURRENT TIME はシステム時刻(TTimeField)
- CURRENT TIMESTAMP はシステム日付+時刻(TSQLTimeStampField)
となっており、いずれも
Query.FieldByName(‘~~~’).AsDateTime でDelphi/400から参照可能です。
また、上記の例で使用した「SYSIBM/SYSDUMMY1」は
IBM iに用意された、表の参照を必要とするけれども
表の内容は重要でないSQLステートメントのための、
あらかじめレコードが1行セットされたダミーテーブルです。
「SYSIBM/SYSDUMMY1」の代わりに既存の別のテーブルを使用する場合は、
レコードが必ず1行以上存在する任意のテーブルを指定して頂き、
かつSQLの末尾に「FETCH FIRST ROW ONLY」を付加して下さい。
(このFETCH句が無いと、テーブルのレコード数が取得結果の行数になり
レスポンスに影響するため、最初の1行のみを取得するようにします。)
(Tipsメルマガ 2020年12月号より)