作成した返信
-
著者投稿
-
MZPlatformユーザー会サイト管理者
確かに、以前はこれで動作していたはずですが、現在はこちらでも同じエラーが発生します。
MZのファイル拡張子に対する関連付けが正常に動作しないようです。これは不具合かもしれませんし、現在の制限事項かもしれませんので、こちらで引き続き調査します。関連付けが機能しない場合でも、実行用のプログラムのパスを指定してファイルを開くことは可能です。添付ファイルで記述方法と動作をご確認ください。
MZPlatformユーザー会サイト管理者こちらで調べた結果、通信先プログラムの終了はしなくてもよいみたいですが、正しくは添付のような処理になると思います。ご確認ください。
添付ファイル:
MZPlatformユーザー会サイト管理者実際の動作確認には時間がかかりますので、先に下記についてご確認いただけますでしょうか。
外部プログラム通信の通信先プログラムの終了が呼び出されていないようです。
また、ボタンのアクションイベントでテキストファイル出力のファイルを閉じるのは問題がありそうです。MZPlatformユーザー会サイト管理者整数の割り算はなかなか難しいですが、確かに添付していただいた方法では思った通りにならないようです。これを不具合と考えて他に影響を与えないように修正することも難しいので、やはり前回紹介した方法がおすすめです。
以下、解説です。
整数の割り算とするために除算コンポーネントのDecimalPlaceを0にしたようですが、今回の問題はこれが影響しています。除算コンポーネントは常に実数として割り算をしていて、どこまでも割り切れないときの丸め用にDecimalPlaceがあり、かつそのときの丸めモードが四捨五入に限定されています。つまり、DecimalPlaceを0にして整数の割り算をすると、実数として割り算をした結果次第で切り上げになります。
したがって、除算コンポーネントを使う場合はそのまま実数の計算として使い、結果から小数点以下を切り捨てて整数の割り算の結果にするのが良いと思います。例えば、結果を数値入力フィールドに設定して、フィールドの数値型を実数として小数点以下の最大桁数を0、丸めモードを切り捨てにすれば可能です。
MZPlatformユーザー会サイト管理者ビルダー画面のキャプチャ画像のみでは正確な記述がわかりませんが、おそらく整数の割り算ではなく小数の計算で結果が丸められていると思います。
整数の割り算にはいくつか方法がありますが、例えば整数(BigInteger)格納変数を使って、添付ファイルのように記述する方法があります。演算子コンポーネントを複数使うよりは、こちらの方がシンプルになると思います。変数側のメソッドがあまり日本語化されていないので探しづらいかもしれませんが、ご確認ください。
添付ファイル:
MZPlatformユーザー会サイト管理者1.実際の状況によりますが、基本的にはエラー発生後の通常メソッド起動は飛ばされて、ErrorOnlyやFinallyの起動メソッドだけが実行されます。そのようなサンプルアプリを作成して試してみるのが良いと思います。
2.データベースアクセスに限らず、起動メソッドでエラーが発生すると、通常はその都度ダイアログが表示されます。ただし、ErrorOnlyやFinallyの起動メソッドがあると、エラーダイアログが表示されなくなるという仕様になっていると思います。そのため、サンプルではErrorOnlyでダイアログを表示する処理を追加している箇所があります。
MZPlatformユーザー会サイト管理者最終的に何を質問したいのかがよくわからないので、こちらが質問と認識できた部分だけ回答します。
分類テーブル作成コンポーネントは、かなり難易度が高いので、直接使うことは考えない方が良いです。それを使用した複合コンポーネントがありまして、そのサンプルがインストール時に含まれていますので、まずは下記のファイルをご覧ください。
C:\MZPlatform\3.6\AP_DATA\Sample\グラフ化.mzax
ご紹介するのは、テーブルデータから各種グラフやガントチャート用にデータを変換する複合コンポーネントです。ビルダー上のポップアップメニューで「複合コンポーネント追加>グラフ>グラフ化モジュール.mzcx」で追加することができます。この複合コンポーネントの使い方は、複合コンポーネントをダブルクリックして中の階層に移動すると、コメントに説明が書いてあります。いずれにしろ説明が抽象的で難しいので、添付していただいた処理をこのグラフ化の複合コンポーネントで置き換えてみました。添付ファイルをご確認ください。
「グラフ化テーブル表示」ボタンを実行すると、「メソッド値分類テーブル表示」ボタンと同じ動作をします。結果的には、分類テーブル作成コンポーネントの使い方は合っていたと思います。
添付ファイル:
MZPlatformユーザー会サイト管理者下記回答です。
1.テーブルにSQL文を記述して実行する際には、0列目にSQL文、1列目に実行時に発生するイベント番号を記入したテーブルを渡します。イベント発生時に処理を分岐したい場合には、別の番号を指定する必要がありますが、分岐が不要であれば常に0と記入しておけば良いです。
2.MySQLコマンドラインクライアントでSQL文を実行する場合はセミコロンが必要ですが、MZでデータベースアクセスコンポーネント経由でSQL文を実行する場合はセミコロン不要です。これは仕様になります。
MZPlatformユーザー会サイト管理者今回は添付のMZアプリを開けましたが、MZASファイルのZIPファイルを添付するのはおやめください。こちらはMZのバージョンが異なると開けないタイプのファイルですので、MZAXファイルをお使いください。
さて、2は列ではなく行位置の話ですね。問題は、繰り返し制御の「繰り返し処理を実行する」の引数の指定の仕方です。引数の説明を見てもらえばわかりますが、「開始値」と「開始値を含めるかどうか」の組み合わせで、「0」と「false」と書くと、最初の行を含めないという指定になります。もしかしたらこれは理解した上で、先頭行が「1」だと考えていることが問題かもしれません。行や列の先頭位置は「0」となりますので、お間違えの無いように。
1はわかりにくいですが、列を追加するときに整数型にしていることが問題です。整数に変換できない文字列をセルに設定したときに、おそらく内部的に工程番号部分だけを見て整数に変換しているのだと思います。文字列型の列に変更すれば、正しく表示されます。
修正版ZIPファイルを添付しましたので、ご確認ください。
- この返信は、 MZPlatformユーザー会 により、 5 年, 9 ヶ月 前 に編集されました。
MZPlatformユーザー会サイト管理者下記回答です。
1.実際に確認していないので正確にはわかりませんが、接続したまま複数のクエリを実行して、最後に切断する方法は間違いないと思います。ただ、自動コミットのままで本当にそうなったでしょうか。単に最初のクエリでエラーが出たからということはないですか。そもそも、このように分ける必然性がよくわかりません。毎回コミットせずに、例えば複数のテーブルに対するクエリを一括で反映したいということでしょうか。
なお、FAQにはトランザクションの話題が複数ありますので、下記リンク先をご覧ください。
https://ssl.monozukuri.org/mzplatform/faq/faq/faq_technical/database/database_a51.html
https://ssl.monozukuri.org/mzplatform/faq/faq/faq_technical/database/database_a40.html
https://ssl.monozukuri.org/mzplatform/faq/faq/faq_technical/database/database_a73.html
https://ssl.monozukuri.org/mzplatform/faq/faq/faq_technical/database/database_a27.html2.そういう切断方法も可能です。ダイアログのアクションイベント処理から呼び出します。また、エラーが発生しても必ず実行させるようにメソッド起動のFinally起動というものもあります。
3.はい、それでよいです。ファンクションを使わずに直接呼んでも同じです。
4.詳細には調べていませんが、これは特に違いはないと思います。必ず切断してから終了することが重要です。一点だけ、接続している時間が長いと、複数からの接続で同時接続数の問題が出るかもしれません。
-
著者投稿