同一アプリの複数クライアント使用

MZ Platformとは 掲示板 MZプラットフォームユーザー会掲示板 同一アプリの複数クライアント使用

6 件の投稿を閲覧中 - 1 ~ 6 件(全 6 件)
  • 著者
    投稿
  • #5187
    ORIteck CO., LTD
    一般参加者

    同じネットワーク内でデータベースを置いたPCに複数のクライアントがアクセスし、作業者の日々タイムテーブルを更新、追加するアプリを作成中です。現在は、データベースの情報を一旦MZに取り込み修正の後にデータベースに戻すやり方です。このやり方では、修正したデータが元に戻ったりと、クライアントの操作タイミングで問題が発生するわけですが、そこで、同じアプリを使用しているクライアントがいる場合その情報を得るような方法はありませんか?

    #5188
    MZPlatformユーザー会
    サイト管理者

    MZの機能としては特にございません。一般的な考え方としては、すべてのクライアントが同じデータベースに接続するのであれば、データを編集中のクライアントの情報をデータベースで管理する方法が考えられます。

    #5189
    ORIteck CO., LTD
    一般参加者

    MySQLの知識も乏しのですが、更新追加するクライアントはテーブルロックをかけてから操作することで検討し、ロック状態を事前確認するために『show open tables from ‘DB名’』の実行内容を利用しました。
    ロックの確認方法は、ボタンのアクションイベントでクエリ、テーブル格納変数に設定し、テーブル格納変数の設定イベントでロック情報のセルデータを位置指定で取得しテキストフィールドに設定、テキストのデータ設定イベントで等価演算し、等価演算の処理完了イベントで別のテキストフィールドに背景色をイベント番号別で指定します。これで実現できたのですが、この方法をダイアログのアクションイベント(ダイアログが表示されたとき)で実行しようとすると、エラーこそなりませんが、ロック状態が違います。ボタンのイベントとダイアログのイベントで違いがあるのでしょうか?

    #5192
    MZPlatformユーザー会
    サイト管理者

    MySQLの内部ロックを使用すれば確かに機能としては実現できますが、そのままアンロックをせずに終了するアプリがあれば容易にデッドロックになりますのでご注意ください。

    ご質問について、まずはダイアログ表示のアクションイベントが実際に発生しているかご確認いただけますでしょうか。呼び出す起動メソッドの前で、メッセージダイアログ表示などを起動することで確認できます。

    もしダイアログ表示のアクションイベントが発生していなければ、ダイアログコンポーネントの属性でShowEventEnabledがtrueになっているかをご確認ください。通常はこの属性がfalseになっていて、ダイアログ表示のときにアクションイベントが発生しないようになっております。

    #5197
    ORIteck CO., LTD
    一般参加者

    早々のご連絡ありがとうございます。属性変更で解決しました。定常起動でどちら(開く閉じる)のイベントなのか気になっていましたが、trueに変更することで明示的にイベント番号を指定する必要がでてくる理解でいいでしょうか?

    念のためといいますか、ダイアログを閉じるイベントでもアンロックのクエリを送ります。ロックしてない状態でもアンロックのクエリを実行することになるのですが、何か問題になるでしょうか?

    #5200
    MZPlatformユーザー会
    サイト管理者

    属性変更とは別に、ロックとアンロック処理の起動に対するイベント番号の指定は必要です。定常起動ですと、ダイアログの表示と閉じたときの両方とも実行されることになります。

    ロックしていない状態でもアンロックを実行して特にエラーが発生しなければ問題ないかもしれませんが、MySQL側の機能ですので保証はできません。実際に複数クライアントでロックとアンロックが適切に実行できるかはご確認ください。

6 件の投稿を閲覧中 - 1 ~ 6 件(全 6 件)
  • このトピックに返信するには、ログインしてください。