過去の桐井戸端BBS (桐ver.9)
26951 フォーム中に表示しない項目に定数を自動的に入力するようにしたい 脱初級! 2004/07/02-16:15
新規レコードを追加するためのフォームを作りたいと思い、ワンタッチフォームを利用してひな型を作成し、
これを保存して、項目を追加削除して、現在フォームを作成中です。

この新規レコード追加用なので、フォームを開くと、表の先頭レコードがフォーム内に表示されてしまうため、
これを改造し、開くと同時に新規レコード追加ができるようにイベントを記述しています。

この場合に、フォーム中に表示しない項目に定数を自動的に入力するにはどこにどう書けばよいのでしょうか。

すなわち、新しいレコードを追加した際に、自動的にレコード内の項目
(例えば項目名「フラグ」)に”1”という値が入力されるようにしたいのです。
→値が数値の場合、文字の場合それぞれで教えて下さいませ。

なお、常に”1”ですので、フォーム上に入力ボックスがある必要はありません。
イベント処理になると思うのですが。

イベントの「フォーム開始時」にその項目を指定して、値集合入力?を用いるのでしょうか?
ご教授よろしくお願い申し上げます。

26957 Re:フォームにない項目に入力する しぼうかん 2004/07/02-18:51
記事番号26951へのコメント
脱初級!さん、こんばんは.

手続き定義開始 フォーム::フォーム開始(長整数 &表番号)
メソッド呼び出し @フォーム.更新モード設定(4)
項目値代入 [フラグ]=1
手続き定義終了

これでどうでしょうか?

もっと簡単には表の[フラグ]の挿入初期値式や編集初期値式に
"1"を書いておいても大丈夫かと思います。

さらに言えば必ず"1"なら項目計算式に書いてしまうのが一番確実だと思います。

26958 Re:フォームにない項目に入力する 宮城 2004/07/02-19:03
記事番号26951へのコメント
>すなわち、新しいレコードを追加した際に、自動的にレコード内の項目
>(例えば項目名「フラグ」)に”1”という値が入力されるようにした
>いのです。
>→値が数値の場合、文字の場合それぞれで教えて下さいませ。

結論から言えば、表自体の機能だけで可能。表定義を開いて(属性メニューで
「項目属性を全て表示」にチェックが入っていなければチェックして)、
挿入初期値式に[フラグ]が数値であれば 1、文字型であれば
"1"を記述するだけでよかろうかと思います。

ある項目の値を自動的にセットしたい場合、一般的には次の三つによります。

1.項目計算式
2.挿入初期値式
3.編集初期値式

項目計算式と初期値式の違いは上書き訂正が許されるかどうかで、
項目計算式は結果が気に入らなくとも訂正ができません。たとえば、
[性別]により、男なら「くん」、女なら「さん」とする場合、

#条件選択([性別]="男",[氏名]+"くん",[性別]="女",[氏名]+"さん")

としますが、これに先生が混じっていた場合も[性別]により「〜くん」「〜さん」になってしまいます。
これを直すには[先生]とか言う項目を追加し「先生」と入れておくことにしてこんな計算式に変えます。

#条件選択([先生]="先生",[氏名]+"先生",[性別]="男",[氏名]+"くん",[性別]="女",[氏名]+"さん")

(ホントは条件選択を二重にかけるべきですがちょっと手抜き)

一方初期値式のほうはあくまで「初期値」ですから上書きが可能です。

挿入初期値式はレコード挿入の瞬間セットされます。
編集初期値式はカーソルがその項目にきたとき値がカラならばセットされます。

ここでも「くん」「さん」でやってみますが、挿入初期値式ではまったくのナンセンスとなります。
レコード挿入の瞬間ですから[性別]にはまだ値が入っていないからです。
つまりそのレコードの他の項目による制御には使えないということです。
一方編集初期値式ではほぼ項目計算式と同様のことができますが、
[性別]を入力後、カーソルをその項目にもってくるまで「くん」も「さん」も入りません。

では、挿入初期値式はどう使うかということですが、
一律にある値を入れたいとき、連番等直前のレコードの値により制御したいとき等に使います。

今回は新規レコードに常に「1」を立て、おそらくはある処理の後クリアするのでしょうから、
まさに挿入初期値式が最適と思われます。

(もちろん、KEVや CMDでやってもいいのですが。)

26964 Re:フォームにない項目に入力する 脱初級! 2004/07/05-15:45
記事番号26958へのコメント
>今回は新規レコードに常に「1」を立て、おそらくはある処理の後クリア
>するのでしょうから、まさに挿入初期値式が最適と思われます。

宮城様、詳しいご説明を賜り、感謝申し上げます。
私の一部説明不足がありまして、挿入初期値はあえて採用していませんでした。
といいますのは、項目フラグに1を立てるのは、新規レコードについてのみですので、
他の既存レコードをいじっているときに初期値に1がたってしまうのは、避けたい、という意図がありました。
大変丁寧に解説をいただき、本当に勉強になりました。
このたびは、ありがとうございました。m(_ _)m

26965 Re:フォームにない項目に入力する 脱初級! 2004/07/05-15:47
記事番号26957へのコメント
>手続き定義開始 フォーム::フォーム開始(長整数 &表番号)
>メソッド呼び出し @フォーム.更新モード設定(4)
>項目値代入 [フラグ]=1
>手続き定義終了
>
>これでどうでしょうか?

しぼうかん様、ご教授ありがとうございました。
早速、こちらでやってみようと思います。
ご教授、ありがとうございました。m(_ _)m


26966 Re:フォームにない項目に入力する 宮城 2004/07/05-15:51
記事番号26964へのコメント
>他の既存レコードをいじっているときに初期値に1がた
>ってしまうのは、避けたい、という意図がありました。

どうも誤解があるような。挿入初期値式は「他の既存のレコードを
いじっている」ときにはたたないんですけど。

26971 Re:フォームにない項目に入力する 脱初級! 2004/07/05-17:14
記事番号26966へのコメント
宮城さん
>どうも誤解があるような。挿入初期値式は「他の既存のレコードを
>いじっている」ときにはたたないんですけど。

ごめんなさい、やってみたところ、宮城さんのご提案の方が、簡単に実現できました。
たびたびすいませんです。ありがとうございました。m(_ _)m


戻る