フォーラムへの返信
-
投稿者投稿
-
MZPlatformユーザー会キーマスター
お問い合わせありがとうございます。
[EXCELファイルアクセス]コンポーネントを使ってEXCELファイルを読み込んでいるという前提で回答いたします。
[EXCELファイルアクセス]のメソッド「ファイルからブックを読み込んで選択する(Stirng)」でファイル名を指定して、ファイルを読み込んでいます。このメソッドの引数に絶対パスあるいはビルダーの起動ファイルからの相対パスで、ファイル名を指定することができます。EXCELファイルアクセス.mzaxのサンプルファイルで言うと、例えば[ファンクション(ID:26 EXCELインポート処理(セル用))]の処理要求イベントの2番目の接続処理です。
上記メソッドの引数に直接ファイル名を指定しても動作するはずです。ただし、この処理の前に[ファイル(ID:91 EXCELインポート処理(セル用)]コンポーネントにファイル名を設定しており、これはファイル保存時の拡張子の設定に使われています。
もし例えばサンプルファイルを読み込み時ダイアログ表示無しに改修するとしたら、
1)[ファイル選択ダイアログ]のデータ選択イベントに繋がる2つの処理を[ボタン]のアクションイベントに繋ぎ変えます。
2)1番目の接続処理の[ファイル]コンポーネント「ファイル名を設定する(String)」の引数にファイル名を指定します。
3)2番目の接続処理の[ファンクション]「ファンクションの呼び出し(1引数)」でもファイル名を引数に設定しています。2)でファイル名を設定済みの[ファイル]コンポーネントから「ファイルの絶対パスでのファイル名を取得する」で取得します。あるいは再度ファイル名を直接指定してもよいです。以上、ご不明な点がございましたら、再度ご連絡いただければ幸いです。
なお、MZ Platform4.0から[データベースアクセス]を使ってJDBC接続でエクセルファイルが読み込めるようになりました。
https://ssl.monozukuri.org/mzplatform/docs_web/mztutorialexceldispatch.html
もしご興味があればご検討ください。
どうぞよろしくお願い申し上げます。MZPlatformユーザー会キーマスターmariaDBへの接続にはお使いになるDBのバージョンに合ったJDBCドライバ(例:mariadb-java-client-3.3.2.jar)をご用意いただき、ドライバ名(org.mariadb.jdbc)とサーバ名(例: jdbc:mariadb://localhost:3306/DBName)を変更すれば、接続が可能です。
サンプルファイルAP_DATA\Sample\データベースアクセス_4(DB切替版).mzaxを使うと、接続確認が簡単にできるかと思います。ただし、各DBによりデータ型の定義やフォーマットに細かい違いがあり、使用できるSQL文の書式や関数名なども違う場合があります。MZPlatformの[データベースアクセス]で実行しているSQLについて、そのまま移行可能か1つずつ検討する必要があります。
テーブル設計依頼時に、ある程度相談可能かと存じます。以上、ご不明な点、ご要望等ございましたら、ご連絡いただければ幸いです。
どうぞよろしくお願い申し上げます。MZPlatformユーザー会キーマスターご連絡ありがとうございます。
既に作成したデータベースやテーブルの文字コードは、後から文字セットを変更しても変わりません。例えば作成時にcp932で作成していたら文字コードはCp932のままです。テーブルの定義も必要に応じて変更する必要があります。
また、MZから文字コードutf8mb4のテーブルに接続する際にはcharacterEncoding=MS932の指定は不要です。以下データベースのダンプができているという前提で、ご提案いたします。
1)文字コードの整合性の問題が大きいと推測しています。MySQL8.0はデフォルト文字コードがutf8mb4なので、可能であればMySQL8.0をhttps://dev.mysql.com/downloads/windows/installer/8.0.htmlからダウンロードしてインストールします。最新バージョンはMySQL8.0.35です。同一機にインストールする場合は、ポート番号をデフォルトの「3306」から例えば「3307」等に変更しなければ、インストールに失敗することがあります。2)dumpしたバックアップファイルを開くと、テーブルの数の分「CREATE TABLE」の記述がある箇所があるかと思います。最後に文字コードを指定している部分があるので、ここを「DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;」に書き換えます。
3)MySQL8.0に変更したバックアップファイルをインポートします。システムデータベースは移行せず、必要なデータベースだけインストールするのが良いようです。
4)MZで接続できるか検証します。変更したポート番号を指定し、接続文字コードは指定しません。サーバ名の部分は例えば「jdbc:mysql://localhost:3307/」となります。
ポート番号はインストーラーのconfigrationまたはmy.iniの記述により、後から変更することが可能です。5)MySQL8.0のインストールが難しい場合は、MySQL5.7のC:\ProgramData\MySQL\MySQL Server 5.7」内にある「my.ini」に記述を追加するのが簡単かと思います。
1.[client]と[mysql]には「default-character-set=utf8mb4」
[mysqlld]には「character-set-server=utf8mb4」の記述を追加します。
2.設定を有効にするにはmysqlサーバーを再起動する必要があります。
my.iniファイルを保存するとき、ファイル権限の変更が必要になる場合があります。6)検証しているデータベースでALTER TABLE テーブル名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ciを実行します。
7)MZで接続できるか検証します。接続文字コードは指定しません。
以上、どうぞご検討ください。
ご不明な点、ご質問等ございましたら、再度ご連絡いただければ幸いです。
どうぞよろしくお願い申し上げます。MZPlatformユーザー会キーマスターご連絡ありがとうございます。
実は手元のPCのIMEでは環境依存の丸数字が2種類あり(添付の画像をご参照ください)shift-jisコードを持つNEC特殊文字はエラーは発生しませんが、utf-8のコードのみの丸数字はInsert時にエラーが発生します。
今後多くの環境依存文字に対応する必要性が考えられる場合は、前回書きましたように可能であればデータベーステーブルの文字コードを「utf8mb4」に変更することもご検討ください。
なお、MySQLではutf8はuft8mb3を指すため、utf8mb4を明示的に指定する必要があります。MySQL8.0ではデフォルトの文字セットはutf8mb4になっています。MZ3.6を使い手元で検証した結果は以下の通りです。
1)接続時にcharacterencoding=ms932を設定する
[1]shift-jisコードを持つ丸数字は、Insert時もselect時もエラーは発生しない
[2]shift-jisコードを持たない丸数字は、エラーは発生しないが、selecして見ると「?」に変わっている。2)接続時にcharacterencoding=ms932を設定し、さらに接続後、set names cp932を実行する
1)と結果は変わらない3)characterencoding=ms932を設定しない
[1]shift-jisコードを持つ丸数字は、Insert時もselect時もエラーは発生しない
[2]shift-jisコードを持たない丸数字は、エラーが発生し追加できない4)characterencoding=ms932を設定せず、set names cp932を接続後に実行する
どちらの文字もエラーが発生し、追加できない
という結果でした。文字コードの他にも、「set names cp932」が実行されている(あるいは「my.ini」の[mysqld]の項に「init-connect=’SET NAMES cp932’」がある)なども関係しているかもしれません。
テーブルの文字コードは「show create table テーブル名;」で確認できます。
以上、入力される文字のコードと接続時の文字コード設定をご確認いただいても改善されない場合は、お手数ですが再度ご連絡いただければ幸いです。「\X87@」がshit-jisコードの丸数字1を指しているのも気になります。
どうぞよろしくお願い申し上げます。添付ファイル:
MZPlatformユーザー会キーマスターお問い合わせありがとうございます。
(1)JDBCドライバーの更新をお試しください。
コマンドラインでは環境依存文字も入力可能ということですので、まず考えられるのがJDBCドライバが適合していないということです。手元にMySQL5.7.34をインストールして試してみたところ、古いJDBCドライバでは環境依存文字をデータ追加する際エラーが発生しました。
MySQL8.0用の最新のドライバは現在「mysql-connector-j-8.0.33.jar」ですが、MySQL5.7.34にも適合しています。JDBCドライバを変更すると環境依存文字を追加できるようになりました。ドライバファイルはMZPlatform\Java\jre8_mz3.6_64\lib\ext内に設定していただいています。(2)データベースに設定されている文字コードをご確認ください。
ドライバファイルを更新しても改善されない場合は、データベースに設定されている文字コードをご確認ください。
コマンドラインから「show variables like “chara%”;」を入力して実行すると、文字コードの一覧が取得できます。MySQL5.7はデフォルトでは文字コードが「latin1」になっている箇所があります。
変更する必要があれば「C:\ProgramData\MySQL\MySQL Server 5.7」内にある「my.ini」に記述を追加します。
1.[client]と[mysql]には「default-character-set=utf8mb4」
[mysqlld]には「character-set-server=utf8mb4」の記述を追加します。
2.設定を有効にするにはmysqlサーバーを再起動する必要があります。(3)後からテーブルや列、データベースの文字コードを変更することもできます。
ALTER TABLE テーブル名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
ALTER DATABASE データベース名 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
などを実行します。
ただし、実行前には必ずmysqldump等でバックアップを取り、変更しても問題が起きないか検証してから行う必要があります。まずは、JDBCドライバファイルの更新をお試しいただき、改善されない場合はお手数ですが再度ご連絡いただければ幸いです。
どうぞよろしくお願い申し上げます。MZPlatformユーザー会キーマスターいつもお世話になっております。
不具合を改修したパッチファイルを作成しましたので、設定をお願いいたします。
以前添付した「pfppr.jar」と同名になっていますので、MZPlatform\4.0\jarsフォルダに入れ、旧ファイルの上書きをお願いいたします。
その他の設定はございません。以上、ご不明な点がございましたら、どうぞご連絡ください。
よろしくお願い申し上げます。添付ファイル:
MZPlatformユーザー会キーマスターご連絡ありがとうございます。
データを設定していない空の[テーブル格納変数]を帳票の[テーブル格納変数]のデータ取得元とし、帳票編集画面を表示すると、描画に時間が掛かり画面表示が白くなってしまう現象をこちらでも確認いたしました。
これは修正パッチとは関係なく起っている現象かと存じます。
ご報告いただき大変助かります。誠にありがとうございます。手元で確認した限りでは[テーブル格納変数]に一旦データを設定すれば、その後変数に「空のテーブルを設定」されても帳票編集画面の描画に時間が掛かることはありません。
変数のデータはビルダー終了後は保持されません。
大変お手数ですが、アプリケーションビルダー起動後[テーブル格納変数]にまだ一度もデータが設定されていない状態での帳票編集画面表示を避けるように、処理設定をお願いいたします。この現象が発生しないように修正を検討いたしますが、少々お時間をいただければ幸いです。
修正ファイルができましたら、ご返信申し上げます。ご面倒をお掛けいたしますが、どうぞよろしくお願い申し上げます。
MZPlatformユーザー会キーマスターお問い合わせありがとうございます。
返信が遅くなり申し訳ございません。[帳票]コンポーネントについてご指摘のように、現在のところ行高さが不定の場合に「繰り返し印刷」の表示行数を固定で決めると、表示しきれない行が出てくる可能性があります。
テーブル高さが表示領域よりはみ出してしまった場合、指定表示行数に関わらず最適な行で区切るように修正いたしましたので、ご確認ください。お手数ですが、以下の手順をお試しください。
——————————-
1)添付の「pfppr.jar」をMZPlatform\4.0\jarsフォルダに入れます。
2)MZPlatform\4.0\etcフォルダ内の『PlatformClassPath.ini』をメモ帳などで開き、先頭にパスを記述し、保存します。
例えば以下のような内容になります。
——————————
# MZ Platform ClassPath
jars/pfppr.jar
jars/mzextension.jar
jars/mzplatform.jar
・・・・
——————————
3)アプリケーションビルダーを再び立ち上げてください。以上設定していただいても改善されない場合は、どうぞ再度ご連絡ください。
いつも貴重なご意見をありがとうございます。
どうぞよろしくお願い申し上げます。添付ファイル:
MZPlatformユーザー会キーマスターお問い合わせありがとうございます。
日付型列を含む[テーブル]をそのまま[CSV出力]コンポーネントでCSVファイルとして出力すると、ご指摘の通り空欄にはNULL値が、また値が入っているセルは時間部分まで出力されます。これを防ぐためには一旦列型を文字列型に変換し、日付の値は[カレンダー]コンポーネントで書式を整える必要がありますが、これを簡単に行う複合コンポーネントがありますのでお試しください。
1)アプリケーションビルダー編集画面上で右クリック>[複合コンポーネント追加]>[テーブル]>[テーブル日付データ文字列変換.mzcx]を選択して追加します。2)[CSV出力]の出力のメソッド(例「指定のファイル名でCSVデータを書込む(String, PF
ObjectTable)」の前に[テーブル日付データ文字列変換]の接続処理を追加します。
メソッド「テーブルの日付データを書式指定文字列へ変換(Object, Object)」を設定します。
引数0はテーブルのデータ、引数1は日付書式(例:yyyy/MM/dd)です。
yが年、Mが月、dが日を表します。3)[CSV出力]の引数1に上記2)でのメソッド処理結果を指定します。
文字列型に変換済みのテーブルデータをCSV出力することになります。処理の設定は例えば以下のようになります。
——●——[テーブル日付データ文字列変換]
| テーブルの日付データを書式指定文字列へ変換
| 引数0:メソッド戻り値 テーブル テーブルデータを取得する
| 引数1:固定値 yyyy/MM/dd
|
|——[CSV出力]
指定のファイル名でCSVデータを書込む
引数0:固定値 あるいは ファイル選択ダイアログ等で指定
引数1:メソッド処理結果 テーブルの日付データを書式指定文字列へ変換以上お試しいただき、ご不明な点、ご要望等ございましたら、再度ご連絡ください。
よろしくお願い申し上げます。
- この返信は1年、 3ヶ月前にMZPlatformユーザー会が編集しました。
MZPlatformユーザー会キーマスターご連絡ありがとうございます。
以下の設定をお試しください。
MZ Platform 4.0_32\etcフォルダ内の文書「Platform.ini」の下から三番目の項にJavaInvoke=Java/jre8_mz4.0_32となっているところがあります。
これをJavaInvoke=Java/jre8_mz3.6に変更してみてください。
MZ4.0_32で使用するJavaのバージョンが3.6で使用していたものになります。以上お試しいただき改善されない場合は再度ご連絡いただければ幸いです。
お手数をお掛けいたしますが、どうぞよろしくお願い申し上げます。 -
投稿者投稿