- ベストアンサー
ファイルメーカーで番号を割り振りたいのですが
使用ソフトはファイルメーカー7です ある番号を割り振りたいのですが その番号の増え方が11 末尾が7で終わる場合は+4 それを別のテーブルのあるフィールドからスタートさせたい場合は どんな風にすればいいでしょうか? よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>やってみましたがすべてのレコードが同じ番号になってしまいます。 「2番目の全置換を行ったところ、すべてのレコードが同じ番号になった」という意味であると理解しました。 まず、番号を付けるレコードを抽出した後、番号を付ける順番でレコードをソーティングします(番号付けの準備です)。 番号を付けるフィールド(ここでフィールドの名前を「付番フィールド」とします)を選択し、フィールド内容の全置換で初期値に1を指定し、増分を1としてシリアル番号で全置換します。この結果、1,2,3,...という数字がそれぞれのレコードの付番フィールド内に順番に入ります。 行いたいことは、1の位が7進法になることです。つまり、1の位が7で割った余りになればよいことになります。そこで『試しに』シリアル番号が入っている「付番フィールド」を Mod ( 付番フィールド ; 7 ) という計算式で全置換してみます。この結果、1,2,3,...6,0,1,2,3,...という数字がそれぞれのレコードの付番フィールド内に順番に入ります。 これだけでは「11」を加えていることにならないので10の位の増分として10を加える必要があります。ここで結果として得られる番号(求めたい番号)の10位より上(10位を含む)に注目すると、シリアル番号の10倍になっていることがわかります。つまり、最初にシリアル番号で全置換した後に、それぞれのシリアル番号を7で割った余りと、それぞれのシリアル番号を10倍した値を加えればよいことになります。最初にシリアル番号で全置換した後の計算式: 付番フィールド * 10 + Mod ( 付番フィールド ; 7 ) による全置換はそれを行っています。 なお、当然のことですが、「付番フィールド」はグローバルフィールドではなく「通常の入力フィールド」です。また、全置換では「値」「シリアル番号」および「計算結果」が選択できます。デフォルトで選択されている「値」のままですと「すべてが同じ番号」になってしまいます。 ループを使って増分を11として番号を逐次設定し、1の位が7の場合に0とする方法の方がわかりやすいと存知ますが、工夫がありません。いろいろな方法を考えるのも楽しいかと思います。全置換による方法を使って先頭レコードの番号がたとえば4になる場合(つまり4,15,26,30,...)を考えてみるのもよい頭のトレーニングになります。
その他の回答 (1)
- cockerel
- ベストアンサー率46% (253/548)
1. ループを使う方法(たぶん一般的) グローバルフィールドを作る;付番の先頭レコードに移動して「付番フィールド」に初期値を入力する:グローバルフィールドに「付番フィールド」の値を格納;次のレコードへ移動;「付番フィールド」にMod ( 付番フィールド + 11 ; 10 ) = 7であれば+4、それ以外は+11;次のレコードへ移動(最後まで来たら終了)でループ。 2. 全置換を利用する方法 番号を付けるレコードを抽出(検索を利用);「付番フィールド」をシリアル番号(+1)で全置換;同じく「付番フィールド」を次の計算式で全置換: Mod ( 付番フィールド ; 7 ) + 付番フィールド * 10 バイアスを掛ける場合にはシリアル番号の初期値で調整します。 ご質問の意味を取り違えていたらごめんなさい。
お礼
ありがとうございます。 やってみましたがすべてのレコードが同じ番号になってしまいます。 なぜなんでしょう・・・?