メインコンテンツへスキップ

新規レコードの作成とそのカラムに値を設定するロジックの実装について

コメント

18件のコメント

  • nkmt

    もっと簡単な方法もあると思いますが以下一例です。
    これがベストではないと思います。
    オンラインタスクのみで実現する方法もあると思います。
    普段以下のような作りを自分はしません。


  • nkmt

    勘違いをしておりました。
    先に新規レコードが作成され、
    項目に値を設定する順序という事でしたら、上記は違います。

    ボタンを押したら、レコード登録されるという一例です。

  • iwasaki

    コメントありがとうございます!

    やりたかったことは、ボタンを押したらレコード登録されるであっています。

    登録リンクを使用すれば、新規レコード作成という手順はいらないのですね。

    MAGICXPA導入したばかりで、よくわかっていませんでした。

    ありがとうございました。

  • nkmt

    良かったです。返答ありがとうございます。

  • Tanda

    iwasakiさん、

    親タスクで変数に値を入力させ、ボタンが押されたら登録モードの子タスクを起動して、親の変数の値を代入(または項目更新)すればいいと思いますよ。

  • iwasaki

    tanda様

    コメントありがとうございます

    登録モードの子タスクを起動して登録する方法も試してみようと思います

    アドバイスありがとうございます

     

     

     

  • Tanda

    iwasakiさん、

    試しにテストプログラムを作ってみました。

    プログラムを実行します。

    変数に値を入力します。

    Submit ボタンを押します。

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

    こんな感じですかね?

     

  • nkmt

    iwasakiさんがMagic xpa を使い始めで
    イベント実行 行作成 が不要なのですね
    との書き込みがございましたので
    それを受けてのコメントを致します。

    イベント実行 行作成は、
    今が修正モードで
    既存レコードにパーキング中に
    イベント実行 行作成を行いますと
    新しいレコードの準備をしてくれます。

    長ったらしくなりましたが
    データを表形式表示画面で修正モードで
    一般的にはF4キーを押したときと
    同じ動きになります。
    表形式画面の事をラインモードと
    Magicでは呼んでいるようです。

    1レコード1画面表示をMagicでは
    スクリーンモードと呼んでますが
    この場合のF4 行作成では
    新しいレコードの入力用の画面になります。
    (登録モードになります)

  • iwasaki

    Tanda様

    試しにテストプログラムを作っていただき、ありがとうございます。

    親タスクで変数に値を入力させ、ボタンが押されたら登録モードの子タスクを起動して、親の変数の値を代入(または項目更新)するプログラムを作成してみましたが、うまくいきませんでした。

    具体的には、以下のような挙動が発生しています

    1. 親タスクで値を入力し、submitボタンを押すと、子タスクのフォームが表示されます。
    2. その際、親タスクの変数の値は子タスクのフォームに正しく代入されます。(子タスクのフォームは表示させたくない)
    3. しかし、子タスクのフォームを閉じ(×ボタンで消し)、親タスクに戻ると、親タスクの変数の値が残っていません。

    この挙動が発生する原因や解決方法について、アドバイスをいただけますでしょうか?

    タスクとサブタスクの設定状況の画面を貼ります。

    どうぞよろしくお願いいたします。

     

     

  • iwasaki

    nkmt

    ご説明ありがとうございます!

    イベント実行 行作成の役割について理解が深まりました

    また、ご説明頂いたBATを使用した登録方法を試したところうまく動きました

     

  • Tanda

    iwasakiさん、

    親のデータビューではメインソースは使わず、変数だけにします。フォームは親のフォームに子のフォームを重ねて、子フォームのウィンドウタイプを「C=子ウィンドウ」にし、タイトルバーを「No」にして、境界スタイルも「N=なし」にします。そうするときれいに表示されますよ。

    ちなみに、親でサブフォームを使ったら?っていう人も出てくるかもしれませんが、サブフォームにするとタブキーでカーソルが勝手に子のフォームに入ってしまいますので、その制御がかえってややこしくなります。

  • iwasaki

    tanda様

    子フォームを使用する方法について、初めて知りました
    また、サブフォームに関する注意点も教えていただき、ありがとうございます

    プログラムを試してみました。表示させることできました!(子フォームの枠残しています)

     


    子フォームに「項目1」と「項目2」に代入した値は表示されるものの、
    プログラムを閉じるとデータベースに反映されていません。

    データベースに反映させるには、どのようにすればよいでしょうか?
    現状では、以下のように試みています。

    サブタスクのロジック
    レコード 前
    項目更新 項目1 変数1
    項目更新 項目2 変数2

    もし何か見落としている点や、改善すべき部分があれば、アドバイスをいただけると助かります。

  • Tanda

    iwasakiさん、

    キーボードからの直接入力がひとつでもあれば、DBに自動的に登録されますが、変数の代入や項目更新だけでDBに直に登録したい場合は、子タスクの「項目更新」の特性を「強制更新 = Yes」にしてやります。

    Magicの基礎トレーニングで教えている内容の中でも、重要なポイントの一つです。マジック社の基礎トレーニングを受講した人は、講師からこのことを叩き込まれています(笑

  • iwasaki

    「強制更新 = Yes」にすることで、データベースに登録できるんですね。

    Magicの基礎トレーニングでも教わる重要なポイントとのこと、なるほどです。

    何が原因で更新されないか、かなり迷っていました。

    教えていただきとても助かりました!

  • Tanda

    iwasakiさん、

    ただし、ラインモードのプログラムでこの「強制更新 = Yes」を使用するのは要注意です。何もしなくても、各レコードごとにDBへの上書き更新が発生しますので、スクロールのパフォーマンスがかなり落ちます。そのために、このパラメータはデフォルトが「No」になっています。

  • nkmt

    強制更新の話ついでですが、
    ボタン操作のみでレコードの値を書き換える場合、
    強制更新=Yesにする事もあります。
    そうしないでボタンを押したら、別FLGにTrueをセットして
    そのFLGがTrueの場合は、強制レコード後処理を行う作りをする事もあります。

  • iwasaki

    tanda

    ラインモードでも使用してみようと思っていましたが、スクロールのパフォーマンスが悪くなるのですね。

    情報ありがとうございます。

     

  • iwasaki

    nkmt様

    強制レコード後の機能があることを知りませんでした

    情報ありがとうございます

サインインしてコメントを残してください。