MW211 EXIT

devlog
ExcelVBA/ADODBの列未指定≠INSERT文の列未指定
2018年08月06日
SQL文のDEFAULT定義は、あくまで列が指定されなかった場合の既定値であり
NULLを代入した場合の代替値ではないことに注意。
○INSERT文にて列が指定されなかった場合には基本的にNULLが代入される
○この場合、DEFAULT定義があった場合にはその値が代入される
○UPDATE文にてNULLを代入しても、DEFAULT定義の値は無視される
×INSERT文にてNULLを代入したら、DEFAULT定義の値が代入される
  →NULLが代入される

よって、NOT NULL制約とDEFAULT定義が両方定義してある列について
DEFAULT定義があるから(NOT NULL制約にはひっかからなくて)安心というのは間違いだ。

そして、それが如実に現れるのがExcelVBAのADODB。

「テーブル.AddNew」した瞬間に、全ての列にNULLがセットされるので
「テーブル.Fields(列).Value = 値」で値を代入しないと
NULLが代入されることになる。(列が指定されないのではない)

例えば、「列2」に対する代入処理がない場合は、以下のような扱いになる訳だ。
┌─┬────────────────────────────────────┐
│×│INSERT 表 (列1)      VALUES (値2);                                      │
├─┼────────────────────────────────────┤
│○│INSERT 表 (列1, 列2) VALUES (値1, NULL);                                │
└─┴────────────────────────────────────┘
分類:ExcelVBA
jQuery/tdタグ直下にテキスト文だけ除去
2018年08月05日
例えば以下のようにtdタグ直下にテキスト文とタグが混在していて
テキストだけ除去する方法。
┌──────────────────────────────────────┐
│<td>あいうえお<input type="text" value="かきくけこ"/></td>                  │
└──────────────────────────────────────┘

ちなみにタグ側だけ削除するには、以下みたいな感じで簡単なのだが。
┌──────────────────────────────────────┐
│$('td').children().remove();                                                │
└──────────────────────────────────────┘

一番確実な対処法としてはtd直下にテキストを置くのではなく、spanタグを介する方法。
┌──────────────────────────────────────┐
│<td><span>あいうえお</span><input type="text" value="かきくけこ"/></td>     │
└──────────────────────────────────────┘
そうすると以下のように素直に処理ができる。
┌──────────────────────────────────────┐
│$('td').children('span').remove();                                          │
├──────────────────────────────────────┤
│$('td').children().remove('span');                                          │
└──────────────────────────────────────┘

とはいえ、spanタグを今さら追加できないという事情の場合の対処方法。
すばり、テキストで取得したものを置換で除去してしまう!
┌──────────────────────────────────────┐
│$('td').html(                                                               │
│    $('td').html().replace($('td').text(), '')                              │
│);                                                                          │
└──────────────────────────────────────┘
なお、.text()は改行を認識するが、.html()は改行を除去してしまうという特性があり
たいていは上記ではうまくいかないようだ。
(<td>から</td>まで一行で書かれている場合のみうまくいく)

ということで、改行コードを除去した上で置換すればいけそうだ。
┌──────────────────────────────────────┐
│$('td').html(                                                               │
│    $('td').html().replace(                                                 │
│        $('td').text().replace(/\n/g, ''),                                  │
│        ''                                                                  │
│    )                                                                       │
│);                                                                          │
└──────────────────────────────────────┘
分類:jQuery
MSSQL/bit型とExcel出力
2018年08月04日
MSSQLにおけるbool型相当はbit型であるが、
SQL文中では「TRUE/FALSE」ではなく「1/0」で扱う。
よって、int型と同じなのかなと思うと当然ながら違うこともある。

その一つがExcelにおける文字列型のセルに出力した際に
「TRUE/FALSE」と表示される点だ。
なお、「TRUE」や「FALSE」といった文字列ではない点に注意。
分類:MSSQL
MSSQL/Key-Valueチェーン
2018年08月03日
Key-Value形式のテーブルで、Valueに他のKeyがある場合
それを繋げて最終的なValueを取得するSQL文。
なお、循環(無限ループ)の場合は、最初の階層の結果を返却する。
┌──────────────────────────────────────┐
│WITH [起点] (                                                               │
│        [キー],                                                             │
│        [バリュー]                                                          │
│    ) AS (                                                                  │
│        SELECT [キー],                                                      │
│               [バリュー]                                                   │
│            FROM 表 [表]                                                    │
│            WHERE [キー] = 値                                               │
│    ),                                                                      │
│    [再帰] (                                                                │
│        [キー],                                                             │
│        [階層],                                                             │
│        [直前キー],                                                         │
│        [バリュー],                                                         │
│        [循環]                                                              │
│    ) AS (                                                                  │
│        SELECT [キー],                                                      │
│               1                 AS [階層],                                 │
│               [キー]            AS [直前キー],                             │
│               [バリュー],                                                  │
│               0                 AS [循環]                                  │
│            FROM [起点]                                                     │
│        UNION ALL                                                           │
│        SELECT [再帰].[キー],                                               │
│               [再帰].[階層] + 1 AS [階層],                                 │
│               [表].[キー]       AS [直前キー],                             │
│               [表].[バリュー],                                             │
│               CASE                                                         │
│                 WHEN [再帰].[キー] = [表].[バリュー]                       │
│                   OR [再帰].[階層] > 99              THEN 1                │
│                 ELSE                                      0                │
│               END AS [循環]                                                │
│            FROM [再帰]                                                     │
│                INNER JOIN 表 AS [表]                                       │
│                  ON [表].[キー] = [再帰].[バリュー]                        │
│            WHERE [再帰].[循環] = 0                                         │
│    )                                                                       │
│SELECT [キー],                                                              │
│       [階層],                                                              │
│       [直前キー],                                                          │
│       [バリュー]                                                           │
│    FROM [再帰]                                                             │
│    WHERE [循環] = 0                                                        │
│      AND NOT EXISTS (                                                      │
│              SELECT *                                                      │
│                  FROM [再帰] AS [他]                                       │
│                  WHERE [他].[階層] > [再帰].[階層]                         │
│          )                                                                 │
│UNION ALL                                                                   │
│SELECT [キー],                                                              │
│       NULL       AS [階層],                                                │
│       NULL       AS [直前キー],                                            │
│       [バリュー]                                                           │
│    FROM [起点]                                                             │
│    WHERE EXISTS (                                                          │
│              SELECT *                                                      │
│                  FROM [再帰]                                               │
│                  WHERE [循環] = 1                                          │
│          )                                                                 │
└──────────────────────────────────────┘
分類:MSSQL
Excel/セルの枠線を消す方法
2018年08月02日
【方法1】枠線を消す
  リボンメニュー「表示」の(「表示」の部にある)「■枠線」のチェックをはずす

【方法2】枠線を白色にする
  「セルの書式設定」の「罫線」タブにて、「色」を白として枠線を引く
  なお、これは背景色が白(もしくは色なし)の場合のみ有効で
  他の色に着色した場合には、(白ではなく)それと同色にする必要あり

【方法3】背景色を白色にする
  意外に盲点なのが背景色が着色されている場合に、枠線が消える点だ
  すべてのセルの(背景色が)白色だったりした場合などには、
  何か違うモードとなっているのかと勘違いしてしまいがぢである
  背景色をなくす(塗りつぶしなしにする)と枠線が復活する
分類:Excel
PHP/JSON整形
2018年08月01日
【JSON→PHP配列】
┌──────────────────────────────────────┐
│$PHP配列 = json_decode($JSON, TRUE);                                        │
└──────────────────────────────────────┘

【PHP配列→JSON】
┌──────────────────────────────────────┐
│$JSON = json_encode($PHP配列);                                              │
└──────────────────────────────────────┘

【PHP配列→JSON】(わかりやすいように表示)
┌──────────────────────────────────────┐
│$JSON = json_encode($PHP配列, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);    │
└──────────────────────────────────────┘
  (JSON_UNESCAPED_UNICODE=日本語そのまま、JSON_PRETTY_PRINT=整列)

従って、以下のようにすると、JSONをきれいに整形できる。
┌──────────────────────────────────────┐
│$PHP配列 = json_decode($JSON, TRUE);                                        │
│echo json_encode($PHP配列, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);       │
└──────────────────────────────────────┘
分類:PHP
前へ 1 2 3 次へ