作成した返信
-
著者投稿
-
MZPlatformユーザー会サイト管理者
[リスト格納変数]にコンポーネントを入れ、位置を指定してコンポーネントを取得したいときには、[ファンクション]や[イベント生成]など、任意の数値を引数に指定できるコンポーネントを使うと便利です。
ただし、コンポーネントを取得した後、そのコンポーネントのメソッドを実行するには一旦[コンポーネント格納変数]等に格納しなければなりません。
簡単な例を作成しましたので、ご覧ください。また[ファンクション]を使用するなら、[ファンクション]の引数にコンポーネント自体を指定しても良いかと思います。併せて2番目の例もご覧ください。[コンポーネント格納変数]の使い方は少し判りにくいので、疑問の点があればご返信ください。
処理を纏めるには他にも[複合コンポーネント]に入れるなども考えられます。ご検討ください。- この返信は、 MZPlatformユーザー会 により、 3 年, 6 ヶ月 前 に編集されました。
MZPlatformユーザー会サイト管理者金型履歴管理システムのサンプルアプリケーションには
1)MZPlatform\3.6_64\AP_DATA\MetalMoldフォルダの中のサンプルとしてのアプリケーションと2)MZPlatform\3.6_64\AP_DATA\Tutorial\金型履歴管理フォルダの中の01~13までの作成例題としてのアプリケーションとがあります。
MetalMoldフォルダのアプリケーションは、改変を想定しておらずチュートリアルの例よりも複雑になっています。実行時にコンポーネントを動的に画面上に配置し、終了時には画面上から削除する設定になっているため、画面編集画面で見ると何も配置されていないように見えます。Tutorialフォルダ内のアプリケーションは、自身で作成できるよう作られています。2)のMZPlatform\3.6_64\AP_DATA\Tutorial\金型履歴管理フォルダの中のファイルをどうぞご覧ください。
MZPlatformユーザー会サイト管理者情報ありがとうございます。
確かに、SQL Serverの関数にTIME_TO_SECとTIMEDIFFが無いようです。代わりにDATEDIFFがあるようなので、お試しください。
https://docs.microsoft.com/ja-jp/sql/t-sql/functions/datediff-transact-sql?view=sql-server-ver15SELECT (DATEDIFF(second,time,'[開始日時]’) DIV 300 + 1)*5 AS timespan, AVG(value), MAX(value), MIN(value) FROM data_table WHERE time>='[開始日時]’ AND time<‘[終了日時]’ AND ..[その他の条件].. GROUP BY timespan; こちらでは動作確認していませんが、MySQLでない場合いろいろ書き替えないといけないと思いますし、GROUP BY等の指定がこれでOKかはわかりません。エラーが出たらメッセージもお知らせいただければ参考になるかもしれません。 また、独自に解決できましたらご報告いただけると助かります。
MZPlatformユーザー会サイト管理者ご質問内容は理解できました。
確かにForでSQL文の実行を繰り返してご希望のテーブルデータを作成することもできますが、SQL文を工夫する方がMZ側の処理が簡単になります。下記にSQL文例のイメージを書きます。
SELECT (TIME_TO_SEC(TIMEDIFF(time,'[開始日時]’)) DIV 300 + 1)*5 AS timespan, AVG(value), MAX(value), MIN(value) FROM data_table WHERE time>='[開始日時]’ AND time<‘[終了日時]’ AND ..[その他の条件].. GROUP BY timespan;
ポイントは、GROUP BYで集約する対象を工夫して作成することです。ここでは、開始日時から終了日時までを5分単位で区切り、その範囲に含まれる値を集約することで一度にテーブルが取得できるようにしています。具体的には、日時の差分を秒単位に変換してから5分を示す300秒で整数の割り算をして、それに1を足してから5をかけると5分単位の経過時間になります。
なお、上記はMySQLを前提に書いていますが、お使いのDBMSによっては文法が異なることがありますので、その場合はお使いのDBMSに合わせた修正が必要です。(対応する関数が存在しない場合は方法を別に考える必要があります)
MZPlatformユーザー会サイト管理者ご質問内容と添付されたMZアプリだけでは、何を回答すればよいのかわかりません。
SQL文でどのようなテーブルを取得して、それをどのように簡略化したいのかご説明いただき、そのときForで何をしたくてその実現方法がわからないのかご説明ください。
なお、添付されたMZアプリを拝見すると、SQL文が不十分のように見受けられます。
こちらはデータを実際に取得して確認したでしょうか。MZPlatformユーザー会サイト管理者追加情報をお知らせします。
JDK11でMZの機能がすべて正常に動くとは限りませんが、JDBCドライバについては、MZ側の設定ファイルにパスを追加することで使えるようです。
MZプラットフォームのインストールフォルダ(3.6の32ビット版であれば標準は C:\MZPlatform\3.6)にあるjarsフォルダにJDBCドライバ(JARファイル)を配置して、同じくetcフォルダにあるPlatformClassPath.iniに
jars/(JARファイル名)
と一行追加して起動すれば使用できると思いますので、お試しください。MZPlatformユーザー会サイト管理者最新のバージョン3.6においても、折れ線グラフは横軸に項目軸を取るグラフですので、対象列が日時データであれば文字列に変換されてすべての日時が項目として表示され、ご報告いただいたようなグラフになります。これに対してグラフ側の設定だけでご希望の表示をすべて実現することはできません。
グラフ側で変更可能なものは、1と2で、設定するテーブルデータの行数を表示項目数に設定することができ、そうすればスクロールバーは表示されません。実行中の右クリックで表示されるメニュー(項目軸>表示項目数)から設定できますし、日本語化されていないメソッド(setItemAxisDisplayCount(int))を使えば設定可能です。
3と4と5は、現状SQL文でグラフ表示に必要なテーブルデータに整形する必要があります。日時のデータを指定の文字列で出力するように指定して、必要な間隔のデータとなるように集約(例えば平均化)します。
一方、指定間隔のデータに集約しても抜けがある場合への対応や、行数が多い時に項目名がつぶれてしまう問題は残るので、MZ側でグラフ表示用に値を埋めたり表示項目名を間引いたりするなどの工夫も必要となります。
以上のような工夫を駆使して作っているのが、配布版ツールキットに付属のデータ可視化用のサンプル(IoTDBViewer.mzax)ですので、参考にしていただければ幸いです。こちらはかなり複雑なので読むのが難しいと思いますが、ご不明な点を一つずつお問い合わせください。
MZPlatformユーザー会サイト管理者JDK9以降ではご指摘の通りextフォルダが無く、JDBCに限らずMZで利用している外部ライブラリをどのように組み込めばよいのか、こちらでは動作確認ができておりません。
逆に質問させていただきたいのですが、JDK11でMZが動作しているということでしょうか。そうであれば、同じ方法でJDBCドライバも組み込めないでしょうか。
情報提供していただけると助かります。
MZPlatformユーザー会サイト管理者データベース接続時の文字コード設定が原因の可能性があります。
以下の記事をご覧になり、設定を変更してお試し頂けないでしょうか。MZPlatformユーザー会サイト管理者失礼いたしました。
金型履歴管理システムのボタンには、標準アイコン以外に無効時のアイコンも別途設定されていました。無効時のアイコンにNULLを設定することで、有効/無効ともにメニューから設定したアイコンが表示されるようになります。
あいにく無効時のアイコン設定はメニューからは行えないため、一時的にアプリケーションに無効時のアイコンにNULLを設定する機能を追加し、それを実行することが必要になります。(実行後は、その機能を削除して構いません。)
参考のために、サンプルプログラムを用意しました。また、金型履歴管理システムにその機能を追加したアプリケーションも同梱しましたので、ご覧ください。起動画面下側の「無効時アイコンクリア」ボタンをクリックすると、無効時のアイコンにNULLが設定されますので、その後でお使いになるアイコンを設定して頂ければと存じます。
添付ファイル:
-
著者投稿