フォーラムへの返信
-
投稿者投稿
-
MZPlatformユーザー会キーマスター
はじめに,大変申し訳ございませんが,「こういうことをしたいのだけど,アルゴリズム=計算手順を教えてください」という質問(一般的ではない処理の作成)にはお答えすることが難しいですので,次回よりお願い致します.例えば「このような計算手順を考えたが,どのコンポーネントまたはメソッドを使えばよいか」「このような処理を作成したがエラーが発生してしまう」と言った質問にはお答えします.少ない人数で対応しておりますので,ご協力をお願い致します.
ご質問の大体の処理はカレンダーコンポーネントを使用することにより実行可能です.
まず,年数の下二桁は,カレンダコンポーネントのメソッド「書式指定によるカレンダー文字列表現の取得」に書式「yy」を指定して実行しますと取得できます.
また,ある曜日の日番号はメソッド「getDayOfWeek」を用いることにより取得できます.
問題の週番号ですが,次のような計算になろうかと思います(間違いがあるかもしれません)
(週番号を知りたい日付+1/1の日番号-1日) – 同年1月1日)/7 +1
この計算手順に従って,カレンダーコンポーネントを用いて日数の計算を行います.上の計算手順での7での割り算は小数点以下切り捨てを想定しておりますが,「除算」コンポーネントでは四捨五入となってしまいますため,「整数(BigInteger)格納変数」に一旦日数を設定し,メソッド「divideThenReplace」を用いて割りますと切り捨てになります.
ご参考のため,当方で作成したアプリケーションを添付いたします.添付ファイル:
MZPlatformユーザー会キーマスター関連ファイルをダウンロードしてPC上に保存していただき、それからビルダーで開いていただきます。
ご使用のWebブラウザによって多少動作が異なるかもしれませんが、関連ファイルの名前のところをクリックしていただくか、右クリックでメニューを表示するとファイルを保存することができると思いますので、お試しください。
MZPlatformユーザー会キーマスターテーブルの行ヘッダの開始番号は属性RowHeaderStartDisplayNumberにより設定可能です.設定には,はじめに,アプリケーションビルダーのテーブルコンポーネント上でマウス右クリックし「属性情報設定…」を選択します.表示されたコンポーネント属性情報設定画面で,RowHeaderStartDisplayNumberの欄に1と設定してください.
MZPlatformユーザー会キーマスターコンボボックスからのイベント発生の件,イベント伝播制御コンポーネントを用いて,イベントの伝播を制御することにより対応可能です.お送りいただいたアプリケーションデータでは,コンボボックスのデータ選択イベントにファンクションコンポーネントが直接接続されておりますが,これら二つのコンポーネントの間に,イベント伝播制御コンポーネントを挿入します.コンボボックスのデータ選択イベントにイベント伝播制御の「受け取ったイベントを発生させる」を定義し,イベント伝播制御のデータ選択イベントに,ファンクションのメソッドを定義します.テキストフィールドのアクションイベント発生時に,イベント伝播制御の「イベント伝播無視モードを設定する」を引数にtrueを設定して実行することにより,コンボボックスからのイベントはイベント伝播制御から伝播しなくなります.処理実行後,同メソッドにfalseを設定して実行することにより,元に戻りイベントが伝播するようになります.詳細は添付のサンプルをご確認ください.
テキストフィールドコンポーネント上でマウスで左ボタンクリックした時には編集状態になり,マウスボタンイベントが発生しません.そのため,大変申し訳ございませんが,現状では左クリック押下のイベントは取得できません.添付ファイル:
MZPlatformユーザー会キーマスター試してみましたが、こちらではメモリ使用量が増えるという現象は確認できませんでした。
一方で、添付していただいた作成方法でご希望の処理が実現できないのは確かです。
タイマーでも難しいかもしれません。スレッドアロケータを用いたサンプルを添付しますので、この方法で実現できそうかお試しください。
添付ファイル:
MZPlatformユーザー会キーマスター拡張用のJARファイルとサンプルアプリをまとめたZIPファイルを添付します。
ZIPファイルを展開すると中にJARファイルがありますので、MZのインストールフォルダの下にあるjarsフォルダに配置してください。また、同じくetcフォルダにあるPlatformClassPath.iniをテキストエディタで開いて、先頭行にjars/file20170330.jarと記入して保存してください。それからビルダーを起動して、一緒に含まれているMZアプリを開いてください。上記の作業で誤りがあると、エラーが表示されると思います。
拡張パッチ適用後のビルダー画面でサンプルアプリを開くと、ファイル属性表示のサブルーチンの処理中に、ファイルコンポーネントのgetCreated()メソッドを起動しているところがあります。このメソッドが追加したものです。実際に取得できるかどうか、このMZアプリを実行して、ファイルを選択してみてください。なお、OSによっては作成日時が取得できない場合があるそうですが、その場合はOSとJavaの制限ですので、ご容赦ください。
添付ファイル:
MZPlatformユーザー会キーマスター解決したのであればよかったです。
ところで、やはり表現に問題があると思うのですが、今回の問題がJDBCと関係ないということはないでしょう。MZはJDBCでOracleに接続しますので、JDBCでの接続方法としてはご報告いただいた内容を設定する必要があったということになります。
もし可能であれば、MZのサンプルアプリでどのように設定したら接続できたか、どのように設定すると失敗したかのご報告をいただければ、他の方々が同様な問題に直面した時に参考になるので助かります。
MZPlatformユーザー会キーマスター補足ですが、この掲示板に記入したSQL文をコピーペーストして使用すると、シングルクオーテーションが全角文字になってしまって実行時にエラーとなるので、半角に修正してお使いください。
MZPlatformユーザー会キーマスターこれまでご質問いただいたようなことを検討したことがありませんでしたが、調べてみると簡単にできるようです。
ここでは、H2というデータベースを使う方法をご紹介します。
http://www.h2database.com/html/main.html上記の公式サイトからZIPファイルをダウンロードしていただき、展開したフォルダに含まれるJARファイルを、MZで利用しているJavaのフォルダ(3.5の標準インストールであれば、C:\MZPlatform\Java\jre8_mz3.5\lib\ext)にコピーしてください。準備はこれだけで完了です。
あとは、データベースアクセスコンポーネントでの接続設定と、SQL文を適切に書くことでCSVファイルを対象とした検索が自由に実行できます。その方法をMZのサンプルアプリを用いて説明します。ここでは「データベースアクセス_3(機能拡張版).mzax」を使います。
上記のアプリが起動したら、設定用のフレームでドライバのフィールドを「org.h2.Driver」、サーバのフィールドを「jdbc:h2:mem:」、ユーザ名とパスワードとデータベース名をすべて空にします。スキーマ使用や大小区別のチェックは外してください。
この状態で接続ボタンを押すと、接続できるはずです。もう一つのフレームにツリーが表示されると成功です。接続に失敗した場合は、JARファイルのコピー先か入力するパラメータの設定に失敗している可能性がありますので、ご確認ください。
最後に、SQL文として下記のようなクエリを作成して実行してみてください。
select * from csvread(‘(ファイルパス)’,null,’Shift-JIS’)
(ファイルパス)のところで検索したいCSVファイルのパス名を指定します。
‘Shift-JIS’はファイルのエンコードに応じて変えるようです。
書き方が合っていれば、CSVファイルの中身がテーブルとして表示されると思います。
これが実行できたら、後ろにwhere節を追加していろいろ試してみてください。こちらでも初めて使用したので、何か制限があるかもしれません。
もし何か問題がありましたらご報告ください。MZPlatformユーザー会キーマスター残念ながら、現在ファイルコンポーネントに作成日時取得のメソッドはありません。
MZの開発を開始した当初は、Java側でその機能の提供がなかったためです。調べたところ、Javaの現在のバージョンでは作成日時取得の機能が提供されているようなので、MZの次期バージョンから追加します。
もしすぐにでもこの機能が必要であれば、拡張パッチをここに添付できますので、ご希望であればお知らせください。
-
投稿者投稿