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

照会表示したデータの編集をするとインデックス重複エラー表示

コメント

18件のコメント

  • y-yoshi

    こんにちは。

    一つ確認させてください。

    先のスレッドも見ていたのですが、照会リンクでデータ更新しているという話がありました。

    その流れの話ですよね。ひょっとしたら左の伝票登録のプログラムで

    照会リンクを使ってデータ更新をしている、ということでしょうか?

     

  • yamamoto

    y-yoshiさん、ご返信ありがとうございます。

    左の伝票登録PGに照会リンクを使用しています。

     

    また別で、伺いたいのが皆さん一般的にデータ表示をどのように行っているのでしょうか。

    照会リンクを使用しているとエラーが多発するため、他に方法がないか探しています。

  • vg

    タスク構造とデータの重複不可インデックスがどうなっているがわかりませんが、
    右の表示になるということはほかに重複不可インデックスがあって制約に引っ掛かっているとか、
    そもそも右側の画面に貼っている項目がただしくないとか
    左の画面でデータを更新しているとのことですが、どのようにされているのでしょう
    インデックス重複エラーは文字通り重複不可のインデックスで同じ値がすでにありますよて話なので
    照会リンクを項目更新してもあまりそうはならんとおもうのです

  • y-yoshi

    yamamoto様

    なるほど。だとすると、これは予想ですが照会プログラムからデータを呼び出しているつもりが

    呼び出しがうまくいっておらず、伝票情報Noを変更しているだけになっているのではないかと思います。

    これも確認ですが、

    伝票登録PGフォームに配置された伝票情報Noは、照会リンクで配置された伝票データの

    伝票情報Noを直接入力できるようにしてませんか?

    それを照会PGに受け渡して番号を取得していませんか?

  • yamamoto

    vgさん、ご返信ありがとうございます。

    インデックスは伝票情報Noのみを定義しています。

    照会画面の項目は左の登録画面と同じデータの伝票情報No.と伝票名です。

    データの更新は左の登録画面に照会リンクを使用して行っています。

    照会表示した後に編集→終了動作を行うとインデックス重複エラー表示がされ

    何が引っ掛かっているのか確認のため、照会画面を表示するとすべてのコードが編集したコードに変換されています。

    ちなみに何度かテストしてみたところ、一つ目のデータを編集した場合には正常に終了することが出来ました。

    二つ目のデータは最後に表示した状態で終了してもインデックス重複エラー表示がされました。

    Magic初心者のため、情報が足りないかもしれませんが現状分かっているのはここまでです。

  • こんにちは yamamotoさん

    やりたいことは単純なのに、何か特殊な構造のプログラムの様に思えますね。 

    出来れば、プログラム構造の分かるスクリーンショットとかがあれば、皆さんもっとアドバイスしやすいと思いますよ。

    HAYATO@アインシュタイン設計社

     

  • yamamoto

    y-yoshiさん、ご返信ありがとうございます。

    おっしゃるとおりです。

    左の画面は登録画面なので新規登録の場合は伝票Noの直接入力をします。

    y-yoshiさんのお話を伺って、直接入力できるのが良くないのかなと思い

    伝票情報NoのパークにStat(0,’C'MODE)を入力し新規登録以外は修正不可にしたところ

    照会画面すら開かなくなりました。

     

  • y-yoshi

    vg様

    これ、遅延トランザクションでデータごにょごにょすると

    登録はできないけど見た目上、こうなったりした記憶があるんですよね・・・。

    結局エラーなんで最終的にはロールバックされますが。

  • yamamoto

    遠藤勇人さん、ご助言ありがとうございます。

    分かりにくいと思って全体のお話をしていなかったのですが

    最初に画像を載せた2つのPGにもう一つの単独PG、計3つのPGが連動しています。

    下記画像の伝票情報セットで起動

    伝票情報セットでは 伝票No、日付印刷形式、下段右側が直接入力可能です。

    伝票情報セットの伝票情報Noで F5照会画面とF1伝票登録画面が起動できます。

    F1伝票登録画面で 伝票情報No、下段左側が直接入力可能です。

    F1伝票登録画面の伝票情報NoでもF5照会画面が起動できます。

  • y-yoshi

    yamamoto様

    大体どのように作っているかわかりました。

    まず、照会リンクでは既存のデータの修正はできても新規登録はできないので

    伝票登録PGとしては照会リンクは使えないと思います。

    次に、照会からデータを呼び出すのであるならば、伝票情報Noは変数でないと

    直接データを更新してしまいます。

    手順としては

    ①変数として伝票情報Noを配置。照会から更新するのはあくまでこちら。

     その際、変数はデータビューに含めない方がいいです。

    ②データはメインソースでいいのではないかと思います。

     タスク自体は登録も修正も許可するように設定してください。

    ③伝票情報Noでメインソースの情報Noを変数の情報Noで範囲指定、代入も変数の情報Noを入れる

    ④照会で伝票番号を取得した際など、変数の情報Noが変更された後にビュー再表示(ボタンアクションの方がいいかも)

    これでデータ取得できないですかね

  • yamamoto

    y-yoshiさん

    ご返信ありがとうございます!

    一度試してみます。

    時間がかかりますがまた不明点などあれば伺いたいです。

  • yamamoto

    y-yoshiさん、すみません。

    さっそくで恥ずかしいのですが変数定義はどこで行うのでしょう。

    データビューで行うと思っていたので、変数をデータビューに含めないとなると分かりませんでした。

    また、この場合伝票登録PG側で変数定義を行うでよいでしょうか?

    せっかくのアドバイスも理解できず申し訳ないです。

  • y-yoshi

    yamamoto様

    こちらこそ言葉足らずで申し訳ないです。

    変数定義はデータビューです。その変数の特性内に「データビューの一部」という特性があって

    こちらをyesにすると、メインソースのカラムと同じ動きとなり

    変数を更新してもレコード後処理が走るようになります。

    伝票登録PGでこの動きにしてしまうと、伝票を呼び出すために変数を更新したのに、その値でデータ更新に行ってしまうことになるため

    データビューの一部特性をNoにする必要があるということです。

  • vg

    y-yoshiさ
    確かに・・遅延ならできそうなきがしますね・・・

    あとは、まとめてやろうとしてこんがらがっているのと
    トランザクションの範囲を意識されてないのではと思います

    タスク構造が
    伝票情報セット
     ┗ F1 伝票登録
     ┗ F5 伝票照会 
    という構造であったとして
    伝票情報セットとF1 伝票登録とF5 伝票照会 は独立した機能で
     伝票情報セットは伝票情報のデータを登録修正かな?
     F1伝票登録では伝票のマスタの登録修正
     F5伝票照会では伝票のマスタの照会のみ
    とすべて処理する内容が違うので
    各々プログラムでトランザクションが完結しているのであれば重複エラーにはならないかと思います

    基本的な使い方はMagicのスキルアップセンターにGetting Started Magic xpaとか
    ちょっと古いですが、Magic eDeveloper V10 コーディングサンプル とかも参考になるので
    一度見られてはと思います

  • yamamoto

    y-yoshiさん、ご返信ありがとうございます。

    メインソースの情報Noを変数の情報Noで範囲指定、代入も変数の情報Noを入れるまで出来ました。

    次は照会画面側での結び付けだと思うのですが、可能であれば詳しく伺えないでしょうか。

     

  • yamamoto

    vgさん、貴重なご意見ありがとうございます。

    一旦、一つ一つ整理してみます。

    MagicのスキルアップセンターにGetting Started Magic xpaは確認しているので
    Magic eDeveloper V10 コーディングサンプルを見てみようと思います。

    PGの知識自体、ほとんどなく頑張って勉強しているところなので皆さんのご意見一つ一つがとてもありがたいです。

  • y-yoshi

    yamamoto様

    照会は同一プログラムの別タスクに作ってますか?プログラムを分けていますか?

    いずれにしても照会側にパラメータとして伝票Noを受け取る変数(パラメータ)を作成し

    登録PGからは変数の伝票Noをパラメータに受け渡しながら呼出し、

    照会側では表示されたデータを選択したときにそのパラメータを更新する形でいいかと思います。

    なお、照会側はデータベースは読込のみ、タスクは照会のみにしておいた方が色々安全です。

  • yamamoto

    y-yoshiさん何度もありがとうございます。

    試してみます!

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