SQLの窓

2012年12月28日


WEBのファイルをコマンドラインからダウンロードするスクリプト : httpget.vbs

バッチ処理に使うのであれば
cscript httpget.vbs "URL"

対話で、エラー時にメッセージボックスが出ても良い場合は

httpget "URL"

※ URL だけを指定すると、URL の最後をファイル名としてカレントにダウンロード
※ URL の後にパスを指定するとそこへダウンロードです
( httpget "URL" "保存ファイル名のパス" )

(例) 7zip コマンドラインバージョンのダウンロード
▼ 
httpget.vbs "http://sourceforge.jp/frs/g_redir.php?m=jaist&f=/sevenzip/7-Zip/9.20/7za920.zip"
if Wscript.Arguments.Count = 0 then
	Wscript.Echo "httpget url [savepath]"
	Wscript.Quit
end if

' *****************************
' ダウンロード用のオブジェクト
' *****************************
Set objSrvHTTP = Wscript.CreateObject("Msxml2.ServerXMLHTTP")

' *****************************
' 第1引数は URL
' *****************************
strUrl = Wscript.Arguments(0)
if Wscript.Arguments.Count = 1 then
	' 第2引数が無い場合は、URL の最後の部分
	' ( カレントにダウンロード )
	aData = Split(strUrl,"/")
	strFile = aData(Ubound(aData))
else
	' 第2引数がある場合はそれをローカルファイルとする
	strFile = Wscript.Arguments(1)
end if

' *****************************
' ダウンロード要求
' *****************************
on error resume next
Call objSrvHTTP.Open("GET", strUrl, False )
if Err.Number <> 0 then
	Wscript.Echo Err.Description
	Wscript.Quit
end if
objSrvHTTP.Send
if Err.Number <> 0 then
	' おそらくサーバーの指定が間違っている
	Wscript.Echo Err.Description
	Wscript.Quit
end if
on error goto 0

if objSrvHTTP.status = 404 then
	Wscript.Echo "URL が正しくありません(404)"
	Wscript.Quit
end if

' *****************************
' バイナリデータ保存用オブジェクト
' *****************************
Set Stream = Wscript.CreateObject("ADODB.Stream")
Stream.Open
Stream.Type = 1	' バイナリ
' 戻されたバイナリをファイルとしてストリームに書き込み
Stream.Write objSrvHTTP.responseBody
' ファイルとして保存
Stream.SaveToFile strFile, 2
Stream.Close





posted by lightbox at 2012-12-28 09:32 | VBS + インターネット | このブログの読者になる | 更新情報をチェックする

2012年12月18日


ファイルから直接データベースを別のPCでリストアする / SQLExpress

SQLExpress 2008 バッチDB バックアップ でパックアップしたファイルを別の PC でリストアします。ここでは、MYDB というデータベースを MYDB.dat というファイルでバックアップしたものと考えます。

まず、MYDB.dat をどこに置いてもいいわけでは無く、ログインしているユーザがフルコントロールの権限を持つ場所に保存します。

その後内部の保存した時の情報を MYDB.dat の中から読み取る為に以下のSQL を sqlcmd で実行します。

sqlcmd -E -S .\SQLEXPRESS -i コマンドが書かれたL.txt
※ owner を sa にしたい場合は、-E では無く sa とパスワードで -U sa -P パスワード でログイン情報を使用します
RESTORE FILELISTONLY FROM DISK = 'C:\temp\MYDB.dat'
go
情報として、保存した時の論理名と、物理パスの情報がセットで存在し、データとログと合わせて4つの情報が必要になります。通常、データベース名と論理名は一致しているものですが、そもそも複製データーベースだと論理名が違う場合があります。その場合は最後に論理名も変更しないとオリジナルと同じ構成にならないので注意して下さい

これによって、元の情報が手に入るので、リストアする PC の環境を 『目的のDBが使用している物理ファイルのパスの確認 / SQLExpress 』で得たうえで以下のようなコマンドを作成して実行します
※ 必ずしもこのディレクトリ内に置く必要は無いはずですが、今回は管理上同じ場所へリストアします
RESTORE DATABASE MYDB 
	FROM DISK = 'C:\temp\MYDB.dat'
WITH
	MOVE 'MYDB' TO 'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MYDB.mdf',
	MOVE 'MYDB_log' TO 'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MYDB_log.LDF'
go

これは、ファイル内の論理名を使って、現在の PC のどの場所にリストアするかを決めるものです。

※ 削除する場合は、use master をしてから、drop database MYDB です。


タグ:SQLExpress DB
posted by lightbox at 2012-12-18 16:19 | SQLExpress | このブログの読者になる | 更新情報をチェックする

目的のDBが使用している物理ファイルのパスの確認 / SQLExpress

まず、コマンドファイル(sp.txt)を作成し、sqlcmd を実行します。標準出力では無く、ファイルに出力したい場合は、-o ファイル名を追加します。

sqlcmd -E -S .\SQLEXPRESS -i sp.txt

-E は、信頼関係接続です。SQLExpress がインストールされている PC から実行するのが最も確実であると思いますが、他の PC より実行したい場合は -U と -P でユーザとパスワードを指定する必要があるかもしれません。

sqlcmd -U sa -P password -S pc-000\SQLEXPRESS -i sp.txt

sp.txt
-- lightbox は、DB名です
use lightbox
go
-- sp_helpfile はシステムストアードプロシージャです
-- ドキュメントは http://msdn.microsoft.com/ja-jp/library/ms174307.aspx
sp_helpfile
go


▼ 出力結果
データベース コンテキストが 'lightbox' に変更されました。
name                                                                                                                             fileid filename                                                                                                                                                                                                                                                             filegroup                                                                                                                        size               maxsize            growth             usage    
-------------------------------------------------------------------------------------------------------------------------------- ------ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- ------------------ ------------------ ------------------ ---------
lightbox                                                                                                                              1 c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\lightbox.mdf                                                                                                                                                                                                PRIMARY                                                                                                                          2240 KB            Unlimited          1024 KB            data only
lightbox_log                                                                                                                          2 c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\lightbox_log.LDF                                                                                                                                                                                            NULL                                                                                                                             1088 KB            2147483648 KB      10%                log only 

関連する記事

ファイルから直接データベースを別のPCでリストアする / SQLExpress

SQLExpress 2008 バッチDB バックアップ



タグ:DB SQLExpress
posted by lightbox at 2012-12-18 12:22 | SQLExpress | このブログの読者になる | 更新情報をチェックする

2012年12月17日


Seesaa の 『カテゴリのHTML編集』で、カテゴリの一覧を見やすくする。

レイアウトとして、右サイドに position:absolute で、フッターを移動して運用しています。本来のフッターの位置のまま使うにしても、カテゴリが多くなるとスペースが無駄になるので、float:left を使って一行に二つのエントリを表示していますが、それだけだとまとまりが解りにくいので、集団の先頭でタイトルを付加しています。

結果は以下のようになっています。


<div class="sidetitle2"><% content.title %></div>
<div class="side" style='width:300px'>
<% content.header -%>
<% loop:list_category -%>

<% if:category.name eq 'VIDEO' -%>
<div class="sttl" style='float:left;margin:10px 0 10px 0;'>ビデオ レビュー</div>
<% /if -%>
<% if:category.name eq 'パノラマ' -%>
<div class="sttl" style='float:left;margin:10px 0 10px 0;'>Google ストリートビュー</div>
<% /if -%>
<% if:category.name eq 'マンガ : ドラマ' -%>
<div class="sttl" style='float:left;margin:10px 0 10px 0;'>漫画</div>
<% /if -%>
<% if:category.name eq '知恵メモ' -%>
<div class="sttl" style='float:left;margin:10px 0 10px 0;'>知恵メモ</div>
<% /if -%>
<% if:category.name eq '独り言' -%>
<div class="sttl" style='float:left;margin:10px 0 10px 0;'>独り言</div>
<% /if -%>
<% if:category.name eq '動画' -%>
<div class="sttl" style='float:left;margin:10px 0 10px 0;'>メディア</div>
<% /if -%>
<% if:category.name eq '何でやねん' -%>
<div class="sttl" style='float:left;margin:10px 0 10px 0;'>その他</div>
<% /if -%>

<table style='float:left;border-spacing:0px;'>
<tr><td style='vertical-align:top;width:140px'>

<a href="<% category.page_url %>"><% category.name | tag_break %></a>(<% category.article_count | __or__ | echo("0") %>)

</td></tr>
</table>

<% /loop -%>
<% content.footer -%>
</div>

<br style='clear:both;'/>
<br style='clear:both;'/> は、最後に必ず必要です。こうしないと後続するコンテンツで意図せずに float してしまいます。



Seesaa独自タグ簡易リファレンス

タグ:Seesaa
posted by lightbox at 2012-12-17 13:01 | Seesaa プログ管理支援 | このブログの読者になる | 更新情報をチェックする

2012年12月15日


GIMP ポータブルの起動できなくなるトラブル『Another instance of GIMP Portable is currently closing. Please wait for it to finish before launching it again.』

以下のようなダイアログが出て、起動できなくなります。



インストールディレクトリの Data フォルダの 以下のようなファイルを削除します。
( このファイルは、通常起動状態で存在し、終了すると削除されるはずのものです )


( PortableApps.comLauncherRuntimeData-GIMPPortable.ini )

情報ソース( PortableApps.com )


タグ:トラブル GIMP
posted by lightbox at 2012-12-15 22:32 | GIMP | このブログの読者になる | 更新情報をチェックする

2012年12月11日


7zip のコマンドラインバージョン(7za.exe/920)の -r オプションはワイルドカードを指定した時だけのようです。

▼ 7zip のコマンドラインバージョンのダウンロード
http://sevenzip.sourceforge.jp/download.html

付属の HELP には、-r -r- -r0 と3つのオプションの説明があるのですが、テストしてみたところ -r と -r0 の動作が同じようなのです。デフォルトの動きは -r- だそうなのですが、ワイルドカードを指定しない以下のような記述では全てのディレクトリが対象になっています。

7za.exe a -tzip c:\user\temp\archive.zip f:\webhost\admin\

これは、-r でも -r- でも -r0 でも同じです。
しかし、以下のように書く事でサブディレクトリは対象外となります

7za.exe a -tzip c:\user\temp\archive.zip f:\webhost\admin\*.*

つまり、ワイルドカード指定した時のみ -r と -r- の差が出ています。ちなみに、以下の書き方はそもそもワイルドカードの書き方の間違いのようです。

7za.exe a -tzip c:\user\temp\archive.zip f:\webhost\admin\*

上記の記述でも動作しますが、* はワイルドカードとみなされていません。

【結論】

1) 全てのフォルダを一括圧縮では、フォルダを指定するだけでいい
2) ワイルドカードを使う場合は、-r が必須である
3) そのフォルダのみの検索ならば、-r は付けないでワイルドカードを指定する

です。



posted by lightbox at 2012-12-11 16:50 | コマンド : コマンド | このブログの読者になる | 更新情報をチェックする

SQLExpress 2008 バッチDB バックアップ

タスクスケジューラにバッチファイルを登録して運用しています。Windows Server に登録していますが、注意するのは『開始オプション』のフィールドにバッチファイルが存在するフォルダを指定する事と、ユーザのログオンの有無にかかわらず実行可能にするという事です( 可能なら最上位の特権で )

バックアップなので、同じ PC 上に保存しても意味無いのでネットワーク上の別のサーバーへコピーしています。このバッチを2種類作り、保存フォルダも二つ作って1日おきに交互にコピーするようにしています。

backup.sql
use DB名
go
BACKUP DATABASE DB名 TO DISK = 'C:\保存場所\DB保存名.dat'
go


バッチファイル
del C:\保存場所\DB保存名.dat

sqlcmd -E -S .\SQLEXPRESS -t 3600 -i C:\batch\db\backup.sql

net use x: \\PC名\共有名 パスワード /USER:ユーザ名

copy C:\保存場所\DB保存名.dat X:\共有内保存フォルダ

net use x: /DELETE /yes

※ 3600 は タイムアウト設定

関連する情報

バックアップしたデーターベースを元に複製データベースを作成する :[SQL] リストア

関連する記事

ピンポイントですが、SQLServer 2008 は SQLServer 7.0 のデータをロード出来ないのです



posted by lightbox at 2012-12-11 14:05 | SQLExpress | このブログの読者になる | 更新情報をチェックする

Google Chrome の拡張 / 1クリックで Javascript をオン・オフする



こちらから、ZIP ファイルをダウンロードして適当なフォルダに置き解凍すると README.md が入っているフォルダが出来上がるので、そのフォルダを拡張ページから追加します。

追加するには、『デベロッパーモード』にチェックを入れて、『パッケージ化されていない拡張機能を読み込む』ボタンで上記フォルダを選択すると使えるようになります。



現在、Google Chrome では一般サイトから拡張機能をインストールできないようになっています。その事については、Google の HELP にあります。

また、過去の WEB にある記事中の 『試験運用版の拡張機能 API 』は有効にせずとも利用できます。



posted by lightbox at 2012-12-11 11:47 | Google Chrome | このブログの読者になる | 更新情報をチェックする

2012年12月05日


IE拡張 : リンク再作成(HTML作成)

カーソル下のリンクを HTML に再変換してクリップボードへピーします。

Windows8 の デスクトップの IE10 でも動作します。

ダウンロードして解凍した中の ie_re_anchor をエクスプローラからダブルクリックして実行して下さい。

SkyDrive へ移動




カーソル下のリンクを再度リンク用のHTMLに変換します

【通常】target="_blank" で再構築
【SHIFT】target="_blank" なし

※ リンクを持つ画像の場合は、ALT または TITLE をリンクのテキストにします
( 画像にリンクが無い場合は、画像の URLをHREF にしたHTMLを取得します )

※ ALT または TITLE が無い場合は入力を求めます


※ 画像単独の場合は、画像をリンクにしますが、『画像へのリンク』というテキストになるので後から変更して下さい。





posted by lightbox at 2012-12-05 15:16 | IE拡張メニュー | このブログの読者になる | 更新情報をチェックする

2012年12月03日


PHP で mdb(古い形式) の(架空の)ユーザデータを取得する ODBC クラス

通常の DB アクセスはそのまま Windows のあらゆる ODBC で可能ですが、JSON のデータを作成する為に機能を少し追加してあります。

print_r 関数は、そのままでもすでに整形されているので、str_replace で JSON に改造しました。日本語部分を unicode 表現には変換していませんが、このほうがテストには向いていると思います。

この為に mdb のデータは作成しました。ランダムに存在しないような名前を合成しています。

SkyDrive へ移動


<?
# **********************************************************
# データベースクラス
# **********************************************************
class DB {
 
	var $connect;
	var $result;
	var $json;
 
# **********************************************************
# コンストラクタ
# **********************************************************
	function DB( $server='127.0.0.1', $db_name='lightbox', $user='', $password='' ) {

		$this->connect = odbc_connect($db_name, $user, $password);
		$this->json = false;
	}
 
# **********************************************************
# 接続解除
# **********************************************************
	function close( ) {
		odbc_close( $this->connect );
	}
 
# **********************************************************
# クエリー
# **********************************************************
	function query( $sql_query ) {

		$ret = odbc_exec( $this->connect, $sql_query );
		return $ret;
	}
 
# **********************************************************
# フェッチ
# **********************************************************
	function fetch( $result ) {

		$ret = odbc_fetch_array( $result );
		$ret2 = $ret;
		$cnt = 0;
		while (list($_key, $_value) = @each($ret)) {
			$ret2[$cnt] = $_value;
			$cnt++;
		}
		return $ret2;
	}
 
# **********************************************************
# クエリーとフェッチ
# **********************************************************
	function query_ex( $sql_query='' ) {
 
		if ( $this->json ) {
			if ( $sql_query != '' ) {
				$sql_query = mb_convert_encoding( $sql_query, "shift_jis", "UTF-8" );
				$this->result = $this->query( $sql_query );
				if ( !$this->result ) {
					return false;
				}
			}
			$ret = odbc_fetch_array( $this->result );
			while (list($_key, $_value) = @each($ret)) {
				$ret[$_key] = mb_convert_encoding( $ret[$_key], "UTF-8", "shift_jis" );
			}

			$ret = print_r($ret,true);

			$ret = str_replace( "Array\n(\n", "{", $ret );
			$ret = str_replace( ")\n", "}", $ret );
			$ret = str_replace( "    [", "    \"", $ret );
			$ret = str_replace( "] => ", "\" : \"", $ret );
			$ret = str_replace( "\n    \"", "\",\n    \"", $ret );
			$ret = str_replace( "\n}", "\"\n}", $ret );
			$ret = str_replace( "{    ", "{\n    ", $ret );

			return $ret;
		}
		else {
			if ( $sql_query != '' ) {
				$this->result = $this->query( $sql_query );
				if ( !$this->result ) {
					return false;
				}
				return $this->fetch( $this->result );
			}
			else {
				return $this->fetch( $this->result );
			}
		}
 
	}
 
# **********************************************************
# 実行
# **********************************************************
	function Execute( $sql_exec ) {
		$ret = odbc_exec( $this->connect, $sql_exec );
		return $ret;
	}
 
 
}
?>
以下は実際のテスト出力ですが、全体の出力はこちらから参照して下さい。
<?
header( "Content-Type: text/html; Charset=utf-8" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

require_once("db.php");

$db_path = "C:\\httpd142p\\lightbox\\work\\api\\api.mdb";

$connect_string = "Provider=MSDASQL;";
$connect_string .= "Driver={Microsoft Access Driver (*.mdb)};";
$connect_string .= "dbq={$db_path}";

$db = new DB( "", $connect_string );
$db->json = true;

$query = "select * from [user_data] order by [id]";

$column = $db->query_ex( $query );

print "<pre>";
print "{ \"items\" : [\n";
$flg = false;
while ( $column ) {

	if ( !$flg ) {
		$flg = true;
	}
	else {
		print ",\n";
	}
	print( $column );
	$column = $db->query_ex( );
};
print "\n]\n}";
print "</pre>";

$db->close();

?>


以下は5件のみ表示しています
{
    "items": [
        {
            "id": "0001",
            "user_name": "浦岡 孫准",
            "name_f": "ウラオカ ソンジュン",
            "class_code": "0003",
            "h_type": "0",
            "create_date": "2012-12-02 00:00:00",
            "update_date": "2013-02-17 00:00:00"
        },
        {
            "id": "0002",
            "user_name": "蘭村 瑠璃",
            "name_f": "ランムラ ルリ",
            "class_code": "0003",
            "h_type": "1",
            "create_date": "2012-09-06 00:00:00",
            "update_date": "2012-12-08 00:00:00"
        },
        {
            "id": "0003",
            "user_name": "多岡 愛葛",
            "name_f": "タオカ アイカツ",
            "class_code": "0002",
            "h_type": "0",
            "create_date": "2012-11-03 00:00:00",
            "update_date": "2013-02-03 00:00:00"
        },
        {
            "id": "0004",
            "user_name": "高田 愛魅",
            "name_f": "タカタ アイミ",
            "class_code": "0003",
            "h_type": "1",
            "create_date": "2012-09-02 00:00:00",
            "update_date": "2012-12-25 00:00:00"
        },
        {
            "id": "0005",
            "user_name": "内高 孫之",
            "name_f": "ウチタカ ソンユキ",
            "class_code": "0003",
            "h_type": "0",
            "create_date": "2012-12-02 00:00:00",
            "update_date": "2013-01-30 00:00:00"
        }
    ]
}
関連する記事

ログイン画面からリダイレクトしてアクセストークンを取得するまでの簡単な PHP コード

※ JSON のチェックおよび最終整形にはこちらを使っています

タグ:PHP MDB ODBC
posted by lightbox at 2012-12-03 18:50 | PHP + データベース | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します


Windows
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり