Q150-3:
MZPFにてDB連携の機能作成しているのですが、主キーを 複数個設定した際、更新処理にて添付のエラーが発生します。
すみませんが、解決策をご教授願います。
【作成している機能】
ローカルMySQL管理コンポーネントを利用したDB連携
【問題内容】
ローカルMySQL管理コンポーネントの「指定したテーブルに複数行を一括追加する」を実行した際、ローカルMySQL管理コンポーネント内部(イベント伝播制御コンポーネントの「受け取ったイベントを発生させる」メソッド実行時)で添付のエラーが発生する
【確認出来ていること】
・主キーが一つの場合は、正常にデータの登録が出来た
・主キーが2個以上の場合、該当のエラーが発生した
※最終的には主キーを3つ設定します
・エラーが発生してもデータはMySQL側のDBに登録出来ていた
【添付資料】
・エラー画面のハードコピー
・データベースの設定内容のハードコピー
・DBに登録する固定長のINPUTデータ(1レコード)
以上、お手数をお掛けしますが、よろしくお願い致します。
関連ファイル:添付資料.zip
A150-3:
MZ Platformのご利用ならびにお問合せ、ありがとうございます。
お問合せの件ですが、こちらではエラーが発生せず、まだ現象を再現できていない状態です。大変お手数ですが、以下の情報をお知らせいただけないでしょうか?
・OSのバージョン
・MySQLのバージョン
・JDBCドライバのバージョン
・MySQLデータベースの文字コード情報(MySQLコマンドラインより、
"show variables like '%char%'"を実行した結果)
・「指定したテーブルに複数行を一括追加する(String,PFObjectTable)」を実行
したときの引数データ
ところで、データベースのテーブル名や列名(フィールド名)に日本語を使っておいでですが、MySQLをUTF8以外の文字コードでお使いの場合、テーブル名や列名に日本語を用いると思わぬ動作不正を引き起こすことがありますので、英数字の使用をお勧めします。データに日本語が含まれることには問題ありません。
Q150-5:
本件、ご回答頂きまして、誠に有難うございます。
頂戴しましたプログラムではエラーは発生しませんでした。
そこで、列名を日本語から英語(アルファベット)に変更したところ、エラーが発生しませんでした。
以前、ご教授頂いた、「列名に日本語を使用すると思わぬ動作不正が起こる」に相当するエラーだったのかもしれません・・・
取り急ぎ、ご報告申し上げます。
先日お伺いさせて頂いた件につきまして、再度ご質問させて下さい。
【以前の問題内容】
ローカルMySQL管理コンポーネントの「指定したテーブルに複数行を一括追加する」を実行した際、ローカルMySQL管理コンポーネント内部(イベント伝播制御コンポーネントの「受け取ったイベントを発生させる」メソッド実行時)で添付のエラーが発生する
この際、DBのテーブル名や列名(フィールド名)を日本語 ⇒ アルファベット に変更しました所、問題を解決することが出来ました。
【今回の質問内容】
@「同じ環境で動作確認を行いましたが、こちらではエラーは発生しませんでした。」とのことですが、その際のDBのテーブル名や列名は日本語を使用していましたでしょうか?
A<@にて日本語を使用していた場合>
日本語を使用する為の環境情報を教えて頂けないでしょうか?
B<@にてアルファベットを使用していた場合>
MZPFにてテーブル名に日本語表記で項目表示し、DBの参照・更新などの処理を行いたいのですが、どのように実現させればよろしいでしょうか?
※単純にDB項目名をアルファベット、テーブルの項目名を日本語でアプリを実行すると、Insertの際に添付のようなエラーが発生します。
DB項目名とテーブルの項目名が同じ場合には正常に実行出来ます。
添付としまして、下記資料を付けております。
【添付】
・エラー内容.xls :エラー時の処理内容とエラー画面
・Inputデータ.txt:テーブルに読み込む1行1レコードの固定長ファイル
(Inputデータ ⇒ テーブル ⇒ DB)
お手数をお掛けいたしますが、よろしくお願い致します。
関連ファイル:エラー内容.xls、Inputデータ.txt
A150-5:
MZ Platformのご利用ならびにお問合せありがとうございます。
> @「同じ環境で動作確認を行いましたが、こちらではエラーは発生しませんでした。」とのことですが、その際のDBのテーブル名や列名は日本語を使用していましたでしょうか?
日本語名を使用していました。そちらからご提供いただいた情報に基づき、テーブル名は「EDI練習」とし、各列名、列型、NULL可否、デフォルト値もすべて同一といたしました。また、データベース名は、「test」と「テスト」の2通りを試しました。
> A<@にて日本語を使用していた場合>日本語を使用する為の環境情報を教えて頂けないでしょうか?
環境情報も、そちらからご連絡いただいたものと同一です。すなわち、以下の通りです。
OS: Windows XP Home (SP1とSP3で動作確認)
MySQL: 5.5.20
JDBCドライバ: 5.1.18
MySQL文字コード: cp932
ところで、前回のそちらからのメールでは、こちらからお送りしたアプリケーションは、そちらの環境において、テーブル名や列名が日本語のままでも動作したと書かれていたように思いますが、この認識に間違いはございませんでしょうか?
間違いがないとしたら、こちらのテスト環境、すなわちお送りしたアプリケーションが正常に動作した環境を再現しても、そちらの元々のアプリケーションが正常に動作することにはならないように思いますが、いかがでしょうか?
> B<@にてアルファベットを使用していた場合>MZPFにてテーブル名に日本語表記で項目表示し、DBの参照・更新などの処理を行いたいのですが、どのように実現させればよろしいでしょうか?
> ※単純にDB項目名をアルファベット、テーブルの項目名を日本語でアプリを実行すると、Insertの際に添付のようなエラーが発生します。
> DB項目名とテーブルの項目名が同じ場合には正常に実行出来ます。
「指定したテーブルに複数行を一括追加する(String,PFObjectTable)」メソッドは、テーブルの列名に基づいてデータの登録を行います。お知らせいただいたデータの場合、列名(処理日, ...)に対応する列がデータベースの列名(a, b,..., n)が存在しないことがエラーの根本的な原因となっています。具体的には、以下のような処理が行われてエラーが発生しています。
(1) 「処理日」という列名がテーブルにないので、そのデータ登録は無視。
(以下、他の列のデータも同様)
(2) すべての列データが未設定のまま、テーブルへ追加登録。
(3) データベースのテーブルで、列「a」のデフォルト値はNULLが指定されているので、「a」の値にNULLを設定。
(4) データベースのテーブルで、列「a」の値はNULLが許されていないので、エラー発生。
MZPFアプリケーション上では列名に日本語を用い、それに対応するMySQLデータベーステーブルの列名は英数字とする場合には、その日本語列名と英数字列名を対応付けておくことが必要です。
この処理の作成例は、付属の「購買管理アプリケーション作成チュートリアル」の「3.7. 参照機能の作成と登録機能作成の準備」および「3.8. 登録機能の作成」に記述されていますので、どうぞご覧ください。