Q11:「2.6. 複数行一括追加機能の追加」のところで複数行が追加されないという状況です。
Q11-1:
先日アドバイスいただいたように、購買管理アプリケーションをやってみています。すると、「2.6. 複数行一括追加機能の追加」のところで複数行が追加されないという状況です。書いてあるように設定しているはずなのですがどうしてもこの先に進めません。原因が良くわからないのですが、どうしたらよいでしょうか?
A11-1:
作成中のアプリケーションが意図通りに動作しない場合、その原因となる箇所を特定することが重要となります。その方法としましては、
(1) デバッガを使用する
(2) メッセージダイアログを利用して途中経過を確認する
といったことが考えられます。デバッガの使用につきましては付属の「デバッガ操作説明書」をご覧頂くとして、ここではメッセージダイアログを利用する方法について、本文末尾、関連ファイルのサンプル「エラー発生.mzax」、「エラー発生箇所確認.mzax」を用いてご説明いたします。
「エラー発生.mzax」は、ボタンをクリックしたとき、左側の縦に並んだ3つのテキストフィールドの文字列を1つにつなげて右側のテキストフィールドへ表示することを意図して作られたアプリケーションです。ですが、実際に実行するとエラーが発生します。
エラー箇所を特定するためにメッセージダイアログを追加したのが、「エラー発生箇所確認.mzax」です。このアプリケーションでは、ボタンをクリックした後のどこでエラーが発生しているのか、あるいは、どこまでは正常に動作しているのかを確認するために、起動メソッドの合間でメッセージを表示させるようにしています。「エラー発生箇所確認.mzax」を実行してボタンをクリックすると、順に「ボタンクリック」、「1」、「2」のメッセージが表示された後でエラーとなり、「2」のメッセージが表示されたあとでエラーが発生していることが分かります。
メッセージダイアログをこのように利用することで、エラー発生箇所を特定することができます。
[複数行追加]ボタンクリック後の接続先メソッドが正しく呼び出されているかどうか、それをご確認下さい。
メソッドが呼び出されていてエラーが発生する場合、そのメソッドの引数に誤りのあることが考えられます。また、そもそもメソッドが呼び出されていない場合、その原因として接続するイベントが誤っている可能性があります。ボタンからはアクションイベントの他、マウスボタンイベント、マウスモーションイベントも発生します。起動メソッドがアクションイベントに接続されているかどうか、ご確認下さい。
関連ファイル:エラー発生.mzax、エラー発生箇所確認.mzax (※このファイルは、ZIP形式に圧縮してあります。)
Q11-2:
最初から作り直してみたのですが、またエラーが発生しました。
「データベースのアクセスにエラーが発生しました。{データベースアクセス「ID:2-4」(KEY.”ローカルMySQLアクセス”)}(Exception:Duplicate entry ’1’for key1)
と出ています。これはどうしたらよいでしょうか?
A11-2:
この(Exception:Duplicate entry ’1’ for key1)というエラーは「データベースのテーブルに既に存在しているデータと同じものを入れようとした」時に発生します。
もちろん、同じデータを何回入れてもよい場合の方が多いのですが『購買管理作成チュートリアル』でデータベースの「machine」テーブルを作成する時「主キー」のところにチェックマークを入れて頂きました。
この「主キー」列(idの列)は同じデータの重複を許さず、また自動的に何も入れなくても番号が順番に付与される設定となっています。
データを追加する時に、お知らせ頂いたエラーが出た場合には、「id番号列には何も入れずに」お試し下さい。
お問い合わせのエラーは、重複したデータが認められていない列(フィールド)に対して重複したデータを追加しようとしたときに発生するMySQLのエラーです。
具体的には、主キーとして設定されている「id」に対して、すでにデータベースに存在する他のデータ(レコード)で使用されている数字「1」を指定して追加しようとしたのが原因ではないかと思われます。
Q11-3:
やはり同じエラーが出ます。idのところに何も入れずに複数行追加ボタンを押しても駄目でした。どのように見ていけば改善されるでしょうか?
A11-3:
チュートリアルの「2.6. 複数行一括追加機能の追加」の最後までお進め頂いていることと思います。
実行画面上、一番左上の[テキストフィールド]にチュートリアル通り「select * from machine」と入れ、右側「SQL文実行」のボタンを押すと、すぐ下側の[テーブル]にはどのような表が表示されるでしょうか。
(例:3列あるが行は無い
6行あり、id列には「1〜6」の数字が入っている など)
Q11-4:
何も出てきません。今作成しているところの「購買管理」を添付いたします。何が原因でしょうか?
A11-4:
お送り頂いたファイルを使って、手元のMySQL5.0に接続してみましたが、問題なく動作しました。また、内容を拝見しても特にテキストと違うところはないように思われます。
> 何も出てきません。
とのことですが、お送り頂いたファイルの起動時の状態の通り上部のテーブルに「entryDay」「name」「id」の表示が出ているのでしたら、『データベースの中に「machine」テーブルが作られているが、まだデータが入っていない』状態です。
@「実行設定可」ボタンで実行し、データベースに接続します。
A上部のテーブルの上で右クリック>[テーブル]>[行]>[追加]>[複数行]と選び、追加行数の入力の窓に「3」と入れ、適用ボタンを押します。行が3行追加されます。
B「entryDay」の列に日付データ(2009/3/23 12:00:00など書式にお気をつけ下さい)、「name」の列に名前のデータを入れ、「複数行追加」ボタンの左隣に「machine」と入力してあるのを確認して、ボタンを押します。
上記@〜Bをお試し頂いても、なおエラーが出るようでしたら、どうぞ再度ご連絡下さい。よろしくお願い申し上げます。
Q11-5:
やっと表示されたので報告いたします。6行あり、id列には「1〜6」の数字が入っているこのパターンになりました。あと、任意に入力するのは中央のテーブルではなく、上のテーブルの方なのでしょうか?中央のテーブルは何も入力しないでいいのでしょうか?ここに来て、どちらが正しいのか判らないでいます。エラーが出ないようにするためにする方法を教えてください。
A11-5:
購買管理作成チュートリアル「2.4. 動作確認」では、中央のテーブルを使って操作をして頂いています。
ここでは何を行っているかというと、「test」という名前のデータベースの中に「machine」というテーブルを作成しています。
データベースの中にデータを入れる際には、
データベースソフト(MySQL)>データベース>テーブル>データという風に作成し、データを最後に入れます。
ここでの作業は、列名や列型を決めて(枠だけ)テーブルを用意したと考えて下さい。
一旦MySQL内に必要なだけテーブルを作ってしまうと、後は中央のテーブルは操作の必要はありません。
複数行追加の操作は、ちょっと判りにくいですが、「select * from machine」(SQL文実行)で今MySQL「machine」テーブルにどんなデータが入っているか上部のテーブルに表示し、「複数行追加」ボタンで同じ上部のテーブルのデータをMySQL「machine」テーブルに追加しています。
ですから、「複数行追加」前に「id」列のデータを全部消してからボタンを押すとエラーは起きず、「SQL文実行」で確認するとデータ行は倍々に増えていきます。
もちろんデータ確認表示用のテーブルと、追加データ用のテーブルと2つに分けても問題はありません。
Q11-6:
回答いただきましたが、これだとidが1〜6まであっても問題は無いということでしょうか?また、これを良しとして先に進んでみたのですが、「2.7.バックアップ機能の追加」の「操作: 出力先ファイルの内容を確認しましょう」でエクスプローラを起動した際backupのファイルをダブルクリックしても「Fatal exception occurred. Program will exit.」と出ました。これはやはりきちんとできていなかったということでしょうか?
A11-6:
「machine」テーブルに入れるデータは、任意のもので結構なので、何行データが入っていても構いません。
バックアップのファイルができているとしましたら、ダブルクリックでなく、ファイルの上で右クリック>[プログラムから開く]>[プログラムの選択]>[一覧からプログラムを選択する]で「Notepad」あるいは「Wordpad」を選んで頂くと、開くことはできないでしょうか。
上記お試し頂いても開くことができない場合は、どうぞ再度ご連絡下さい。
バックアップは無理にMZPlatform上から取る必要はないのですが、今回の購買管理アプリケーションではこの機能を利用して、先に進む箇所があります。
Q11-7:
今現在先に進んで「3. 発注依頼部の作成」です。ここで、kobai-enum.sqlを指定するよう書かれているのですが、そのファイルを見つけきれないでいます。どこにあるファイルでしょうか?教えていただけたらありがたいです。
A11-7:
「kobai.sql」、「kobai-enum.sql」ファイルはAP_DATA¥購買管理フォルダー内にあります。
『購買管理作成チュートリアル』のP60の記述にある通り、P15-16の設定を行ったかどうかで、使用するファイルは
設定なし:「kobai-enum.sql」
設定済み:「kobai.sql」
となりますので、どうぞ御確認ください。
Q11-8:
教えていただいた通りやると、できました。今、「3.7. 参照機能の作成と登録機能作成の準備」の「操作: テーブルに検索結果を設定しましょう。」のところまで来ています。
Dの参照ボタンを押したところ、
「データベースアクセス中にエラーが発生しました。[データベースアクセス[ID2-4](KEY:”ローカルMySQLアクセス”)](Exception.Unknown column 'shohin' in 'field list')
と出ました。
これはどういった意味でしょうか?接続ボタンも押してからやったのですが・・・教えてください。
A11-8:
お問い合わせの件は、検索しようとした列名(フィールド名)がテーブルに存在しないときに発生するMySQLのエラーです。ご連絡頂いたエラーメッセージの場合、「'shohin'という列名はありません」という意味になります。
その原因として、「操作: コンポーネントを追加し、接続しましょう。」のBで[ラベル]コンポーネントの[text]を設定する際、'shonin'を'shohin'と書き間違えた可能性が考えられます。textのご確認をお願いします。