メインコンテンツまでスキップ
バージョン: 開発中

RESOLVE POINTER

RESOLVE POINTER ( pointer ; varName ; tableNum ; fieldNum )

引数説明
pointerPointer参照オブジェクトを取得するポインタ
varNameText参照された変数の名前または空の文字列
tableNumInteger参照されたテーブルまたは配列要素の番号 または 0 あるいは -1
fieldNumInteger参照されたフィールドの番号 または 0 あるいは -1

説明

RESOLVE POINTER コマンドは、pointer式によって参照されるオブジェクトの情報を取得し、引数varNametableNumfieldNumに返します。

参照されるオブジェクトの種類によって、RESOLVE POINTERコマンドは、以下のような値を返します:

参照されるオブジェクト引数
varNametableNumfieldNum
なし (NILポインタ)"" (空の文字列)00
変数変数名-1-1
配列配列名-1-1
配列要素配列名要素番号-1
2次元配列要素2次元配列の名前要素の行番号要素の列番号
テーブル"" (空の文字列)テーブル番号0
フィールド"" (空の文字列)テーブル番号フィールド番号

Notes:

  • pointerに渡す値がポインタ式でない場合には、シンタックスエラーが発生します。
  • RESOLVE POINTER コマンドは、ローカル変数のポインタには使用できません。何故なら、ローカル変数は、同じ名前で異なる場所で定義できるため、目的のローカル変数を特定することができないからです。

例題 1

フォーム内で、v1, v2... v100という名前で入力可能な変数100個を作成します。これを実行するには、以下のような手順を実行します:

a. 入力可能な変数を1つ作成し、vと名付ける。

b. オブジェクトのプロパティを設定する。

c. オブジェクトに以下のメソッドを作成する:

 DoSomething(Self) // DoSomething はデータベースのプロジェクトメソッド

d. この時点で、必要な回数だけ変数を複製することも、フォームエディタの「グリッドで変数作成」機能を使用することもできる。

e. DoSomethingメソッド内で、このメソッドが呼び出される変数のインデックスを知る必要がある場合には、以下のように記述する:

 RESOLVE POINTER($1;$vsVarName;$vlTableNum;$vlFieldNum)
 $vlVarNum:=Num(Substring($vsVarName;2))

この方法でフォームを作成することによって、100個の変数のためのメソッドを一度書くだけで済むことに注目してください。DoSomething (1), DoSomething (2)...,DoSomething (100)を作成する必要はありません。

例題 2

デバッグのために、メソッドへの2番目の引数 ($2) がテーブルへのポインタであることを確認する必要があるとします。この場合、メソッドの最初で、以下のように記述します:

  // ...
 If(<>DebugOn)
    RESOLVE POINTER($2;$vsVarName;$vlTableNum;$vlFieldNum)
    If(Not(($vlTableNum>0) & ($vlFieldNum=-1) & ($vsVarName="")))
  // 警告: ポインタはテーブルへの参照ではない
       TRACE
    End if
 End if
  // ...

例題 3

DRAG AND DROP PROPERTIES コマンドの例を参照.

例題 4

以下に二次元配列の例があります:

 ARRAY TEXT(atCities;100;50)
 var $city : Pointer
 atCities{1}{2}:="Rome"
 atCities{1}{5}:="Paris"
 atCities{2}{6}:="New York"
  // ...他の値
 $city:=->atCities{1}{5}
 RESOLVE POINTER($city;$var;$rowNum;$colNum)
  //$var="atCities"
  //$rowNum="1"
  //$colNum="5"

参照

Field
Get pointer
Is a variable
Is nil pointer
Table

プロパティ

コマンド番号394
スレッドセーフである