ページ

2011年3月31日木曜日

◆Pubsで悩む

MS系ではおなじみのPubsデータベースを見ていてくだらないことで一晩悩んでしまった。

image

Pubsデータベースの中のauthorsとtitlesテーブル、この図を見ると多対多の関係で中間テーブルにtitleauthorを追加している典型的なパターンに見える。

そこでふと疑問に思った。多対多?
ん~、タイトルが同名の本があるからか?
でもtitle_idが付いているんだからそんなことないよな・・・・。

業務要件的に追加された特別な中間テーブルか?
DB設計なんてまともにやったことがないのでちょっと不安になる。

翌日、一度真剣にDB設計の勉強をしてみるかなんて考えながらAmazonで本を眺めていて、はたと気がついた。

あぁー、共著かぁ・・・。

◆スタートアップで悪さするプログラムの特定方法(メモ)

Windows Vista または Windows 7 でクリーン ブートを実行して問題のトラブルシューティングを行う方法

◆Windows7 SP1がインストール出来ない場合(メモ)

[Win7] <KB976932 / sp1> ウィンドウズ - Microsoft Answers

システム更新準備ツールというのをインストールするとうまくいくケースが有るらしい。

2011年3月29日火曜日

◆NorthWindサンプルデータベースのインストール(メモ)

osql -E -S ComputerName/InstanceName -i instnwnd.sql

◆スリープ(Sleep)設定の勧め

関東、東北での厳しい電力状況を鑑みて日本全体での節電が求められてる。

そこでWindows7におけるSleep設定をメモしておく。

「コントロールパネル」「電源オプション」を開く。
image
「プラン設定の変更」をクリック。

image
自分のパソコン使用状況に応じて「ディスプレイの電源を切る」時間と「コンピュータをスリープ状態にする」時間を設定する。

「詳細な電源設定の変更」をクリックして、
image
「復帰時のパスワードを必要とする」を「いいえ」にしておいたほうが、こまめにスリープさせる際は便利。

手動でスリープさせるときは、「Win → → S」とタイプすれば良い。(当然マウスでクリックしてもよいが。

一発でスリープしたいときは、デスクトップで右クリックして「新規作成」から「ショートカット」を選ぶ。
image

「項目の場所を指定してください」のボックスへ以下のコマンドを入力して「次へ」進みOK。
rundll32 PowrProf.dll,SetSuspendState

デスクトップにできたショートカットを右クリックして「プロパティ」を選択。
image

中程にある「ショートカットキー」のボックスをクリックして好きなショートカットキーを入力する。(Ctrl + Alt は自動的に付加される)

ちなみに復帰させる方法は繋がっているデバイス(マウスやキーボード)によって変わってくる。
例えば、スリープ復帰に対応しているマウスの場合は、「コントロールパネル」「デバイスマネージャ」でマウスのプロパティを開くと、
image
image

「電源の管理」というタブがあり、スリープ解除させるかどうかの設定が可能。
感度の良いマウスは、ちょっとした動きを感知して復帰してしまうので、その場合はこのチェックを外しておくと良いだろう。

解除できるデバイスが何もつながっていない時は電源ボタンになるのかな?

私のPCの場合は、スリープに入るのはほとんどノータイム、復帰が3秒程度だった。

ーー

予想通り?若干の不具合が発生。
マウスにアサインしたコマンドが効かなくなる。
とりあえず以下で対処した。
PowerShell: ◆スリープ(Sleep)解除イベントを拾う

2011年3月25日金曜日

◆TableAdapterManager

VisualStudio2008から?TableAdapterManagerなるコンポーネントが追加されて、それまで個々のテーブルアダプタ毎に更新する必要があった処理をUpdateAll()で一発実行出来るようになった。

なおかつ凄いことに、テーブル間の制約も理解して更新順序を良きに計らってくれるらしい。

う~ん、素晴らしい。
私のお手軽プログラミングスタイルにぴったりの機能だ。

早速NorthWindの「Orders」と「Order Detail」でマスター詳細パターンの更新を行ってみた。

っが、新規追加がエラーになる。
外部キー制約の例外だそうだ。

どうやら、「Orders」テーブルのOrderIDはIdentity列(AutoNumber自動付番)に成っているのだが、そこで付番された番号を「Order Detail」のOrderIDに読みなおしてInsertするという機能がバグっているっぽい。

試しに個々のTableadapterのUpdateメソッドを順に(当然Ordersから)実行するとうまくいく。

TableAdapterManagerは比較的シンプルなオブジェクトで特別な設定もなさげ。

調べていくと以下のようなバグ報告を見つけた。
Hierarchial update of Master/Child with autoincrement (identity) primary key on Master - not possible | Microsoft Connect

2008のころからバグってるの?

NorthWindにあるような標準的なパターンで動かないんじゃ使い物にならないじゃん(><)

◆VisualStudio2010 「出力ディレクトリーにコピー」

プロジェクトにデータベースファイル(MDF)を追加していると、そのプロパティに「出力ディレクトリーにコピー」というのが現れる。

これは、実行時にプロジェクトにあるMDFファイルをBinディレクトリーにコピーした上でSQLServerにアタッチして使う方式である。
プログラムで色々とテスト的にデータを弄っても、次にはきれいなDBの状態から再度テストが出来るという機能だ。

最初にこの機能が出来たとき、更新したはずなのに次に見ると更新されていな~い???
っと戸惑う元にもなった。

2010では(いつからかは知らないが)若干動きが変わっているようだ。
「常にコピーする」の設定でも、再実行すると前回の更新内容が反映されている。
あれ、コピーされるはずじゃないの?っと思っているといつの間にか元に戻っていたりする。

どうやら、ソースを変更した時はコピーし直されるような感じだ。

判っていれば、それはそれで便利だが気づかないと混乱するかもしれない。

2011年3月23日水曜日

◆Windows Live Writer で SyntaxHighlighterプラグインを使ってBloggerに投稿する

Syntax Highlighter自体はプラグインの追加から簡単にできる。
しかし、それだけでは色付けはされずブログサイトの方にも設定が必要なようだ。

私はWEB系に疎いので自前でごねごねするのは勘弁ね。
って事で探していたところ以下のサイトで簡単な方法を見つけた。
yan note: BloggerでSyntaxHighliterを使うには?

FaziBear: Blogger Syntax Highlighterにアクセスし「this」のリンクをクリック。
image

以下の画面が表示されるので「Add To Blogger」をクリックすると、
image

こんなふうに怒られた。
image

設定を変えてセキュリティを弱めれば実行出来るのかもしれないが、調べるのが面倒なのでFireFoxで試してみたところ、上手く行った。

画面にウィジェットが追加され、以下の表示が意味もなく入ってしまうが、一番下に持って行ってとりあえず良とした。
image

以下はC#のソースを表示した例である。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace PubsDetail
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void authorsBindingNavigatorSaveItem_Click(object sender, EventArgs e)
{
this.Validate();
this.authorsBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.pUBSDataSet);

}

private void Form1_Load(object sender, EventArgs e)
{
// TODO: このコード行はデータを 'pUBSDataSet.authors' テーブルに読み込みます。必要に応じて移動、または削除をしてください。
this.authorsTableAdapter.Fill(this.pUBSDataSet.authors);

}

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.PageUp:
this.authorsBindingSource.MovePrevious();
break;
case Keys.PageDown:
this.authorsBindingSource.MoveNext();
break;
}
}
}
}

出来れば横スクロールが欲しい気がするが・・・。

◆VisualStudio2010 Expressで扱えるデータソース

最近久しぶり(5年ぶり位?)にプログラミングというかDBアプリの勉強をしている。
動機としてはMSのLightSwitchという開発ツールに興味を持ったから。
もはや仕事で本格的なアプリケーションを作るようなことは無いので、昔使ったAccessのようにお手軽にちょっとしたWEBアプリが作れたら良いのになぁ、と思っていたところだったので・・・。

ベータ版を触ってみたところ簡単は簡単そう。
でも、やるからにはある程度仕組みも理解しておきたい。
VisualStudioでのDBアプリとなるとほとんど素のADO.NETを使った経験しかないのだが、最近ではLinqやらEntityFrameworkやらの新しい技術が次々と投入されている。(というか自分が全然触っていなだけなのだが)
ASP.NETも出た時にちょっと触ったきり今となっては忘却の彼方。
IISの設定とかSQLServerの設定とかもさっぱり。

あくまでもホビープログラミングなのでスペシャリストになる気はないが、お手軽開発する為に必要な知識は全体的に俯瞰しておきたい。

という事でネット記事を参考にSQLServerアプリを(まずはWindowsフォームアプリ)を弄ってみる。

ネット記事がVisualStudioのExpress版を使っていたので自分もExpress版(バージョンは違うが)で試していたのだが、Expressってアタッチされた普通のDBって扱えないのね・・・。(正確にはGUIサポートが無い)
データソースを作る以下の画面で一生懸命DBに繋ごうとしていた。
image

この画面で「SQLServerデータベースファイル」を選択すると次の画面でファイル選択ダイアログが出てきてしまうのでMDFファイルを直接指定するしかなくなってしまう。
仕方がないのでアタッチしているMDFを指定してVisualStudioから更新を掛けたらSSMSから繋がらなくなってしまった。(軽~くDBが壊れたふう)
そこでPremiumエディションの方を見てみると、
image

なんだ、ちゃんと用意されてるじゃん。

余計なところで躓いた(><)

 

最近思うのだが、こういった開発向けの書籍がめっきり減った。進化の早い世界なのでネットに押されて書籍は売れないんだろうな。
ただ、ネットの情報も纏まった中身の濃い情報というのは非常に少なく、自分で寄せ集める必要があり若干ストレスが溜まる。
有料でも良いからネットで纏まった情報が発信されて欲しいものだ。

日本MS社員なんかがもっと頑張ってくれると助かるのにな。

--追記

ちなみに、VisualWebDeveloperはデータベースファイル以外も扱えるようだ。(混乱するので統一してほしいなぁ)

私が最近チェックした記事