MW211 EXIT

devlog
jQuery/遅延(delay)(3)非アニメーション系メソッド
2018年08月13日
┌──────────────────────────────────────┐
│setTimeout(function() {$('div').text('1秒後に表示');}, 1000);               │
└──────────────────────────────────────┘
とはいえ、アニメーション系メソッド以外でも遅延処理をしたいという場合がある。
例えば、上記のようにsetTimeout()を使えばよいのだが、
.delay()でやってみたい。そんな時の方法。

まず、アニメーション系メソッドは、キュー(queue)というものに登録されて
順番に実行するものである点を理解しなければならない。

つまり、アニメーション系メソッドは、実行した瞬間に実行されるのではなく
実行した瞬間は、キュー(queue)に登録されるだけで
キュー(queue)の方で先入先出で順番に実行していくのだ。
よって、.delay()が効くという寸法になっているのだ。

ってことで、自動で行われるキュー(queue)の登録を手動に行えばよい。
┌──────────────────────────────────────┐
│$('div').delay(1000).queue(function() {                                     │
│    $(this).text('1秒後に表示').dequeue();                                  │
│});                                                                         │
└──────────────────────────────────────┘
つまり、上記のような感じ。
.dequeue()を用いて、キュー(queue)からの削除も手動で行う必要がある点に注意。

これを応用すれば以下のおうに要素を追加することもできる。
┌──────────────────────────────────────┐
│$('div').delay(1000).queue(function() {                                     │
│    $(this).append(                                                         │
│        $('<span>').text('1秒後に表示')                                     │
│    ).dequeue();                                                            │
│});                                                                         │
└──────────────────────────────────────┘

ちなみに、キュー(queue)をクリアする方法は以下の通り。
┌──────────────────────────────────────┐
│$('div').clearQueue();                                                      │
├──────────────────────────────────────┤
│$('div').queue([]);                                                         │
└──────────────────────────────────────┘

また、キューの数を確認するには以下の通り。
┌──────────────────────────────────────┐
│$('div').queue().length                                                     │
└──────────────────────────────────────┘
分類:jQuery
jQuery/遅延(delay)(2)アニメーション系メソッド
2018年08月12日
.delay()が効くのはアニメーション系メソッドのみである。
アニメーション系メソッドは以下の通り。
┌───────┬──────────────────────────────┐
│.animate()    │アニメーション                                              │
├───────┼──────────────────────────────┤
│.show()       │表示                                                        │
│.hide()       │非表示                                                      │
│.toggle()     │表示/非表示                                                 │
│              │→「.hide(0).delay(1000).show(0)」(引数0が必要)             │
├───────┼──────────────────────────────┤
│.fadeIn()     │徐々に表示                                                  │
│.fadeOut()    │徐々に非表示                                                │
│.fadeTo()     │透明度変更                                                  │
│              │→「.fadeOut().delay(3000).fadeIn()」                       │
├───────┼──────────────────────────────┤
│.slideDown()  │スライド表示                                                │
│.slideUp()    │スライド非表示                                              │
│.slideToggle()│スライド表示/非表示                                         │
└───────┴──────────────────────────────┘
分類:jQuery
jQuery/遅延(delay)(1)基本認識
2018年08月11日
sleep関数的な使い方をするものではない。
┌──────────────────────────────────────┐
│$('div').text('初期表示');                                                  │
│$('div').delay(1000);  // sleep1秒                                          │
│$('div').text('1秒後に上書');                                               │
├──────────────────────────────────────┤
│$('div').text('初期表示')                                                   │
│        .delay(1000)                                                        │
│        .text('1秒後に上書');                                               │
└──────────────────────────────────────┘
上記は効かない。すぐに上書されてしまう。
分類:jQuery
ExcelVBA/ADODBデータベースに時間がかかる場合
2018年08月10日
以下のパラメータ値(プロパティ値)を変更(大きく)すればよい。(以下は既定値)
┌──────────────────────────────────────┐
│Dim データベース As New ADODB.Connection                                    │
│With データベース                                                           │
│    .ConnectionTimeout = 15                                                 │
│    .CommandTimeout = 30                                                    │
│End  With                                                                   │
└──────────────────────────────────────┘
┌─────────┬────────────────────────────┐
│.ConnectionTimeout│接続まで時間がかかる場合                                │
│                  │ネットワークの調子が悪い場合向け                        │
├─────────┼────────────────────────────┤
│.CommandTimeout   │SQL応答に時間がかかる場合                               │
│                  │重い(複雑な)SQL文を待つ場合向け                         │
└─────────┴────────────────────────────┘
分析系など特別なプログラムの場合には後者の値を大きくする感じか。
分類:ExcelVBA
要件
2018年08月08日
分類するとこんな感じか?
┌─────┬────────────────────────────────┐
│機能要件  │明示された要求事項                                              │
│          │・いわゆる本開発の目玉機能                                      │
├─────┼────────────────────────────────┤
│暗黙の要件│明示しなくとも満たされるべき要求事項                            │
│          │・誤った情報がないこと(誤解しやすい表現や誤字脱字などがないこと)│
│          │・UI/UXが使いやすいこと(並び順・メッセージ・画面遷移など)       │
├─────┼────────────────────────────────┤
│非機能要件│主にインフラ(ハードウェア)関係の暗黙の要件                      │
│          │・性能(速度と容量)  …運用に耐えうる速度や容量を満たしていること│
│          │・信頼性と可用性    …壊れにくく壊れても対策がなされていること  │
│          │・拡張性と移植性    …次のステップへ進むこともできること        │
│          │・安全性            …いわゆるセキュリティ対策(侵入・改竄・漏洩)│
│          │・運用保守性        …実運用全般として扱いやすいこと            │
└─────┴────────────────────────────────┘
非機能要件には暗黙の要件も含まれるっぽいが
一般的に非機能要件っていったらインフラが主だったりもするのかなぁ。
よくわからん。
分類:設計
SQL/DEFAULT定義の誤解
2018年08月07日
SQL文のDEFAULT定義は、あくまで列が指定されなかった場合の既定値であり
NULLを代入した場合の代替値ではないことに注意。
○INSERT文にて列が指定されなかった場合には基本的にNULLが代入される
○この場合、DEFAULT定義があった場合にはその値が代入される
○UPDATE文にてNULLを代入しても、DEFAULT定義の値は無視される
×INSERT文にてNULLを代入したら、DEFAULT定義の値が代入される
  →NULLが代入される

よって、NOT NULL制約とDEFAULT定義が両方定義してある列について
DEFAULT定義があるから(NOT NULL制約にはひっかからなくて)安心というのは間違いだ。
分類:SQL
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
前へ 1 … 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 … 156 次へ