ライブラリQSYSにあるオブジェクト(タイプが*MSGF)のメッセージファイルから、
IDを指定してメッセージをDelphi側で受け取ることができます。
Delphi/400のTCmd400コンポーネントは、
IBM i(AS/400)のコマンドを実行してその戻り値を受け取ることができます。
またコマンドRTVMSGはメッセージIDを指定すると、戻り値としてメッセージを返します。
実行する場合のロジックは次のようになります。
設計画面ではTCmd400コンポーネントのParamsプロパティで
メッセージ受取用に文字のパラメータ(文字132桁)を1つ用意します。
またTCmd400コンポーネントのAS400プロパティには、接続時のTAS400を指定して下さい。

//(ファイルQCPFMSGから、ID:CAE0002のメッセージをEditに表示する例)
AS4001.Connect;
Cmd4001.CommandLine.Text :=
'RTVMSG MSGID(CAE0002) MSGF(QSYS/QCPFMSG) MSG(&P.1)';
Cmd4001.Execute;
Edit1.Text := Cmd4001.Value[0];

ここまでご紹介してきたロジックでは、
メッセージ内容は取得できますが、以下の課題や追加要望が出てくるかと思います。
- メインのメッセージ内容(第1レベル・メッセージ・テキスト)以外にも情報を取得したい。
- この方法だと置換変数(メッセージ内のパラメータ)が空で返るため、その部分も知りたい。
- 目的のメッセージがどのメッセージファイル内に存在するか予め調べる手間がかかる。

新しいIBM i では「MESSAGE_FILE_DATA」というビューが追加されており、
ここからメッセージを参照することができます。
(V7R4以降、またはV7R3では「SF99703 Level 15」以降のPTF適用で対応)
ライブラリQSYS2に存在するMESSAGE_FILE_DATA(または省略名MSGF_DATA)を
SQLで参照することで、簡単にメッセージを参照することができ、上記の課題も解決できます。
MESSAGE_FILE_DATAからデータを参照する際は、
以下のようにSQLを記述します。
※使用しないフィールドはSELECT対象から除いても問題ありません。
※一部の文字フィールドはDelphi/400でそのまま取得できないため、CHARでキャストします。
※メッセージデータは、各パラメータや置換変数の型や桁数などの情報を保持しています。
SELECT
MSGF_LIB, /*メッセージファイルのライブラリ(MESSAGE_FILE_LIBRARY)*/
MSGF, /*メッセージファイル名(MESSAGE_FILE)*/
MSGID, /*メッセージID(MESSAGE_ID)*/
SEVERITY, /*重大度(SEVERITY)*/
CHAR(MSG_TEXT) AS MSGTXT, /*第1レベル・メッセージ・テキスト(MESSAGE_TEXT)*/
CHAR(SECLVL) AS MSGSLT, /*第2レベル・メッセージ・テキスト(MESSAGE_SECOND_LEVEL_TEXT)*/
MSGDATACNT, /*メッセージデータの数(MESSAGE_DATA_COUNT)*/
CHAR(MSGDATA) AS MSGDTA /*メッセージデータ情報(MESSAGE_DATA)*/
FROM QSYS2/MSGF_DATA
WHERE MSGF_LIB = 'QSYS' /*ライブラリで絞り込み*/
AND MSGID = 'SQL0913' /*メッセージIDで絞り込み*/

(ミガロ.情報マガジン「MIGARO News!!」Vol.123 2011年2月号より、SQL関連部分は新規加筆)