新規レコードの作成とそのカラムに値を設定するロジックの実装について
変数「a」と「b」にクライアントが入力した値を格納し、ボタン「Submit」を押した際に新規レコードを作成して、それぞれ項目Aに「a」、項目Bに「b」の値を設定するロジックを実装したいと考えています。
現状のロジックでは、項目に値を入れる処理が先に実行され、その後に新規レコードが作成されてしまいます。希望としては、先に新規レコードを作成し、その後に項目Aと項目Bに値を設定するようにしたいです。
どのようにロジックを組めば、先に新規レコードが作成され、項目に値を設定する順序にすることができるでしょうか?
現状のロジック:
項目更新 項目B 変数B
イベント SUBMITボタン
イベント実行 行作成
-
もっと簡単な方法もあると思いますが以下一例です。
これがベストではないと思います。
オンラインタスクのみで実現する方法もあると思います。
普段以下のような作りを自分はしません。
-
勘違いをしておりました。
先に新規レコードが作成され、
項目に値を設定する順序という事でしたら、上記は違います。
ボタンを押したら、レコード登録されるという一例です。 -
コメントありがとうございます!
やりたかったことは、ボタンを押したらレコード登録されるであっています。
登録リンクを使用すれば、新規レコード作成という手順はいらないのですね。
MAGICXPA導入したばかりで、よくわかっていませんでした。
ありがとうございました。
-
良かったです。返答ありがとうございます。
-
iwasakiさん、
親タスクで変数に値を入力させ、ボタンが押されたら登録モードの子タスクを起動して、親の変数の値を代入(または項目更新)すればいいと思いますよ。
-
tanda様
コメントありがとうございます
登録モードの子タスクを起動して登録する方法も試してみようと思います
アドバイスありがとうございます
-
iwasakiさん、
試しにテストプログラムを作ってみました。
プログラムを実行します。

変数に値を入力します。

Submit ボタンを押します。
すると、新しいレコードを作成して、変数の値を代入します。

こんな感じですかね?
-
iwasakiさんがMagic xpa を使い始めで
イベント実行 行作成 が不要なのですね
との書き込みがございましたので
それを受けてのコメントを致します。イベント実行 行作成は、
今が修正モードで
既存レコードにパーキング中に
イベント実行 行作成を行いますと
新しいレコードの準備をしてくれます。長ったらしくなりましたが
データを表形式表示画面で修正モードで
一般的にはF4キーを押したときと
同じ動きになります。
表形式画面の事をラインモードと
Magicでは呼んでいるようです。1レコード1画面表示をMagicでは
スクリーンモードと呼んでますが
この場合のF4 行作成では
新しいレコードの入力用の画面になります。
(登録モードになります) -
Tanda様
試しにテストプログラムを作っていただき、ありがとうございます。
親タスクで変数に値を入力させ、ボタンが押されたら登録モードの子タスクを起動して、親の変数の値を代入(または項目更新)するプログラムを作成してみましたが、うまくいきませんでした。
具体的には、以下のような挙動が発生しています
- 親タスクで値を入力し、submitボタンを押すと、子タスクのフォームが表示されます。
- その際、親タスクの変数の値は子タスクのフォームに正しく代入されます。(子タスクのフォームは表示させたくない)
- しかし、子タスクのフォームを閉じ(×ボタンで消し)、親タスクに戻ると、親タスクの変数の値が残っていません。
この挙動が発生する原因や解決方法について、アドバイスをいただけますでしょうか?
タスクとサブタスクの設定状況の画面を貼ります。






どうぞよろしくお願いいたします。
-
nkmt様
ご説明ありがとうございます!
イベント実行 行作成の役割について理解が深まりました
また、ご説明頂いたBATを使用した登録方法を試したところうまく動きました
-
iwasakiさん、
親のデータビューではメインソースは使わず、変数だけにします。フォームは親のフォームに子のフォームを重ねて、子フォームのウィンドウタイプを「C=子ウィンドウ」にし、タイトルバーを「No」にして、境界スタイルも「N=なし」にします。そうするときれいに表示されますよ。
ちなみに、親でサブフォームを使ったら?っていう人も出てくるかもしれませんが、サブフォームにするとタブキーでカーソルが勝手に子のフォームに入ってしまいますので、その制御がかえってややこしくなります。
-
tanda様
子フォームを使用する方法について、初めて知りました
また、サブフォームに関する注意点も教えていただき、ありがとうございますプログラムを試してみました。表示させることできました!(子フォームの枠残しています)

子フォームに「項目1」と「項目2」に代入した値は表示されるものの、
プログラムを閉じるとデータベースに反映されていません。データベースに反映させるには、どのようにすればよいでしょうか?
現状では、以下のように試みています。サブタスクのロジック
レコード 前
項目更新 項目1 変数1
項目更新 項目2 変数2
もし何か見落としている点や、改善すべき部分があれば、アドバイスをいただけると助かります。
-
iwasakiさん、
キーボードからの直接入力がひとつでもあれば、DBに自動的に登録されますが、変数の代入や項目更新だけでDBに直に登録したい場合は、子タスクの「項目更新」の特性を「強制更新 = Yes」にしてやります。
Magicの基礎トレーニングで教えている内容の中でも、重要なポイントの一つです。マジック社の基礎トレーニングを受講した人は、講師からこのことを叩き込まれています(笑
-
「強制更新 = Yes」にすることで、データベースに登録できるんですね。
Magicの基礎トレーニングでも教わる重要なポイントとのこと、なるほどです。
何が原因で更新されないか、かなり迷っていました。
教えていただきとても助かりました!
-
iwasakiさん、
ただし、ラインモードのプログラムでこの「強制更新 = Yes」を使用するのは要注意です。何もしなくても、各レコードごとにDBへの上書き更新が発生しますので、スクロールのパフォーマンスがかなり落ちます。そのために、このパラメータはデフォルトが「No」になっています。
-
強制更新の話ついでですが、
ボタン操作のみでレコードの値を書き換える場合、
強制更新=Yesにする事もあります。
そうしないでボタンを押したら、別FLGにTrueをセットして
そのFLGがTrueの場合は、強制レコード後処理を行う作りをする事もあります。 -
ラインモードでも使用してみようと思っていましたが、スクロールのパフォーマンスが悪くなるのですね。
情報ありがとうございます。
-
nkmt様
強制レコード後の機能があることを知りませんでした
情報ありがとうございます
サインインしてコメントを残してください。
コメント
18件のコメント