作成した返信
-
著者投稿
-
MZPlatformユーザー会サイト管理者
ご返信ありがとうございます。
やはり[カレンダー]では、例えば30時間20分といった表現は取得できないので、[任意精度整数(BigInteger)格納変数]と[文字列格納変数]を使用した例をご紹介します。[任意精度整数(BigInteger)格納変数]で割り算の商と余りが取得できます。
[文字列格納変数]内の雛形文字列を商と余りで置き換えることにします。先頭に「0」を付けるかどうかは「文字列の長さ」によって条件分けします。簡単な動作確認のためのサンプルファイルを作成しましたので、どうぞご覧ください。
ご不明な点がございましたら、ご連絡いただければ幸いです。
どうぞよろしくお願い申し上げます。添付ファイル:
MZPlatformユーザー会サイト管理者追記です。
先ほど返信したいずれの方法でも、[テーブル]列の値を取出し、変換して文字列型または日付型に変更しなければなりません。
その際[テーブル格納変数]の列に違う型のデータを設定しようとするとエラーになります。
先に列データ(リスト型)を取得し、該当の列の列型を変更し、再度先ほどご紹介した処理を通ったデータのリストを設定します。もしよろしければ、先ほどご紹介した方法のうち、どれが一番目的に沿ったものかご返信頂ければ、考えられる具体的な処理をご紹介できます。先ほど書きましたメソッド以外にも適当なものがあるかもしれません。よろしくお願い申し上げます。
MZPlatformユーザー会サイト管理者お問い合わせありがとうございます。
恐らくSQLServerでSQL実行時にフォーマットを指定するよりも、MZ側で処理を設定した方が簡単かと存じますので、MZプラットフォーム上での処理をご紹介します。
以下の2つの方法が考えられます。
1)時間が23時間59分を超えない場合
[カレンダー]を使用します。
➀[カレンダー]コンポーネントにメソッド「カレンダーを書式指定で設定(String、String)」で値を設定します。引数0には固定値で「m」を、引数1に「分数」を設定します。
➁メソッド「書式指定によるカレンダー文字列表現の取得(String)」で引数に「H:m」、「HH時間mm分」などの書式を設定します。
➂[テーブル]の文字列型列に、取得方法:メソッド処理結果で、➁で取得された文字列を設定します。
または、[テーブル]の列型を日付型に設定後、[表示属性(日付)]>[表示形式]>[その他…]で表示パターンを上記「H:m」にすることも考えられます。この場合➁は不要で➀のすぐ後に[カレンダー]からDate値を取得しセルに設定します。[カレンダー]は1970年1月1日が基準となっており、0月0日などには設定できませんので、24時間以上の場合は目的とした表現が取得できません。
2)24時間以上の場合
割り算をします。
➀[除算(÷)]や[剰余(%)]コンポーネントに入れ、演算結果を取得します。
また、整数のみ扱うことが確実なら[整数(BigInteger)格納変数]でも計算ができます。
例えば30時間40分といった表現なら、変数に値を設定し、メソッド「divide(BigInteger)」、「mod(BigInteger)」(引数はそれぞれ「60」)を実行して、メソッド処理結果を取得します。
➁[文字列格納変数]に文字列を設定し、メソッド「指定した文字列と連結して置き換える(Stirng)」で順次文字列を繋げていくか、「指定文字列と一致する最初の文字列と置き換える(String,String)」で雛形文字列を置換えるなどで書式を整えます。以上ご検討いただき、ご不明な点等ございましたら、どうぞ再度ご連絡ください。
よろしくお願い申し上げます。- この返信は、 MZPlatformユーザー会 により、 1 年, 2 ヶ月 前 に編集されました。
MZPlatformユーザー会サイト管理者お問い合わせありがとうございます。
お手数ですが、ライセンス申請ファイルとライセンスファイル(\4.0\etc\PFLicenseKey.mzk、PFLicenseKey.mzl)のアクセス権をご確認いただけないでしょうか。(usersが読み取りと実行、読み取り権限があれば大丈夫かと思います)また、アクセス権に問題がなければ、大変お手数ですが、一旦アンインストールして再度インストールをお試しいただけないでしょうか。
以上お試しいただいても改善されない場合は、ご連絡いただければ幸いです。
その際、OSのバージョンも一緒にお知らせください。
ご面倒をお掛けいたしますが、どうぞよろしくお願い申し上げます。MZPlatformユーザー会サイト管理者お問い合わせありがとうございます。
ver.3.6で[データベースアクセス]をお使いの際に、JAVAフォルダー内へJDBCドライバーの設定をしていただきましたが、ver.4.0では別のJAVAフォルダー(jre8_mz4.0)を参照しています。ご面倒をお掛けいたしますが、
ver.3.6用のフォルダー内(例:C:\MZPlatform\Java\jre8_mz3.6_64\lib\ext)にあるJDBCドライバーをコピーして\Java\jre8_mz4.0\lib\ext内に入れてください。以上、お試しいただいても改善されない場合は、再度ご連絡いただければ幸いです。
よろしくお願い申し上げます。MZPlatformユーザー会サイト管理者お問い合わせありがとうございます。
日付型のデータの操作には[カレンダー]コンポーネントをお使いください。
[カレンダー]という名前ですが、日付に関わる内部処理の部品です。[カレンダー]のメソッド「カレンダーを現在時刻に設定()」で[カレンダー]に現在日時データを設定することができます。
日付の部分はメソッド「setDate(int)」で引数に「1」を設定します。SQL文で日付範囲を指定してデータベースから検索する場合は、「0時0分0秒」から「23時59分59秒」までが検索範囲になるように時刻部分にも着目しなければなりません。
[カレンダー]で「時刻を零時に設定する()」こともできますし、時間の加減計算なども可能です。また書式を指定して日付を表す文字列を取得することができます。以上、簡単ですが日付設定のサンプルを添付いたします。ご参考になれば幸いです。
ご不明な点がございましたら、どうぞ再度ご連絡ください。
よろしくお願い申し上げます。添付ファイル:
MZPlatformユーザー会サイト管理者お問い合わせありがとうございます。
添付のアプリケーションを拝見いたしました。
該当箇所では直前に[テーブル]の「指定セルの値を取得」していますので、その次の[コンボボックス]の処理ではメソッド「指定項目を選択する(Object)」、引数に「取得方法:メソッド処理結果、メソッド/値:指定セルの値を取得する」を設定します。
[コンボボックス]のに該当のラベル名の要素があれば、それが選択されます。以上お試しいただいても改善されない場合は、どうぞ再度ご連絡ください。
どうぞよろしくお願い申し上げます。MZPlatformユーザー会サイト管理者ご連絡ありがとうございます。
お知らせいただいた内容から、列の追加はMZ上の処理で追加するのが簡単かと存じます。
また、[テーブル]の場合、右クリック>[テーブル]>[行ヘッター]>[表示有無]から番号表示ができますので、帳票表示時に列を追加する方法をご紹介します。
[帳票]の[テーブル要素]のデータ取得先を[テーブル格納変数]とし、変数に列やセルデータの設定をします。[繰り返し制御(FOR)]を使い、テーブルの行数分、値設定の処理を行います。ご参考までに簡単なサンプルファイルを作成しましたので、ご覧ください。
ご検討いただき、ご不明な点、ご要望等ございましたら、再度ご連絡いただければ幸いです。
どうぞよろしくお願い申し上げます。添付ファイル:
MZPlatformユーザー会サイト管理者ご連絡ありがとうございます。
DBテーブルに「workingTime」に当たる列を設けていないのであれば、検索SQLで設定する方が簡単かと存じます。例えばMySQLですと、
「select timestampdiff(minute, dateStart, dateEnd) as 列の名前 from task」で稼働時間が取得できます。列の名前を付けるのは、設定しないと列名が長くなってしまうためで、必須ではありません。minuteの部分をhour, day等に変えることで、他の単位での差分も取得できます。MySQLServerの場合はDATEDIFF関数があり、「select datediff(minute, dateStart, dateEnd) as 列の名前 from task」となるかと存じます。手元で検証しておらず申し訳ありませんが、宜しければお試しください。
なお、MZ内でも[カレンダー]コンポーネント等を使って、時間の差分計算が可能ですので、ご要望があればどうぞお知らせください。
どうぞよろしくお願い申し上げます。MZPlatformユーザー会サイト管理者ご連絡ありがとうございます。
taskテーブルの「めっき」「検査」といった工程名(=process列)が、「Process1」、「process2」という工程IDになっていて、別に工程名テーブルがあるとしたら、検索SQL文実行時に取得してしまうのが一番簡単かと思います。
例えば、工程名テーブルの名前が「kotei」、列名は「koteiID,koteiname」だとします。
以前のサンプルでは「select id, process, workingTime, dateEnd, dateStart, isCompleted from task where projectLabel=’A01′ 」というSQLを実行していますが、
これを
「 select id, koteiname, workingTime・・・・from task inner join kotei on process=koteiID where projectLabel=’A01′;」
といったSQL文にすることが考えられます。MySQLでは上記実行されましたが、データベースによって書式が違う可能性もあります。
また、一旦工程名テーブルとtaskテーブルを別々にSQLで取得し、MZ内の処理で[テーブル]のデータを変更することも可能です。
ご検討いただき、ご不明な点、ご要望等ございましたら、再度ご連絡いただければ幸いです。
どうぞよろしくお願い申し上げます。 -
著者投稿