2011年3月30日水曜日

DBに画像データをバイナリで登録 SQLServer + VB.NET

こういった処理は今までやったことはなく。

検索してもあまり理解できず。

またズレたとこでつまずいて大いに時間をかけてしまいました。


環境
SQL Server 2005
Visual Studio 2005
VB.NET


VB.NETで簡単なユーザーを管理する画面を作成中。

単純なマスタメンテ画面です。

そこに顔写真を登録したいとのことで。

最初は画像ファイルを一括して管理する所定のフォルダを作成しそこで管理しようかと。

ただそれも面倒なのでいっそのことDBへ登録してしまえということになり、調査開始。


まずはDB側の設定。

画像登録用のカラム追加。
カラム名:picture 型:varbinary(max)


画面側の処理を追加

まずは選択した画像ファイルをバイナリに変換する。
-----------------------------------------------------------------

    Private Function f_GetPhoto(ByVal filePath As String) As Byte()
            Dim stream As FileStream = New FileStream(filePath, FileMode.Open, FileAccess.Read)
            Dim reader As BinaryReader = New BinaryReader(stream)
            Dim photo() As Byte = reader.ReadBytes(CType(stream.Length, Integer))


            reader.Close()
            stream.Close()


            Return photo
    End Function
-----------------------------------------------------------------


次に画像から変換したバイナリデータをDBへ登録。
-----------------------------------------------------------------
Private Sub s_AddPicture(ByVal PicBinary As Byte())
'※PicBinary ←画像データを変換し取得したバイナリデータ



追加の場合
Dim strSQL As String = ""
strSQL = ""
strSQL &= vbCrLf & " INSERT INTO Staff"
strSQL &= vbCrLf & "("
strSQL &= vbCrLf & " picture"
strSQL &= vbCrLf & ")"
strSQL &= vbCrLf & " VALUES "
strSQL &= vbCrLf & "("
strSQL &= vbCrLf & " @pic"
strSQL &= vbCrLf & ")"


更新の場合
Dim strSQL As String = ""
strSQL = ""
strSQL &= vbCrLf & " UPDATE Staff SET"
strSQL &= vbCrLf & " picture = @pic"
strSQL &= vbCrLf & " WHERE "
strSQL &= vbCrLf & " staff_id = '" & Me.txtStaff_Id.Text & "'"


登録処理
Using con As New SqlClient.SqlConnection(ConnectionString)
   Dim cmd As New SqlClient.SqlCommand(strSQL, con)
   cmd.Parameters.Add("@pic", SqlDbType.Binary, PicBinary.Length).Value = PicBinary
   con.Open()
   cmd.ExecuteNonQuery()
End Using


End Sub
-----------------------------------------------------------------

登録後、データを呼び出した場合は画面のPictureBoxに画像データを表示します。
-----------------------------------------------------------------

Private Sub s_SetPicFromDB(ByVal getbyte As Byte())
getbyte←DBから取得したバイナリデータ
    If IsNothing(getbyte) = False Then
        Dim imgconv As New ImageConverter()
        Dim img As Image = CType(imgconv.ConvertFrom(getbyte), Image)
        '画像の大きさをPictureBoxに合わせる
        Me.PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
        '画像を表示する
        Me.PictureBox1.Image = img
    Else
        Me.PictureBox1.Image = Nothing
    End If


End Sub
-----------------------------------------------------------------



自分じゃなかったらすぐ終わっちゃいそうでした。

費やした時間を戻して欲しい。

わからないことが多すぎて。

日々精進。

超図解 VB.NETルールブック (超図解シリーズ)


2011年3月29日火曜日

2011/03/26

先週土曜日。

高校時代の野球部キャプテンの結婚式に博多へ。

久しぶりの九州。

一緒に出席する仲間もかなり久しぶり。

キャプテンの結婚式なんでかなりみんな盛り上がって。

披露宴も立派で、最後は涙が出てしまいました。

本当に今日はおめでたいとみんなお酒が進み、二次会へ。

高校の野球部では特に余興をしていなかったので、二次会でないかやろうかと。

野球部の一つ上の先輩が仕切ってくれて、みんなパン一で踊って盛り上げました。

かなりの即興なんで仕上がりはあらかったですが。

喜んでもらえたんではないかとみんなやりきりました。

二次会も楽しく進み、さらにお酒も回ったころ。

先ほど仕切ってくれた先輩がふと。


「お前ら一緒に野球やった同学年の仲間のために、

なんかしてやろっていう気持ちはないんか。

本来、お前らが率先してなにかしないとじゃない。

一個上の俺に仕切らせてどうすんだよ。

大切な仲間の晴れ舞台にもっとバカになってお祝いしてやれよ。

ただ集まって飲んでるわけじゃあるまいし。

大切な仲間だろ。」


もちろん、みんなうれしくて参加している。

お祝いしたくて、遠方からもたくさん出席した。

それでもその先輩の一言で一気に素に戻ってしまった。

まったく正しいことを言っている。

死ぬまで連絡取り合って、なんかあったら野球して、酒飲んで。

一生付き合える、そんな仲間だ。

気持ちがたりなかったのかなと。


落ち込んでいてもせっかくの結婚式なんで。

その後はまた盛り上がったけど。

改めて反省。


とにかくこの上なく、めでたいってことは間違いなく。

何よりも大切な仲間の幸せを祈って。

またみんなで野球がしてーなー。

日々精進。

2011年3月23日水曜日

2011/03/23

今日はメモでもなんでもなく。

書き残す必要はないかと思ったんですが。


今日人生で初めて車にしかれた。

とは言っても自分の愛車が。

愛車といっても、自転車。

昼休みに今日はコンビニへお昼を買いに。

入り口のところに自転車をとめて。

今日は風が強く自転車が倒れそうになっていた。

2分ほどで買い物を終え外へ。

すると、オレの自転車が倒れ、車にぐちゃぐちゃ踏まれている。

運転手の人も、訳がわからず、何度か前後に。

そのときは何だと思い、運転手の人をにらみつけてしまった。

すると、運転手はかなりのおじいちゃん。

ようやく自転車から車が離れ、自転車を起こすと意外と傷も少なく。

全然乗れそうな感じなので一安心。

ただ運転手のおじいちゃんは気づいてはいるようだったが。

降りてもこず、謝りもせず、そのままブーンと行ってしまいました。

人の嫌な部分をみてしまいました。

さすがに腹が立った出来事。

まあでも、自分の停めた場所も悪かったかなと。

なんだかんだで、怒る事もできなかった自分も自分かと。

まあ自分がひかれなくてよかったかなと。

生きていればこんな事もあるか。

人に迷惑、悪い事をしたら素直に認め、謝れる人間になる。

日々精進。


2011年3月19日土曜日

2011/03/19

東日本大震災から約一週間。

幸いにも私をはじめ、私のまわりでは命を落としたり、負傷したり、行方不明な人は出ませんでした。

ただ今回の震災はそんな私でもとても暗い気持ちになるような、そんな震災だったと。

多くのかたがまだ行方がわからず、亡くなられた方の数も日をおうごとにどんどん増えています。

また高齢化の影響か多くのご高齢の方も、逃げる事ができず、避難できても過酷な状況に耐えれず、

命を落とされているかたも多くいるように感じます。


阪神淡路大震災のときはまだ小学生でした。

テレビで見てその凄まじさは子供ながらに感じていましたが。

自分のこととしてはなかなか捉えられず。


ただ少し大人になって、命ある事のありがたさ、大切さ、生きていける事の嬉しさ、

あの頃よりは日々感じながら生活しているし、だからこそ、今回の震災の凄まじさを感じている。


でも本当に一個人がやれる事って少ないんですね。

募金箱にこつこつ入れる事ぐらい。本当少しです。

また無力さに打ちのめされています。

しかしながら、今回感銘を受けたのは多くの国内、外からの支援の多さです。

国連事務総長が日本語でコメントを発表したり、オバマ大統領は寝ているところを起こされ、即日本へ電話を入れたと。

アメリカ軍も即座に現場入りしてくれました。

operationcode "TOMODACHI"もなにか涙がでそうになりました。

サッカーチャンピオンズリーグでは、試合前に黙祷が捧げられ、

WITH YOU JAPAN とメッセージが掲げられる。

日清はカップヌードルを100万食届け、

ダルビッシュ有選手は5000万円寄付。

ロンドンブーツ1号2号の田村淳さんはWEBで呼びかけカイロ、懐中電灯などを募り現地へ届けるという。


こういうことをよく思わない人もいるのかもしれない。

偽善とかパフォーマンスとか広告目当てとか。

でも自分は、今回そうは思わなかった。もしそうだとしても、それでいい。

これだけのことはこの企業、団体、人間にしかできない。


日本政府は、外交面でよくニュースで叩かれていたりする。

Noと言えない日本などと揶揄されたりもする。

日本って海外からなめられているではないかと思ってしまう事もある。


ただ国内外にこれだけ支援をしてくれる、日本を誇らしく思った。

普段あまり、日本人を意識することはないのですが。

日本に生まれ本当によかったと。


完全に復興するには多くの年数がかかるだろう。

でもやれる気がするし、少しでもいいから自分もそれに参加したい。

とにかく今は一人でも多くの命が助かる事を心より祈るだけだが。

今も救助を待っているかた。

頑張って、諦めないで!


今回の事は絶対に忘れてはいけない。

今日も命あることを噛みしめて。感謝。

日々精進。

2011年3月17日木曜日

Hyper-V 仮想マシンをコピー

Hyper-Vにて仮想マシンを運用中。

Hyper-Vのホストは一台。

仮想マシン用の使えるHDDの容量は250GB程度。

そこで仮想マシンを2台動かしていたのですが。

突然、仮想マシンAへのアクセス不可!

SCVMMから確認すると仮想マシンが2台とも一時停止状態。

開始の状態に戻してもすぐに一時停止状態に戻ってしまう。

Hyper-Vサーバーを普段管理しているわけではなかったので原因が全然わからず。

調査していると、仮想マシンのVHDが保存してあるボリュームの残容量がほとんどない。

ちなみにVHDは可変に設定してあるので、仮想マシンで容量が増えるたびに増大。

どうもこれが原因のようで、停止可能なもう一台の仮想マシンBをとりあえず停止。

仮想マシンBのVHDファイルをネットワーク上のファイルサーバーへ移動。

ボリュームの空き領域を確保した状態で、再度、仮想マシンAを開始状態に。

すると正常通り問題なく仮想マシンが動作。

とりあえず一安心。

しかしながら仮想マシンBも動かす必要がある!

どうしようかなと。

いろいろ調べていると、Windows server 2008 からVHDをマウントできるとのこと。

これはかなり便利ですね。

ファイルサーバーには十分容量が確保されていたので、適当な容量を指定し、VHD作成、接続。

簡単にHyper-Vサーバーに対して新規のボリューム追加は完了。

あとは仮想マシンBを移行するんですが。

ここがいまいちやり方がわからず。

後から調べていたら、仮想マシンのインポート、エクスポート機能で、簡単に出来るそうなんですが。

そんなことはつゆ知らず。

単純に仮想マシンBのVHDを移動させてしまったので正常な構成は失われている。

仮想マシンBのVHDをもとの場所に戻すことはできないので、

新たな仮想マシンCをVHDをマウントして作成した新規ボリューム上に作成。

その際に「後で仮想ハードディスクを接続する(A)」を選択し作成する。

仮想マシン作成後、移動させていた仮想マシンBのVHDを仮想マシンの設定から仮想マシンCに接続。

その状態で仮想マシンCを起動すると。

移動前と同様に正常に起動することが出来ました。

IPは固定だったので問題なし。

本来こんなぐちゃぐちゃな手順でやらないのでしょうが、知識がないまま進めているとこんな結果になりました。

とりあえず復旧してほっと一安心。

あとでもう一度整理します。

こういうのは本当苦手で。

知らないことが多すぎて。

日々精進。

2011年3月9日水曜日

日付が表示されない ACCESS2010

基本的にはまだまだOffice2003を愛用中。

使い慣れているし、

2007から画面のインターフェイスが変わったこともあり、

なかなか切り替えられないので。

2003形式で作られたACCESSアプリをACCESS2010へアップグレードすることに。

特にコンパイルエラーになることもなく、こんなに簡単に出来るものかと。

ACCESSでの開発は行ったことないので、どこを確認すればいいのかあまりわかっていないですが。

とりあえず、登録、削除、検索等の基本的な動きは問題なし。

これだけかと、利便性を痛感しつつ終了。

と思いきや、どうもレポートの日付の表示がおかしいと指摘を。

特にソース上で使っている関数にエラーが出ているわけでもなく。

普段使用していない分どこが、原因なのか目星もなかなかつけれずに。

またもややられるのかと思いきや。

レポートの日付を表示している項目の書式プロパティが空になっていたので、

そこを日付に設定しなおすと、日付が元通り表示されるようになった。

ちなみに今回は日付といってもFormat関数を使用し、年号(ee)、月(MM)、日(dd)を

それぞれ別々に表示させている。

アップグレードの影響で書式項目がクリアされてしまったのかと思い確認すると、

元から書式の設定はされていなかったようで。

本当の原因はわからず仕舞い。

時間ある時に再調査です。

わからないことが多すぎて。

日々精進。

2011年3月8日火曜日

祝婚歌

最近、こんな歌?詩?を知りました。

中のいい奴が結婚するというのでこんな詩があると教えてくれました。

WEBで検索するとちゃんと出てきます。

吉野弘さんが作られた詩だそうです。

詳しい事はよく知りません。

メローディーがあるような詩では恐らく無いんだと思います。

※ メロディーがあるなら誰か教えて下さい。


読んだだけで涙が出てしまいました。

普段何かと周りの目を気にして、力が入ってしまう自分としては、

とても優しく、なにか本来の人のあり方みたいなものを気づかされた気がします。

本当に素敵な詩に出会えて、幸せな気持ちになりました。

これを糧にまた明日から。

日々精進。


下記は歌詞。

『祝婚歌』 作:吉野 弘

二人が睦まじくいるためには
愚かであるほうがいい
立派過ぎないほうがいい
立派過ぎることは 長持ちしないことだと
気づいているほうがいい

完璧をめざさないほうがいい
完璧なんて不自然なことだ
うそぶいているほうがいい

二人のうち どちらかが
ふざけているほうがいい
ずっこけているほうがいい
お互い非難することがあっても
非難できる資格が自分にあったかどうか
あとで疑わしくなるほうがいい

正しいことを言うときは
少しひかえめにするほうがいい
正しいことを言うときは
相手を傷つけやすいものだと
気づいているほうがいい

立派でありたいとか
正しくありたいとかいう
無理な緊張には色目を使わず
ゆったりゆたかに
光を浴びているほうがいい

健康で風に吹かれながら
生きていることのなつかしさに
ふと胸が熱くなる
そんな日があってもいい

そしてなぜ胸が熱くなるのか
黙っていてもふたりには
わかるのであってほしい