2014年12月25日木曜日

MySQLのテーブル一覧を表示する

忘れがちなため、メモ。

MySQL でデータベースに存在するテーブルの一覧を表示するには、
SQL の SHOW 文を使用します。
> SHOW TABLES FROM データベース名

(参考サイト)
テーブルの一覧を表示する
http://mysql.javarou.com/dat/000393.html

2014年12月9日火曜日

EXCELの日付の差分の求め方


特によく使用するのは、こちら。
=(B2-A2)*1440   2 つの時刻の差を分単位で求めます。
=(B2-A2)*86400  2 つの時刻の差を秒単位で求めます。


開始と終了時刻の差分など、使用する機会が最近多い。


参考サイト : 2 つの時刻間の差分を計算する
http://office.microsoft.com/ja-jp/excel-help/HP010070468.aspx

2014年12月2日火曜日

既存テーブルのオートナンバーの割り振り方(主キー以外をキーにする場合)

SQLServerでオートナンバー列を新たに設定するが、
主キーの順番に自動で割り振られるだけ。

今回の主キー以外の順番(登録日時順とか)で割り振りたい場合には、向いていない。

そこで以下の方法を検討した。


↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

1)  ワーク用テーブル「HogeA」を作成する。
※ InsDate(データ登録日時)の昇順で、番号を割り振る。

SELECT 
 PrimaryNo
,InsDate
,ROW_NUMBER() OVER(ORDER BY InsDate ASC) AS sequence
INTO HogeA
FROM MasterA
;


2) 「MasterA」に、デザインからオートナンバー列「sequence(BigInt)」を追加する。
※ このままでは番号は主キーの順番になるだけなので注意!


3) 「MasterA」に、オートナンバー列「sequence」のidentityを「いいえ」にする。


4) 「MasterA」と 1)で作成したテーブルをJOINさせて、再度割り当てる。

UPDATE MasterA
SET MasterA.sequence = HogeA.sequence
FROM MasterA
INNER JOIN HogeA 
 ON MasterA.PrimaryNo = HogeA.PrimaryNo
;


5) 「MasterA」に、オートナンバー列「sequence」のidentityを「はい」に戻す。

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑


途中のデータを削除しても、
INSERTする際にはきちんと次の値として採番してくれているため、
問題ないと思われる。


以上

2014年12月1日月曜日

SQLServerのDumpが復元できない!?


> 復元さき
SQLServer2005

> 復元もと
SQLServer2014

・・・という状況で復元しようとしたら、
「メディア ファミリが正しい形式ではありません。」
という見慣れないエラーメッセージが発生した。

はじめはデータが壊れているのかと思った。
しかし調査した結果、そうではない。

「下位バージョンでは、バックアップファイルをリストアできません。」
との情報があり。
解決策はスクリプトにデータを出力するとか。

4GBを超えており、どう考えてもお手軽ではない・・・・。

どうしても必要というわけではないため、諦めることにした。

(参考)
http://nusoft.jp/blog/archives/118

2014年11月21日金曜日

カンマ区切りの列を、縦に整形して表示する方法

Kapowでロボットを組む際に、どうしようか考えていた。

特定の文言たちを1列にカンマ区切りで指定する仕様を検討中のため、
いくつ入ってくるかわからない。
それをKapowの変数に格納しなければならないが、それが可変では困る!

Kapowにとっては、ループで何行あろうが関係ないループ処理でできてくれるのが一番いい。

となると、MySQLで勘考してくれるのが一番だと考えた。
その結果が以下である。


SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(NGWord,',',v.n),',',-1) as NGwords
FROM (SELECT NGWord FROM test01) AS c,
               ( SELECT 1 n 
UNION ALL SELECT 2   
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 5
UNION ALL SELECT 6
UNION ALL SELECT 7
UNION ALL SELECT 8
UNION ALL SELECT 9
UNION ALL SELECT 10
) AS v
WHERE  LENGTH(NGWord)-LENGTH(REPLACE(NGWord,',',''))+1 >=v.n


test01テーブルに、カンマ区切りの文字列が保持されているNGWordを用意して、
上記SQLを実行させた。
ただし仮にカンマ区切りで13個あったとしても、UNION ALLたちが10個までしかないため、
10個までしか出力されない。

どっちみち仕様として利用者には、「10個までならカンマ区切りで指定可能」と
言ってしまえば運用上問題なし!!

詳細なことは、以下のURLへ飛んでください。
(参考URL)
BAD DB設計に対するSQLパターン応用編1 カンマ区切りのカラムを列(縦方向に分解)Comments
http://d.hatena.ne.jp/IT7C/20130217/1361039857

2014年11月19日水曜日

phpExcelでの画像サイズと、EXCELの印刷時の注意

写真サイズの、Lサイズ(89×127)の場合。
$hoge->setHeight(336.3);
$hoge->setWidth(479.8);

setHeightとsetWidthに対して、
上記のように指定すると、Lサイズで画像がEXCELに出力される。
しかしEXCELの印刷プレビューをすると、少し大きく表示されてしまう。
画像の間隔に余白がない状態だ。
(Microsoftには、シートの状態と印刷プレビューの状態で見え方が異なる状態を早く直して頂きたい・・)
なお、余白はデフォルトのままである。
※ 上下:1.9、左右:1.8、ヘッダ&フッタ:0.8

従って、上記の設定値の95%を設定するが、
これでは確かに印刷プレビューではおさまっているようにみえるが、
最後の3ページ目がなぜか4ページ目にはみでてしまうため、さらに縮小する必要があった。
$hoge->setHeight(319.5);
$hoge->setWidth(455.8);

最終的には、初めの設定値の92%に収まった。
※ 次のページに少し出ない、ぎりぎりのサイズ
$hoge->setHeight(309.4);
$hoge->setWidth(441.4);

さらにEXCELの中身も注意しなければならない。
シート全体を印刷範囲クリアをしたとしても、
以前に編集したことがあれば、その部分まで印刷されてしまう。
つまり3ページで画像が終わりだとしても、空白の状態で4・5ページ目が出力される。
よってそういうときは、該当行をすべて削除してしまえばいい。

2014年11月18日火曜日

phpExcelの画像サイズが統一されない原因について


setHeightとsetWidthで指定をしても、画像が統一されていなかったが、
それはデフォでは、「縦横比を固定する」が効いているからである。
したがって、ソースに
「$hoge->setResizeProportional(false);」
を追加してあげて、固定しないとすれば問題ない。


(参考)
 http://docolog.cocolog-nifty.com/papalog/2012/02/php-phpexcel-f9.html

phpExcelについて


PHPからEXCELを出力するライブラリがあるが、
こちらの注意点を2点列挙する。

(1)
ソースファイルをUTF-8で保存する際に、
BOMを付加させて保存すると、EXCEL出力時にファイルが壊れているとエラーメッセージが表示されて、開くことができない。

(2)
EXCELに貼り付ける画像の縦横を調整する、setWidthAndHeightなどが存在するが、決して指定したどおりに全ての画像がそろってくれるわけではない。
つまり貼り付けるオリジナルの画像の大きさがバラバラだとしたら、出力されたEXCEL内の画像もバラバラだったりする。

2014年8月13日水曜日

javascriptによるtrim処理

ltrim
target = target.replace(/^\s+/, "");

rtrim
target = target.replace(/\s+$/, "");


参考URL
http://blog.enjoitech.jp/article/180

2014年7月14日月曜日

phpExcel 罫線を消す 列番号指定による値セット


罫線を消す 左
$objSheet->getStyleByColumnAndRow(0, 1)->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_NONE);

罫線を消す 右
$objSheet->getStyleByColumnAndRow(0, 1)->getBorders()->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_NONE);

行列番号指定による値セット
$objSheet->setCellValueByColumnAndRow( $colIndex, $rowIndex, '値');

行列番号じゃなく、AとかBとか指定による値セット
$objSheet->setCellValue( 'B10', '値');

phpExcel セル結合、解除、縮小して全体表示

縮小して全体を表示
setShrinkToFit() … boolean
$objSheet->getStyle( 'B1')->getAlignment()->setShrinkToFit(true);

セルを結合する
$sheet->mergeCells('B10:C21');

セルの結合を解除する
$sheet->unmergeCells('B10:C21');

2014年6月25日水曜日

MySQL:既存テーブルへ外部キーを追加する

<ALTER TABLEによるFOREIGN KEYの設定>

>> MySQL :: MySQL 4.1 リファレンスマニュアル :: 7.5.5.2 FOREIGN KEY 制約

【サンプル1】
-- 既存テーブル
CREATE TABLE `Foo` (
  `a_id` int(11) NOT NULL default '0',
  `b_id` int(11) NOT NULL default '0',
  `name` text,
  PRIMARY KEY  (`a_id`,`b_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8


-- 外部キー追加
ALTER TABLE Bar
ADD FOREIGN KEY (`a_id`, `b_id`)
REFERENCES `Foo` (`a_id`, `b_id`)
ON DELETE CASCADE
ON UPDATE CASCADE;

(メモ)
ON DELETE句やON UPDATE句にCASCADEを指定した場合は、
親テーブルに対して更新を行うと子テーブルで同じ値を持つカラムの値も合わせて更新されます。
また親テーブルに対して削除を行うと子テーブルで同じ値を持つデータが削除されます


-- 外部キー削除
ALTER TABLE Bar DROP FOREIGN KEY `Bar_ibfk_1`;
※ SHOW CREATE TABLE BarをしてFOREIGN KEYに自動的に割り当てられたKEYの名前(`Bar_ibfk_1`みたいなの)を予め調べる



【サンプル2】
-- 「T_02_1」表の「ID」列に対して、「T_01_1」表の「ID」列を外部キーとして設定します。
ALTER TABLE T_02_1 ADD CONSTRAINT FK_02_1A
FOREIGN KEY (ID)
REFERENCES T_01_1(ID);


以上。

2014年6月5日木曜日

WEBサイトのComboBox情報を取得するJavaScript

$('#db-dpt option').each(
function(){
console.log($(this).val() + ',' + $(this).text());
});

- 備考 -
赤RのHighwayBusの検索したい場合。
optionタグのValue値は、Val()で取得する。
Chromeからは、Consoleタブを選択して上記のソースを貼り付ける。

2014年6月2日月曜日

1行書き 不要なファイルを消す



/tmpにある、10分以上経過したファイルを消す。

find /tmp/ -type f -mmin +10 -exec rm {} \;

2014年5月22日木曜日

cssで範囲選択できないようにする


for firefox chrome khtml (css)
-moz-user-select: none;
-webkit-user-select: none;
-khtml-user-select: none;

for IE (attr) ※子要素には引き継がれない
unselectable="on"



phpexcelでの高さ自動調整



// 10行目の行を引数なしで高さ自動調整
$objSheet->getRowDimension(10)->setRowHeight();

2014年5月21日水曜日

コンソールからjqueryを読み込ませる


chromeのデベロッパーツールから、


var _cjq={};_cjq['s']=document.createElement("script");_cjq['s'].src='//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js';_cjq['b']=document.getElementsByTagName('body')[0];_cjq['b'].appendChild(_cjq['s']);


を実行すると、
jqueryがないサイトでもコマンドラインから使えるようになる。


参考サイト
http://blog.engine04.com/2013/04/02/force-anywhere-to-load-the-jquery/



2014年5月19日月曜日

PHPExcelでの名前定義に値をセットする際の注意点


エクセルテンプレートを使用する際、名前定義が複数カラムを指定されていると
値セット時にエラーになる。


名前定義「entry」が結合セル「$A$1:$A:$3」であっても、
名前定義自体は、$A$1:$A:$3ではなく、$A$1にしないと値セットされない。


$objSheet->setCellValue('entry', .100'名' );



2014年5月13日火曜日

1行でプロセスを表示し続ける書き方

たとえば、mysqlのプロセスを確認する場合

while [ true ]; do clear; ps ax| grep "mysql"; sleep 1; done

2014年5月9日金曜日

jQuery カレンダーの日本語化+セットするデータに曜日を出す


読み込むjQuery

jquery1.8
jquery.ui.datepicker-ja.js


対象の要素

<input type="text" id="start_date" class="datepicker" >


datepickerクラスを持つすべてのinput要素にカレンダーをつける

$(document).ready(function(){
$.datepicker.setDefaults( $.datepicker.regional[ "ja" ] );
$('input.datepicker').datepicker({ dateFormat: 'yy-mm-dd(D)' });
});


Hyper-Vの仮想OSバックアップ手法検討


1)Hyper-Vの仮想マシンをエクスポート/インポートする
http://www.atmarkit.co.jp/fwin2k/win2ktips/1103hvexport/hvexport.html

・前提条件
■ Hyper-Vマネージャーを画面から起動する。自動化する手法ではない。
■ 実行中の仮想マシンはエクスポートできないので、事前にシャットダウン/停止/保存する。



2)Hyper-Vの仮想マシンを自動エクスポート
http://papa.katze3.net/?eid=938117

WindowsServer2008などに搭載されている、hyper-vのエクスポート機能を有効利用して、
タダで仮想マシンを自動バックアップができ効率的です。

Hyper-V の自動バックアップ(エクスポート) スクリプト
http://d.hatena.ne.jp/tekk/20100806/1281087011

Hyper-V の仮想マシンをエクスポートするスクリプト
http://cs.albis.jp/blogs/ms-18e/archive/2009/10/28/147295.aspx


どちらも、似たような動作なのでお好きな方を使ってみては?
ただし、仮想マシンをExport中はその仮想マシンは一時停止中です。
ですので、vhdファイルが大きいものはマシンスペックにもよりますが停止時間が長くなります。
長時間止められない場合は、おすすめできません。


可能であれば、タスク登録して自動でバックアップしたい。
ただしそのためにはGuestOSを停止させておく必要があるため、この問題についても合わせて検討しなければならない。


2014年5月8日木曜日

WEB画面全体でのファンクションキーの制御


(function($) {

//全体のキーイベント制御
$(document).keydown ( function(event) {

switch (event.keyCode){
case 112:
// F1
if ( typeof(Xapl.fn.F1event)  === 'function'){
Xapl.fn.F1event();
}
return false;
case 113:
// F2
if ( typeof(Xapl.fn.F2event)  === 'function'){
Xapl.fn.F2event();
}
return false;
case 114:
// F3
if ( typeof(Xapl.fn.F3event)  === 'function'){
Xapl.fn.F3event();
}
return false;
case 115:
// F4
if ( typeof(Xapl.fn.F4event)  === 'function'){
Xapl.fn.F4event();
}
return false;
case 8:
//backspaceを無効にする
var tag = event.target.nodeName.toLowerCase();
var $target = $(event.target);
if ((tag !== 'input' && tag !== 'textarea') || $target.attr('readonly') || $target.is(':disabled')) {
return false;
}
}
return true;

});
})(jQuery);

PHPExcelでエクセルの設定諸々


// グリッドラインを消す
$objSheet->setPrintGridlines(false);
$objSheet->setShowGridlines(false);

// シートロック パスワード
$objSheet->getProtection()->setPassword('1234');
// シートロック 並び替え
$objSheet->getProtection()->setSort(true);
// シートロック 行追加
$objSheet->getProtection()->setInsertRows(true);
// シートロック セル書式
$objSheet->getProtection()->setFormatCells(true);
// シートロック 行削除
$objSheet->getProtection()->setDeleteRows(true);