Q129:テーブルのあるカラムをDate型で定義しましたが、保存データの中にはそのカラムがブランクのものもあり、エラーとなってしまいます。カラムをDate型のままで、ブランクをそのまま扱う方法はありますでしょうか?
Q129-1:
現在作成したアプリケーションを変更していますが、MySQLにテーブルデータを保存するところで問題があり、アドバイスをお願いします。
テーブルのあるカラムをDate型で定義しましたが、保存データの中にはそのカラムがブランクのものもあり、エラーとなってしまいます。カラムをTextとすると問題はなくブランクのまま保存されます。エラーはException: Data truncation: incorrect date value: for column...となり、カラムがブランクのためと考えられます。カラムをDate型のままで、ブランクをそのまま扱う方法はありますでしょうか?
A129-1:
一点確認させて頂きたいのですが、MZPlatformからデータをMySQLに追加する際には
@「insert into...」のSQL文の実行
A「insertRow(PFObjectTable)」等のメソッドで行データを追加
のどちらの方法で行っていらっしゃるでしょうか。
「ProductionControl.mzax」ではSQL文の実行でMySQLのデータの更新、削除を行っています。
Q129-2:
はい、Insert into 'table' (column1,column2,...) values (data1,data2,..) で行っています。付け加えますと、エクセルファイルからテーブルを読み込み、そのテーブルを上記コマンドで’SQL文の実行’をしています。Column1はデータをDate型、Column2はText型などに設定しています。このdata1を入力せずに(エクセルテーブルではブランク)行うとMySQLで受け付けられない状況です。
A129-2:
MySQLのNULL可のDate型の列にNULLのデータを入れることはできますが、その場合のSQL文は「insert into table (column1) values(NULL)」となります。または他のカラムだけを指定して値を入れ、Date型の列には値を入れない場合もDate型列はNULLのままとなっているはずです。
まずはMySQLのDate型カラムがNULL可になっているかご確認下さい。
さて、サンプルではMZPlatform上ではinsert文の雛形を用意し、SQL文の実行を行う方法を多くご紹介しています。例えば「insert into table (column1)values('nichiji')」という文を用意し、「nichiji」を日付を表す文字列に置き換えるという方法です。 [テーブル]のセルの値を使って置換える時、値が無い場合は「insert into table (column1) values('')」というSQL文になります。
この文を実行するとお知らせ頂いたような「incorrect date value」というエラーが発生します。日付型の書式に沿った文字列ではないということです。
カラムがText型の場合には「('')」は、空文字として受け付けられているかと思います。
回避方法としては、[テーブル]セルに値が無い場合は、「'」で囲まず「NULL」とするか、あるいはinsert文で指定しないことが考えられます。
現在雛形を用意して置き換えるという方法をとっていらっしゃる場合には、SQL文を作る処理を少々変更することになります。
もし工程管理簡易版を基に作成なさったアプリケーションの場合には、変更はやや複雑になるかも知れません。
上記ご検討頂き、宜しければ変更例もご紹介しますので、insert文の雛形用意、SQL文の作成のあたりがどのようになっているか詳しくお知らせ頂ければ幸いです。