SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column …

Posted by muchag | MySQL |
初回投稿:2018-05-19 (土) 19:09:04 | 最終更新:2018-05-19 (土) 19:16:18

【環境】
MySQL: 5.7.18
経緯

GROUP BY を用いたら、下記エラーが出た。

Error: SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘dbnam.tablename.columnname’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
原因

Google 先生に質問すると、一杯出てきた。。。
MySQL 5.7 から仕様変更になったのが原因だそうな。

sql_mode=only_full_group_by
この部分。

my.cnf のデフォルトで sql_mode に only_full_group_by が追加されたため
GROUP BY を用いたときは、一意である値しか SELECT できなくなったとのこと。

解決策1

my.cnf の sql_mode から only_full_group_by を外してしまえば、5.6 までと同じように動作するとのこと。

解決策2
  • GROUP BY で指定したカラム
  • 集約関数を利用しているカラム
  • 全て同値であるカラム(?)

これらについては、SELECT できるので
それだけを指定する。

参考サイト

Qiita:脱!ゆるふわMySQL(2015-12-16)

Posted by muchag | MySQL |
初回投稿:2018-05-19 (土) 19:09:04 | 最終更新:2018-05-19 (土) 19:16:18

コマンド実行

Posted by muchag | PHP |
初回投稿:2018-05-18 (金) 23:53:31 | 最終更新:2018-05-19 (土) 0:02:14

php からサーバコマンドを実行する方法。

公式:execsystem

概要

php からサーバコマンドを実行するには
exec と system の2つの関数が用意されている。

二者の違いは、出力を返すか返さないかみたいだけど
引数指定次第でどちらも出力を返すみたいなので
結果的には、同じ働きなのかしらね~。

書式
exec

string exec ( string $command [, array &$output [, int &$return_var ]] )

第1引数:コマンド文字列
第2引数:出力格納用変数。省略可。省略すると出力を受け取れない
第3引数:コマンド実行結果ステータス格納用変数。省略可。省略するとステータスを受け取れない

system

string system ( string $command [, int &$return_var ] )

第1引数:コマンド文字列
第2引数:コマンド実行結果ステータス格納用変数。省略可。省略するとステータスを受け取れない

非同期処理

どちらもコマンド文字列に「 > /dev/null &」と付記してやることで、非同期に処理を実行できる。

注意:

プログラムがこの関数で始まる場合、 バックグラウンドで処理を続けさせるには、
プログラムの出力をファイルや別の出力ストリームにリダイレクトする必要があります。
そうしないと、プログラムが実行を終えるまで PHP はハングしてしまいます。

どうやら、上記付記内容は、出力をリダイレクトさせるものらしい。

参考サイト

SAMURAI:【PHP入門】外部コマンドの実行(exec)とコマンドライン実行の方法(2017-10-16)

Posted by muchag | PHP |
初回投稿:2018-05-18 (金) 23:53:31 | 最終更新:2018-05-19 (土) 0:02:14

CSV から null をロード

Posted by muchag | MySQL,phpMyAdmin |
初回投稿:2018-04-28 (土) 10:01:31 | 最終更新:2018-04-28 (土) 10:17:08

【環境】
MySQL: 5.7.18
phpMyAdmin: 4.7.6
経緯
phpMyAdmin

CSV からデータをロードしようとしたら

エラー
#1292 – Incorrect datetime value: ‘null’ for column ‘hoge’ at row 1

というエラーが出た。

CSV の中身を見ると、当該カラムの値は “null” となっている。

CLI

MySQL の CLI から入れようとしたら Warning が出た。

気持ち悪いので、なんとかしてみようと思った。

データ型

ちなみに対象カラムのデータ型は DATETIME。

手法1

LOAD DATA LOCAL INFILE '/path/to/csv_file.csv' INTO TABLE hoge FIELDS TERMINATED BY ',' ENCLOSED BY '"' SET deleted = nullif(deleted, '0000-00-00 00:00:00');

どこで見たか忘れてしまったけど
こういうやり方があるらしい。

以前試したときは上手くいった。

複数カラム対象

ただ今回は、複数カラムが対象で


LOAD DATA LOCAL INFILE '/path/to/csv_file.csv' INTO TABLE hoge FIELDS TERMINATED BY ',' ENCLOSED BY '"' SET registered = nullif(deleted, '0000-00-00 00:00:00'), deleted = nullif(deleted, '0000-00-00 00:00:00');

このように書いてみたけど、上手く行かなかった。

その後

すぐ諦めたので、何が悪いのか、そもそもこの書き方が正しいのかすら不明。

手法2

null のカラムの CSV 値を “\N” とする手法。

これもどこかに書いてあったのを見かけた記憶があったので試してみたところ、
なんと、上手くいった♪

Excel のセルに \N とそのまま記述して
CSV では、”\N” となるように吐き出したところ
OK だった。

Posted by muchag | MySQL,phpMyAdmin |
初回投稿:2018-04-28 (土) 10:01:31 | 最終更新:2018-04-28 (土) 10:17:08

phpDocumentor

Posted by muchag | PHP |
初回投稿:2018-04-11 (水) 15:52:58 | 最終更新:2018-04-11 (水) 16:25:09

個人で開発をしていると、こういうチームワーク的な手法に手が回らない。
実感が湧かないからね。。。

公式?:phpDocumentor

アノテーション
@property

公式?:@property
メンバ変数の型宣言をできる。

php では、メンバ変数を宣言する際に、型宣言を伴わない。
そのせいで phpStrom では、警告が出るらしい。

User.php

class User
{
    private $name;

    public function getName()
    {
        return $this->name;
    }

    public function setName($name)
    {
        $this->name = $name;
    }
}

この User クラスをメンバ変数 $leader へ代入すると
$leader が何者か不明なために、User クラス内メソッドを利用する際に警告となるらしい。

そこで、下記のように @property アノテーションで定義してやることで
理解してもらえるそうな。

ちなみに、複数管理するメンバ変数には、User[] という他言語タイプで伝えるとよいらしい。


/**
 * Class Group
 *
 * @property User $leader
 * @property User[] $leaders <- array ではなく User[]
 */
class Group
{
    private $leader;
    private $leaders = [];
}
@method

公式?:@method
findX のようなマジックメソッド利用時に用いる。
※マジックメソッドは、そんなメソッドは存在しないんだけど
メソッド名からフレームワーク側が解析して、処理してくれるメソッド?


/**
 * Class SampleModel
 *
 * @method array findById($id, $fields = null)
 */
class SampleModel extends AppModel
{

このように明記してやることができる。

@uses, @used-by

メソッド名を動的に生成する場合に用いる。
要は、当該メソッドがどこからも呼ばれていないと思われるのを避ける。

公式?:@uses & @used-by


class Hoge
{
    /**
     * @uses addUser(), addAdmin()
     */
    public function addMember($user, $user_type)
    {
        $method = sprintf('add%s', $user_type);
        $this->{$method}($user); // $user_type に合ったメソッドを呼ぶ
    }

    /**
     * @used-by addMember
     */
    private function addUser($user)
    {
    }

    /**
     * @used-by addMember
     */
    private function addAdmin($user)
    {
    }
}
@uses

@uses の呼び出し元に設定する。

@used-by

@uses の呼び出し先に設定する。

参考サイト

バシャログ。:PhpStorm の静的解析機能をさらに活用するための3つのアノテーション(2015-12-07)
→@property, @method, @uses について非常にわかりやすかった

Posted by muchag | PHP |
初回投稿:2018-04-11 (水) 15:52:58 | 最終更新:2018-04-11 (水) 16:25:09

NullReferenceException

Posted by muchag | C#,Library & PlugIn & AddIn |
初回投稿:2018-03-22 (木) 21:29:17 | 最終更新:2018-03-22 (木) 21:38:32

【環境】
NPOI: 2.3.0
Visual C#: 15.5.4(2017)
.NETFramework,Version: v4.6.1
経緯

ある日突然例外がスローされた。

System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。

見てみると、どうやら GetRow で失敗しているんだけど
何故か、22行目で突然失敗。

原因

CreateRow や CreateCell をしておらず
その行やセルが見つからない、ってことだったみたい。
stack overflow:NullReferenceException accessing Workbook Cells with NPOI(2016-10-23)

これが、一から作成してる Excel ファイルではなく
テンプレートファイルを用意していたので
ちょっと混乱した。

7行目から先は全て空白行なので
21行目も22行目もどちらも空白行なのに
22行目で突然エラー。

解決(邪道)

どうやら、21行目までは見た目空白行であっても
書式設定か何かがされていて、NPOI 側で既存と認識できていたみたい。

なので、100行目までフォント色を「自動」にしたら
例外にならなくなった。

本当は CreateRow や CreateCell をするのが正しい解決方法だと思うけど
今晩は時間がないので暫定で対応。

Posted by muchag | C#,Library & PlugIn & AddIn |
初回投稿:2018-03-22 (木) 21:29:17 | 最終更新:2018-03-22 (木) 21:38:32

R Index

Posted by muchag | R |
初回投稿:2018-03-11 (日) 13:23:49 | 最終更新:2018-03-11 (日) 13:30:43

丸っきりの書きかけ項目は Not found になる。

一般
  1. 設定(Preferences)
    1. eclipse.ini

 

パッケージ

 

がい~ん!(はまったこと)
  1. 解決済み(たぶん)
  2. 未解決

 

参考

公式:The Comprehensive R Archive Network

Wikipedia:R言語

RStudio
→R言語IDE

Qiita:プログラマーのためのR言語入門(2017-12-26)
Qiita:プログラマーのためのR言語入門 その2 ~分析・表示編~(2017-02-27)

Qiita:Rのパッケージまとめ~これだけはインストールしておくと便利というものを厳選(2016-12-20)

Posted by muchag | R |
初回投稿:2018-03-11 (日) 13:23:49 | 最終更新:2018-03-11 (日) 13:30:43

editorconfig-eclipse

Posted by muchag | CakePHP 3.x,Eclipse,Library & PlugIn & AddIn |
初回投稿:2018-03-07 (水) 16:21:41 | 最終更新:2018-03-07 (水) 20:45:00

.editorconfig に対応するためのプラグイン。

CakePHP3 の コーディング規約 を調べていたら
.editorconfig なるものの存在を知った。

これを Eclipse で利用できるようになるプラグイン。

【環境】
editorconfig-eclipse: 0.3.0.201702161018 Beta
Eclipse:Oxygen (4.7)
EPP Marketplace Client:1.5.1.v20160929-1432
OS:Windows10 Pro 64bit
インストール
[ヘルプ]-[Eclipse マーケットプレース] 検索窓に「editorconfig」
「editorconfig-eclipse 0.x」がヒットするので [インストール] ライセンスに同意して [完了]
警告:署名なしコンテンツを含むソフトウェアをインストールしています。
このソフトウェアの真正性または妥当性を実証できません。
インストールを続行しますか?

がーん。。。断念。 😥

Posted by muchag | CakePHP 3.x,Eclipse,Library & PlugIn & AddIn |
初回投稿:2018-03-07 (水) 16:21:41 | 最終更新:2018-03-07 (水) 20:45:00

Localkit が起動しない!

Posted by muchag | Monaca |
初回投稿:2018-02-18 (日) 21:59:11 | 最終更新:2018-02-18 (日) 22:08:47

【環境】
Monaca LocalKit: 2.5.0? → 2.5.1
経緯

ある日突然 Localkit が起動しなくなった。

アプリアイコンをクリックして、処理中のグルグルが断続的に2,3回出たものの
サッパリ起動しない。

Localkit をアンインストールして、再インストールしてもダメ。

原因

不明。

解決

teratail:Monaca LocalKitが起動されません(2017-12-11)
こちらの記事のおかげで解決。

記事にある通り、下記手順にて無事に起動するようになった。

  1. Localkit(おそらく 2.5.0)をアンインストール
  2. 下記2ディレクトリを削除
    1. ローカルディスク(c)/Users/(ユーザ名)/.cordova
    2. ローカルディスク(c)/Users/(ユーザ名)/AppData/Roaming/Monaca Localkit
  3. Localkit 2.5.1 を再インストール

私が戸惑っている数ヶ月の間に、解決記事がアップされていて助かりました。
ありがとうございました。

プロジェクト追加

プロジェクトが綺麗サッパリなくなっていたので

  1. 左ペイン「プロジェクト一覧」右にある+ボタンから
  2. [インポート]-[Cordova プロジェクトをインポート]
  3. 「既存の Cordova プロジェクトをインポート」
    1. 作業ディレクトリ:[参照] からローカルリポジトリ(ディレクトリ)を選択
    2. プロジェクト名:任意
    3. [インポート]
Posted by muchag | Monaca |
初回投稿:2018-02-18 (日) 21:59:11 | 最終更新:2018-02-18 (日) 22:08:47

DateTime

Posted by muchag | C# |
初回投稿:2018-02-11 (日) 12:23:12 | 最終更新:2018-02-11 (日) 12:28:15


MSDN:DateTime 構造体
MSDN:DateTime 演算子
MSDN:DateTimeOffset 構造体

【環境】
Visual C#: 15.5.4(2017)
文字列変換

dobon.net:日時(DateTimeオブジェクト)を文字列に変換する

Posted by muchag | C# |
初回投稿:2018-02-11 (日) 12:23:12 | 最終更新:2018-02-11 (日) 12:28:15

双方向データバインド

Posted by muchag | C# |
初回投稿:2018-02-11 (日) 12:21:07 | 最終更新:2019-12-17 (火) 21:18:59

【環境】
.NET Framwork: 4.5
Visual Studio: 2019C 16.4.1
前提

今回は、VB 案件で試したので、VB で。

本体プロジェクト(Windows フォームアプリ)とは別に
ユーザコントロール用クラスライブラリプロジェクトを作成。
(以下、コントロールプロジェクト)

手順
コントロールデザイン

コントロールプロジェクトを新規作成。

デフォルトで用意されたファイルに、テキストボックスなどを配置。

データバインディング用クラスを作成

Public Class ProfileEntity
    Public Property FirstName() As String = ""
    Public Property FamilyName() As String = ""
    Public Property Age() As Integer = 0
    Public Property Gender() As Integer = 0
End Class

そして、性別ラジオボタンのデータバインディングをどうすればよいか
と考えたら、全然思いつかなかった。

Google 先生にも質問してみたけど
ドンピシャの回答は得られなかった。

今後の課題。

バインディング
  1. [データソース] ビューで、[新しいデータソースの追加]
  2. 「データソースの種類の選択」ダイアログ
    1. [オブジェクト] を選択
    2. [次へ]
  3. 「データ オブジェクトの選択」ダイアログ
    1. ツリーを開いて、対象オブジェクトにチェック
    2. [完了]
  4. コントロールデザインへ、DataSource コントロールを配置
    1. DataSource コントロールの DataSource プロパティから
      1. [他のデータソース]-[プロジェクト データソース]-[(先程登録したオブジェクト)]
  5. フォーム上の各コントロールの (DataBindings) の対象プロパティへ、オブジェクトプロパティをバインディング
    1. ComboBox:SelectedValue プロパティ?
    2. TextBox:Text プロパティ
  6. ソースへデータオブジェクトのインスタンスを、DataSource へ設定するメソッドを追加

Public Sub SetDataSource(ByVal profile As ProfileEntity)
    Me.DataSource1.DataSource = profile
End Sub

試行錯誤に書いた通り、DataSource プロパティを外から設定することはできない。

フォーム利用
  1. コントロールプロジェクトをビルド
  2. 本体プロジェクトを新規作成
  3. 本体プロジェクト内の [参照] のコンテキストメニューから [参照の追加]
  4. 「参照マネージャー」ダイアログ
    1. [参照] から、コントロールプロジェクトの .dll を選択
  5. コントロール追加 の手順でツールボックスへ自作コントロールを追加
  6. 自作コントロールを、ツールボックスからフォームへ D&D
参考サイト

MSDN:とあるコンサルタントのつぶやき Part 1. 双方向データバインドの基本的な使い方(2009-02-26)
→とてもわかりやすい解説

@IT:WPF/UWP:ラジオボタンを双方向バインディングするには?[C#/VB](2016-02-03)
→ラジオボタンにおける双方向データバインド

試行錯誤
ユーザコントロールクラスを作成

UserControl クラスを継承するのに、下記のように書いたら

ステートメントの終わりを指定してください。

と怒られた。


Public Class ProfileControl Inherits UserControl

End Class

これが正解。


Public Class ProfileControl
    Inherits UserControl

End Class
データバインディング用クラスを作成
メンバ変数

メンバ変数ではダメ。

これでは、データバインディングのときに
選択肢として出てこなかった。

Public Class ProfileEntity
    Public FirstName As String = ""
End Class
古い記述

プロパティとして宣言すれば問題なかった。

けど、これは古い書き方らしい。


Public Class ProfileEntity
    Private _firstName As String = ""
    Public Property FirstName() As String
        Get
            Return _firstName
        End Get
        Set(value As String)
            _firstName = value
        End Set
    End Property
End Class
DataSource 設定

コントロールを利用するフォーム側で DataSource を設定しようとしたら
できなかった。

なので、コントロール側に、DataSource を設定するメソッドを追加した。

Posted by muchag | C# |
初回投稿:2018-02-11 (日) 12:21:07 | 最終更新:2019-12-17 (火) 21:18:59
« 前ページへ次ページへ »