今回はDelphi/400でSQLを使ってデータ取得を行う際の行番号取得方法をご紹介いたします。
設定方法
Delphi/400では、Query系のコンポーネントを使うことでIBM i にSQLを実行することができます。
例えばTFDQuery(FireDAC)や、TSQLQuery(dbExpress)コンポーネントです。
データを取得する場合にはSELECT句の構文を使用しますが、
その際に下記のような「ROW_NUMBER」関数を使うと
IBM i で行番号を付与してレコードを取得することができます。
SELECT ROW_NUMBER() OVER(PARTITION BY XXXXXXX ORDER BY XXXXXXXX) 取得名 FROM ~~~
使用時の注意点
この構文をDelphi/400から使用する場合にはポイントがあります。
Query系のコンポーネントでこの関数をそのまま使用するとエラーになります。
これはSQLの内部的な型をDelphi側で判別ができないためです。
そのため、Delphi/400からSQLでROW_NUMBER関数を使用する場合には、
次のように型を整数にキャストして取得します。
SELECT CAST(ROW_NUMBER() OVER(PARTITION BY XXXXXXX ORDER BY XXXXXXXX) AS INTEGER) 取得名 FROM ~~~
この構文ではINTEGER型として、Delphi/400でも行番号を取得することができます。
この方法を覚えておくと、行番号用のフィールドを作成しなくても
番号を付与してレコードを扱うことができますので、是非ご活用下さい。
(ミガロ.情報マガジン「MIGARO News!!」Vol.188 2016年7月号より一部改変)