4 返信 最新の回答 日時: Jun 26, 2017 10:02 PM ユーザー:MiyukiImaizumi

    データ登録するスクリプトでデータベーススキーマー使用中のエラー

    endou08

      データ登録するスクリプトでデータベーススキーマー のエラーが出てしまいました。

      必ずではなく、2回ほど発生しました。

       

       

      スクリプトの概要は以下のようになります。

       

       

       

      ・入力用テーブルの値を変数に入れる。

      ・本番用テーブルのレイアウトに移動

      ・全レコード表示>対象外に (対象レコードを0件に)

      ・新規レコード

      ・変数の値を本番用テーブルにフィールド設定

      ・グローバルフィールドに「登録完了しました」の値をフィールド設定

       

       

       

       

      画面を見ると、入力用のテーブルから値を変数に入れて、本番テーブルのあるレイアウトに

      なってからエラーのダイアログが表示しているようです。

      エラーにOKを答えると後のグローバルフィールドだけフィールド設定で値が入りました。

      新規レコードは作成されていない模様。

       

       

       

       

      そこで、以下の質問があります。

       

       

      ①データベーススキーマの使用中 のエラーは、どのような状況で発生するものでしょうか?

        

      ②エラーにOKで答えた後、なぜグローバルフィールドだけフィールド設定されているのか?

       通常エラーにOKを答えるとスクリプトはどうなりますか?

       なぜか、新規レコードは作製されていないが、グローバールフィールドのみ

       値が入っている。

       

       

      ③エラーのOKに対し、きれいな対処をしたいがどのようにすればいいのか?

       グローバルフィールドの「登録完了しました」の値が出ないければ、エラーになっていることが

       分かるので、制御しやすいが・・・。

       また、エラー返答に対し、スクリプトで対応できないか?

       

       

      ④このエラーの時、スクリプトでユーザーによる強制終了を許可をオフにするとどうなるか?

       また、エラー処理をオフにして、メッセージを表示しないとどうなるか?

       

      以上、ご教授のほどお願いします。

        • 1. Re: データ登録するスクリプトでデータベーススキーマー使用中のエラー
          MiyukiImaizumi

          こんにちは

           

          ①データベーススキーマの使用中 のエラーは、どのような状況で発生するものでしょうか?

          運用中にフィールド定義を開いて、フィールド定義のオプション画面を見る、あるいは、何かしらフィールド定義を変更するということをすると、フィールド定義を保存するまで、他のユーザーは該当テーブルのレコード編集ができなくなります。

           

          ポイントは、変更しなくてもオプション画面を開いただけで、レコード作成のロックがかかるということです。

          どのような計算フィールドにしていたか、とか、自動入力はどうなっていたかとか確認するだけで発生します。

           

          ②エラーにOKで答えた後、なぜグローバルフィールドだけフィールド設定されているのか?

          推測ですが、グローバルフィールドが違うテーブルにあるからではないかと。

           

          ③エラーのOKに対し、きれいな対処をしたいがどのようにすればいいのか?

          新規レコードを作成スクリプトステップの後に、Get(最終エラー)でエラー番号をとって処理を分岐させることで対応となるかと思います。

           

          ④このエラーの時、スクリプトでユーザーによる強制終了を許可をオフにするとどうなるか?

           また、エラー処理をオフにして、メッセージを表示しないとどうなるか?

          新規レコードが作成できていないことが不明のまま、処理が進められると思います。

           

           

           

          • 2. Re: データ登録するスクリプトでデータベーススキーマー使用中のエラー
            MiyukiImaizumi

            補足です。

             

            ver16ではこの症状は出ないですね。

            versionはいくつをお使いですか?

            • 3. Re: データ登録するスクリプトでデータベーススキーマー使用中のエラー
              endou08

              Imaizumi様

               

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

               

              FMのVersion は、15になります。

               

              フィールド定義を見る時は、DBを止めてからのほうが無難ですね。

              FM8の時はこういったことはなかったですが・・・

               

              ちなみに、Get(最終エラー) で制御する方法について、もう少し教えていただけないでしょうか?

               

               

              今回のように、DBへ書き込みや新規レコードをするスクリプトに仕込むことになると思います。

               

              ・入力用テーブルの値を変数に入れる。

              ・本番用テーブルのレイアウトに移動

              ・全レコード表示>対象外に (対象レコードを0件に)

              ・新規レコード

              ・変数の値を本番用テーブルに「フィールド設定」

              ・グローバルフィールドに「登録完了しました」の値をフィールド設定

               

              この場合は、新規レコードの後に、Get(最終エラー)でスクリプトを強制終了するようにすればいいでしょうか?

               

              また、編集処理の場合は以下のようなスクリプトを組んでいます。

               

              編集ボタン

              ・詳細レイアウトで本番フィールドの値を変数に入れる。

              ・編集用レイアウトに移動

              ・変数の値を、編集用フィールド(グローバル)に「フィールド設定」

               ↓

              編集(入力)

               ↓

              登録ボタン

              ・編集レイアウトで編集用フィールド(グローバル)の値を変数に入れる。

              ・詳細レイアウトに移動

              ・変数の値を、本番フィールドに「フィールド設定」

               

              ユーザーがデータを書き換えようとした時エラーになるなら、

              「編集ボタン」のフィールド設定の後に、Get(最終エラー)でスクリプトを強制終了するようにすればいいでしょうか?

              ただ、編集したいフィールドは複数あります。スクリプトの最初に出てくるフィールド定義の後になるのでしょうか?

               

              確認ですが、エラーコードは、FileMaker Pro エラーコード リファレンス の内容でよかったでしょうか?

              FileMaker Pro エラーコード リファレンス | FileMaker

              • 4. Re: データ登録するスクリプトでデータベーススキーマー使用中のエラー
                MiyukiImaizumi

                >この場合は、新規レコードの後に、Get(最終エラー)でスクリプトを強制終了するようにすればいいでしょうか?

                強制終了というえ、Get(最終エラー) が0以外を返したら、元の入力用画面に戻ってから警告を表示して「現在のスクリプトを終了」でしょうか?

                 

                >「編集ボタン」のフィールド設定の後に、Get(最終エラー)でスクリプトを強制終了するようにすればいいでしょうか?

                この場合は、詳細レイアウトに移動した後に、「レコード/検索条件を開く」スクリプトステップを使い、そこでエラーをとります。

                エラーが出たら、そのエラー内容によってユーザーにフィードバックを返してあげるようにすればいいと思います。

                 

                >確認ですが、エラーコードは、FileMaker Pro エラーコード リファレンス の内容でよかったでしょうか?

                はい。あるいはアプリケーションメニューにあるヘルプからも表示させられます。

                 

                >FM8の時はこういったことはなかったですが・・・

                そうなんでよね、途中のバージョンから変更になっていて慌てました(^^;)