Tips

サブフォーム中にサブレコードを追加した時にシーケンス番号を得る方法

日付2001/08/10
ID01-682
バージョン6.5.x and 6.7.x
プラットフォームWindows and Mac

新しいレコードを作るときにフィールドのデフォルト値として「#N」と記述しておくことで、シーケンス番号を割り当てることができます。しかしサブフォーム中にサブレコードを新しく追加するときには、4Dが空白のレコードを新規に作成して保存されたものが表示されます。つまり、一旦保存された空白のレコードが新規レコードとして表現され、そのレコードに対して操作することになります。そのためすでにフィールドにはゼロが代入された状態になっているので、#Nのデフォルト値は働かず、結局0が表示されることになります。

この問題を解決するためには、サブフォーム上のフィールドオブジェクトに下記のメソッドを記述してください。

` Object Method: sequential field
Self->:=Sequence Number([RelatedTable])

注意

同じリストフォームをサブフォームだけでなく通常のリストフォームとしても利用するのであれば、全てのレコードが同じシーケンス番号に表示されないようにするために、さらに次のような記述を行う必要があります。

  1. On Startupでブール値のフラグを初期化する
    ` On Startup Method 
    C_BOOLEAN(vIsNew)
    vIsNew:=False
    
  2. サブフォーム上のフィールドオブジェクトにてフラグを判定するように変更
    ` Object Method: sequential field
    If (vIsNew)
       Self->:=Sequence Number([RelatedTable])
       vIsNew:=False 
    End if
    
  3. サブレコード追加ボタンのオブジェクトメソッドに次の記述をする
    ` Object Method: Add Subrecord button
    vIsNew:=True