Q180:エクセルデータをMZ上のテーブルへデータを取得し表示することはできましたが、実際そのデータをMYSQLの指定テーブルへデータ移行させる処理がわからず問い合わせをさせていただいております。
Q180-1:
エクセル連携導入チュートリアルを参考にしながらエクセルデータをMYSQLのテーブルへデータを取り込む処理を作成しております。エクセルデータをMZ上のテーブルへデータを取得し表示することはできましたが、実際そのデータをMYSQLの指定テーブルへデータ移行させる処理がわからず問い合わせをさせていただいております。現在は、準備段階としてエクセルで管理しているデータをMYSQLへ移行するように検討しています。その後も、受注データなどはエクセルによるものとなるため利用頻度は多くなると考えています。MZのデータと現在のフレーム情報を添付いたします。
関連ファイル:データ取り込み.xlsx、エクセルデータ⇒MYSQLへ取込.mzax
A-1801:
エクセルからのデータの取り込みはお送り頂いたファイルの内容で大丈夫かと思います。
まず、細かな設定方法の前に、大まかな方針を確認させて下さい。
1)エクセルファイルの内容をMZPlatform上のテーブルに表示した後、データの更新/追加のケースには
@毎回複数行のテーブルデータをMySQLに追加する
A表示したテーブルデータの一部のセルを変更し、その一部分のみを更新する
BMySQLに保存したデータを更新する場合もあれば、新規に一行追加する場合もある
等様々考えられます。
@の場合には新規にテーブルデータを追加する[データベースアクセス]のメソッド「InsertRowDirectry(String,PFObjectTable)」等を使える可能性があります。
A、Bのように一部の更新、追加の場合にはUpdate文、Insert文を[データベースアクセス]で実行して行います。
最初にMySQLに既存のエクセルのデータを入れる際には、お送り頂いたファイルを拡張してもできますし、MZPlatformから離れてしまいますが、MySQL自体で行うこともできます。
2)Update文やInsert文を作成する際の、考え方をご説明します。
Update文は例えば「UPDATE tableA SET shimei='産総太郎' WHERE ID=1」
となります。
「tableA」や「ID」,「shimei」は予め設定してあるテーブル名や列名で一定ですが、「1」や「産総太郎」の部分はデータによって都度変わります。
そのため、Update文の雛形を用意し、[文字列格納変数]に設定して、置き換え(「指定文字列と一致する最初の文字列を置換する(String,String)」)や連結(「指定した文字列と連結して置き換える(String)」)をして、目的の文を作り出します。
Select文しか使っていませんが『データベースアクセスチュートリアル』にご参考になる部分があるかと存じます。複合コンポーネントを使用しているのでやや複雑ですが、複合コンポーネントは無理に使用する必要はありません。
大変ご面倒かとは存じますが、大まかなデータの流れ、操作の流れをお教えください。目的や手順によって、適する処理の方法が大きく違う場合がございます。
今回は考え方しかご説明しておりませんが、ご返信を頂いて、適した処理の詳細についてご紹介できればと考えております。
Q180-4:
文字化けの件ですが、ご指導いただいた方法で解決することができました。ありがとうございます。
エクセルデータを下記要領でMYSQLへ転送する際に主キーをテーブルに設定していないためにエラーがでました。主キーを設定しない場合には別の方法で転送しなければいけないのかもしくは、主キーは絶対設定しなければならないのかを教えていただけないでしょうか?
(主キーを設定し転送した場合は成功しています。主キーを設定しない場合はエラーとなります)
また、エクセルでは、列に1から3000(文字列設定)連番で入力をしているファイルをMysqlのテーブルへ転送した際に、MYSQLの列の設定をINTで設定した場合はすべて表示されますが、文字列(VARCHAR)で設定した場合は、一部表示されない行が発生するのですが設定がおかしいのでしょうか?ちなみに、設定をINTにもどしたら表示されます。
A180-4:
1)「insertRowDirectry(Stirng,PFObjectTable)」等、テーブルデータをそのまま利用できる特別な更新方法の場合、MySQLのテーブルには主キー列が存在する必要があります。
※insertRowDirectlyByQuery(String,PFObjectTable)は、主キー列が存在しないテーブルにも利用可能です。
MZPlatform とは関係なく、主キーと手掛かりとして一意のデータを特定するのが、データベースの一般的な考え方です。
主キー列に設定してしまうと、重複するデータは許されずIDの番号を都度テーブル内で使われていない番号にしないといけませんが、もしID番号がエクセルと同じでなくても良いのであれば、
@id列は主キー Auto_increment(自動的数字の増加)に設定する
AMZPlatformから追加するテーブルデータにはid列を作らない
例)MySQL内のテーブルは「id,namae,jusho」の3列
MZPlatform上のテーブルデータは「namae,jusho」の2列を用意
とすると、id番号を気にすることなく、どんどん追加できます。
エクセル時の番号を残したいときでも、別に主キーとなる列を作り、
@table_id列は主キー Auto_increment(自動的数字の増加)に設定する
列名は何でも良い
AMySQL内のテーブルは「table_id,id,namae,jusho」の4列
MZPlatform上のテーブルデータは「id,namae,jusho」の3列
といった方法が考えられます。
何かご要望がございましたら、どうぞお知らせ下さい。
2)まずvarcharの文字数(varchar(10)など括弧の中の数字)不足が考えられますが、文字数設定が充分でない場合にはデータ追加時にエラーメッセージが発生します。100に設定していらっしゃいますので、この可能性は少ないです。
intですと整数ですが、varcharは文字列ですので、特に順番を指定しないでSelectした場合、数字は辞書順に並んでしまいます。
(例、1,11,2,210,22,3000、4)
このため、数字が飛んでいるように見えるということはないでしょうか?
数字以外に文字も混ざっていいる場合にはvarcharで結構ですが、数字のみ使われている場合にはintをお勧め致します。
これも何かご要望がございましたら、最適な方法を検討致しますので、よろしければ再度ご連絡下さい。