Q133:MySQL DBからデータを取得するとき、該当IDのデータが存在しない場合、テーブルへ読み込む際、nullとなっているためか、Array index out of range:0〔テーブル格納変数xxx〕のエラーとなってしまいます。
Q133-1:
MySQL DBからデータを取得するルーティンで、該当IDのデータが保存されていれば、テーブルに読み込めるのですが、該当IDのデータが存在しない場合(まだ保存されていない)テーブルへ読み込む際、nullとなっているためか、Array index out of range:0〔テーブル格納変数xxx〕のエラーとなってしまいます。
データが存在しないことが、何らかの方法で検出してエラーを回避する手を試していますが、うまくいきません。データ検索のコンポーネントで入手したデータの内容を判断することはできないでしょうか?
A133-1:
[データベースアクセス]コンポーネントを使ってSelectしてきた結果はテーブル型のデータとなります。該当するIDが無い場合にも、行の無い(列は存在します)テーブルデータが取得されているとお考え下さい。
Selectしてきた結果のテーブルデータを[テーブル格納変数]に設定することはできていらっしゃるかと思います。この[テーブル格納変数]のセルの値などを取得する時にエラーが発生するのではないでしょうか。
[テーブル格納変数]に「テーブルデータを設定」した後、[比較演算]コンポーネント等を使用し、イベント番号を用いて「[テーブル格納変数]のデータの行数が0より大きければ目的の処理を行う」としてみてください。
Q133-2:
先にMySQLからのデータ取得時のエラー検出で下記のアドバイスをご教授いただきましたが、データ書き込みの場合は何かセンスする方法はありますでしょうか?エクセルファイルを書き込むアプリケーションで、SQL文で書き込みを行っていますが、実際は何も書き込まれないでも(データに特殊文字があり、書き込みができない、など)エラー表示もなく終了してしまいます。
A133-2:
Select文以外のSQL文(Delete等)を実行すると、[データベースアクセス]コンポーネントからは「処理完了イベント」が発生することになっています。「処理完了イベント」から「イベント内包 処理結果データ」で「更新された行数(レコード数)」が取得できます。「1」や「0」等の数字が取得されます。
モニターしたいSQL文は「イベント番号を指定してSQL文を実行する(String,int)」で実行し、[データベースアクセス]コンポーネントの「処理完了イベント」の先に、例えば「更新された行数が0かどうか」演算する処理を繋ぎます。「イベント番号を指定して・・・」で引数として指定した番号を、この処理のイベント番号に設定します。
[データベースアクセス]-----●処理完了イベント----[等価演算(=)]など
<引数取得方法:イベント内包>
(イベント番号設定)
ただし、『データの書き込みができないがエラーは発生しない』という状況をうまく再現できず、充分に検証できておりません。
文字化けはするもののデータは追加されたり、SQL構文エラーが発生したりなどの状態です。
もし差支えなければ、どのようなSQL文を実行すると、お知らせ頂いたような状況になるか、お教え頂けないでしょうか。
また併せて、お使いのMySQLのバージョン(MySQL5.5.12など)もお知らせ下さい。
Q133-3:
MySQLのversionはMySQL server 5.1でSQL文はinsert into table (mfgorderno,issuedate,...) values ("DATA","DATA",...)でDATAにエクセルファイルから読み込んだデータを挿入しています。
また、いろいろと作業しているうちに,アプリケーションがロードできなくなってしまいました。メッセージは'XMLファイルからのアプリケーション情報ロードに失敗しました'とのエラーメッセージがでています。 仕方なく、拡張子 .mzasをロードしましたが、どのような理由が考えられるのか、また元に戻すのはどうすれば良いのかご教授いただければと思います。
FAQで同様なことの記述がありましたが、保存フォルダーは正しく、回復できませんでした。拡張子.mzasはロードできますので、一度ロードし、違う名前で保存して拡張子 .mzaxをロードしようとしましたが、結果は同じです。うまく.mzasを使い、.mzaxを回復できればと思います。このアプリケーションの前のVersionはロードできますが、かなりの変更をいれており、これから回復するのには躊躇しています。
A133-3:
「.mzas」ファイルを保存なさる際には、「上書き保存」だと「.mzas」形式のみ上書きされますので、「保存」を選び、ファイルタイプ「.mzax」形式が選択されているの今一度ご確認下さい。
もし差支えなければ、原因調査のため、ロードできない「.mzax」ファイルと¥MZPlatform¥2.7\logフォルダ内にあるログファイル(「PlatformWed.log」等、曜日に合わせた名前が付いています)をお送り頂けないでしょうか。
アプリケーションファイルのサイズが非常に大きかったり、内容に差支えがある場合はログファイルだけでも結構です。
Q133-4:
Tue.log、Wed.log、該当アプリケーションを添付いたします。
よろしくお願いいたします。
A133-4:
ログファイル、アプリケーションファイルをお送り頂き、有難うございました。
大変ご面倒をお掛けしまして申し訳ございません。
XML形式のアプリケーションファイルがロードできなくなった原因は、[テーブル(ID:52 Excel入出力テーブル)]上に残っているデータが上手くXML変換されなかったためと推測されます。
「.mzas」形式のファイルがロードできるようでしたら、終了時に[テーブル]の「全行列を削除する()」または「全行を削除する()」を行ってから、保存をしてみてください。
どのデータがエラーの原因になるかについては、まだはっきり指摘できないのですが、長さのあるコメント用の文字列を入れている箇所が該当すると考えられます。
また、MySQLへのデータの追加の際にも、追加できないデータがあるとのことでしたが、上記理由による可能性があります。
回避すべき文字列などの情報が分りましたら、追ってご連絡致します。
まずは[テーブル]のデータをクリアして保存をお試し下さい。
改善されないようでしたら、再度ご連絡頂ければ幸いです。
ご連絡:
昨日、個人用のメールおよび宅ファイル便でLogとアプリケーションを送らせていただきましたが、本日.mzasで作業して、その後保存したところ、.mzaxがロードできるようになりました。以前の.mzaxはロードできていません。理由は全く不明ですが、一応問題は解決した模様です。お手数をおかけいたしました。サポートありがとうございます。
今メールをお送りしてから、この個人用メールでメールを読ませていただきました。
確かにご指摘のようにエクセルファイルに長い、スペースもある文字があり、今回ファイルを整理しました。このことが、保存に問題を起こしていたのだろうと推測しております。いろいろお手数をおかけし申し訳ありませんでしたが、一応解決したようですので一安心しております。