RECEIVE RECORD

4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次

version 3


RECEIVE RECORD {(aTable)}

引数説明
aTableテーブルレコードを受信するテーブル, または
省略した場合デフォルトテーブル

説明

RECEIVE RECORDは、SET CHANNELコマンドで開いたシリアルポートまたはドキュメントからtableにレコードを受信します。受信するレコードはSEND RECORDで送信したものでなければなりません。RECEIVE RECORDを実行すると、tableに新しいレコードが自動で作成されます。レコードを正しく受信した時点で、SAVE RECORDコマンドを使用して新しいレコードを保存します。

完全なレコードを受信します。つまりレコードにあるいはレコードとともに格納されたピクチャやBLOBも受信します。

重要: SEND RECORDRECEIVE RECORDを使用してレコードが送受信される場合、送信元と送信先のテーブル構造は互換性のあるものでなくてはなりません。互換性がない場合、RECEIVE RECORDコマンドの実行時4Dがテーブル定義に応じて値を変換します。

Notes

1. このコマンドを使用してドキュメントからレコードを受信する場合、ドキュメントはSET CHANNELコマンドを使用して開かれていなければなりません。Open document, Append document または Create documentで開かれたドキュメントに対して、RECEIVE RECORDを使用することはできません。

2. RECEIVE RECORDの実行中、Ctrl-Alt-Shift (Windows) またはCommand-Option-Shift (Macintosh) を押して、受信を中断することができます。中断することにより、エラー-9994が生成されます。ON ERR CALLを使用してインストールされたエラー処理メソッドにより、このエラーをとらえることができます。通常、シリアルポート経由での通信の場合にのみ、受信の中断処理を実行する必要があります。

例題

データのアーカイブ作成や、異なる場所で使用されている同じシングルユーザデータベース間でデータをやり取りする際には、SEND VARIABLE, SEND RECORD, RECEIVE VARIABLE そして RECEIVE RECORDコマンドを組み合わせて使用するとよいでしょう。EXPORT TEXTIMPORT TEXT等の読み込み/書き出しコマンドを利用して、4Dデータベース間でデータ交換を実行できます。しかしデータ中にグラフィックやリレートテーブルが含まれる場合には、SEND RECORDRECEIVE RECORDを使う方がはるかに便利です。

例えば、今お読みのドキュメントは4Dと4D Writeを使用して作成されています。別々の場所にいる複数の製作者が作業を実行するため、異なるデータベース間でデータをやり取りする簡単な方法が必要となりました。以下の図はこのデータベースストラクチャを簡単に表わしたものです:

テーブル[Commands]には、各コマンドやトピックに関する説明が納められます。テーブル[CM US Params]および[CM FR Params]にはそれぞれ、英語版またはフランス語版の各コマンドに対する引数のリストが納められます。また、テーブル[CM See Also]には、各コマンドに対する参照としてリストされるコマンドが納められています。したがって、データベース間でドキュメントのやり取りを実行するには、[Commands]レコードとそれにリレートするレコードを送信しなければなりません。これを実行するには、SEND RECORDRECEIVE RECORDコマンドを使用しています。さらにSEND VARIABLERECEIVE VARIABLEコマンドを使い、読み込み/書き出しドキュメントにタグを付けています。

ドキュメントの書き出しを実行する簡略化したプロジェクトメソッドを以下に示します:

      ` CM_EXPORT_SEL プロジェクトメソッド
      ` このメソッドは [Commands] ーブルのカレントセレクションを処理対象とする

   SET CHANNEL(12;"") ` ユーザにドキュメントを作成させ、チャンネルを開く
   If (OK=1)
         ` 内容を示すタグを変数でドキュメントに指定する
         ` Note: BUILD_LANG プロセス変数は送信するデータの言語を示すUS (English) または FR (French) 
      $vsTag:="4DV6COMMAND"+BUILD_LANG
        SEND VARIABLE($vsTag)
         ` 書き出す [Commands] レコード数を示す変数を送信
        $vlNbCmd:=Records in selection([Commands])
        SEND VARIABLE($vlNbCmd)
        FIRST RECORD([Commands])
         ` コマンドごとに
      For ($vlCmd;1;$vlNbCmd)
            ` [Commands] レコードを送信
         SEND RECORD([Commands])
            ` リレートするレコードを選択
         RELATE MANY([Commands])
            ` ランゲージごとに、引数の数をしめす変数を送信
         Case of 
            : (BUILD_LANG="US")
               $vlNbParm:=Records in selection([CM US Params])
            : (BUILD_LANG="FR")
               $vlNbParm:=Records in selection([CM FR Params])
         End case 
         SEND VARIABLE($vlNbParm)
            ` parameter レコードがあれば送信
         For ($vlParm;1;$vlNbParm)
            Case of 
               : (BUILD_LANG="US")
                  SEND RECORD([CM US Params])
                  NEXT RECORD([CM US Params])
               : (BUILD_LANG="FR")
                  SEND RECORD([CM FR Params])
                  NEXT RECORD([CM FR Params])
             End case 
         End for 
            `  “See Also” の数を示す変数を送信
         $vlNbSee:=Records in selection([CM See Also])
         SEND VARIABLE($vlNbSee)
            ` [See Also] レコードがあれば送信
         For ($vlSee;1;$vlNbSee)
            SEND RECORD([CM See Also])
            NEXT RECORD([CM See Also])
         End for 
            ` 次の[Commands] レコード
         NEXT RECORD([Commands])
      End for 
      SET CHANNEL(11) ` ドキュメントを閉じる
   End if 

ドキュメントの読み込みを実行する簡略化したプロジェクトメソッドを以下に示します:

      ` CM_IMPORT_SEL プロジェクトメソッド

   SET CHANNEL(10;"")   ` ユーザに読み込むドキュメントを選択させる
   If (OK=1) ` ドキュメントが開かれれば
      RECEIVE VARIABLE($vsTag)   ` タグ変数を読み込む
      If ($vsTag="4DV6COMMAND@")   ` 正しいタグを読み込んだかチェック
         $CurLang:=Substring($vsTag;Length($vsTag)-1)   ` タグからランゲージを取り出す
         If (($CurLang="US") | ($CurLang="FR"))   ` 有効なランゲージなら
            RECEIVE VARIABLE($vlNbCmd)   ` いくつのコマンドが格納されいるか
            If ($vlNbCmd>0)   ` 1つ以上存在すれば
               For ($vlCmd;1;$vlNbCmd)    ` アーカイブされた [Commands] レコード毎に
                     ` レコードを受信
                  RECEIVE RECORD([Commands])
                     ` 新規レコードまたは既存のレコードへの上書きを保存するサブルーチンの呼び出し
                  CM_IMP_CMD ($CurLang)
                     ` パラメタ数の読み込み
                  RECEIVE VARIABLE($vlNbParm)
                  If ($vlNbParm>=0)
                        ` RECEIVE RECORDを使用し
                        ` 新規レコードまたは既存のレコードへの上書きを保存するサブルーチンの呼び出し
                     CM_IMP_PARM ($vlNbParm;$CurLang)
                  End if
                     `  “See Also” の数を読み込み
                  RECEIVE VARIABLE($vlNbSee)
                  If ($vlNbSee>0)
                        ` RECEIVE RECORDを使用し
                        ` 新規レコードまたは既存のレコードへの上書きを保存するサブルーチンの呼び出し
                     CM_IMP_SEEA ($vlNbSee;$CurLang)
                  End if 
               End for 
            Else 
               ALERT("The number of commands in this export document is invalid.")
            End if 
         Else
            ALERT("The language of this export document is unkown.")
         End if
      Else
         ALERT("This document is NOT a Commands export document.")
      End if 
      SET CHANNEL(11)   ` ドキュメントを閉じる
   End if 

データ受信中にシステム変数OKの評価も行わず、またエラーの検出も行っていない点に注意してください。しかし、ドキュメントそのものを表わす変数をドキュメントに保存するため、これらの変数がいったん受信され意味を持つ場合には、エラーの可能性は低くなります。例えば、ユーザが誤ったドキュメントをオープンした場合、この処理は最初の判定式で即座に中断されます。

参照

RECEIVE VARIABLE, SEND RECORD, SEND VARIABLE.

システム変数またはセット

レコードを正常に受信すると、システム変数OKに1が代入されます。それ以外の場合は、システム変数OKに0が代入されます。


4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次