今日何気なしにコードを書いていたらパラメータの定義の際、ByValが表示されていないことに気が付いた。
これまで入力しなくても勝手に付加されたのに何でだろう?って思って調べてみたらServicePack1を適用するとそうなるらしい事が判った。
VB6までは指定しなければ既定でByRefだったが、VS2010 SP1からそれがByValになったわけか(注)・・・何か違和感(喪失感)感じるな〜。
注)VB.NETになってから既定でByValとは知っていたが、勝手に付加されているので既定であることを自覚することは無かった。
2011年12月26日
2011年09月09日
Office アプリケーションの組み込み定数の値を取得する方法
WindowsおよびWebアプリのなかでExcelなどを操作することがある。
その際にVBAを利用するのだが、参考書などにはコマンドの引数に定数が使われても、実際のVBのなかでは定数が利用できないことの方が多い。
そこで、定数の実際の数値を知りたいと思うのだがこれが結構調べても載っていない。
そんな時Microsoftの下のサイトを見つけた。
「Office アプリケーションの組み込み定数の値を取得する方法」
ここにはVB6のサンプルコードが載っている。
それに基づいて作ってみたところ全ての組み込み定数の値を知ることができた。(下図)
これは重宝する。
その際にVBAを利用するのだが、参考書などにはコマンドの引数に定数が使われても、実際のVBのなかでは定数が利用できないことの方が多い。
そこで、定数の実際の数値を知りたいと思うのだがこれが結構調べても載っていない。
そんな時Microsoftの下のサイトを見つけた。
「Office アプリケーションの組み込み定数の値を取得する方法」
ここにはVB6のサンプルコードが載っている。
それに基づいて作ってみたところ全ての組み込み定数の値を知ることができた。(下図)
これは重宝する。
2010年06月10日
SQL Server 2008 の教科書
まさに「教科書」の名に相応しい充実した内容の本である。
店頭で立ち読みしたとき、本来の目次とは別に、ヒントやコラムなどのTips集にも目次があるのに驚いたが、その量と質は類書を圧倒するもので、著者達が運用や開発の現場でどれだけ豊富な経験を積んでいるかが判る。
内容としては初心者向けだが、これまでに幾つものDBを運用開発してきた経験者(私)でも案外知らない、知っていても理論的には把握していなかった正規化のことやパフォーマンスに影響するクエリーの使い方、トランザクションとロック等、目から鱗の内容が至る所(ヒントとコラム)に散りばめられている。
また、これまで何のために使うのか判らなかったプロファイラや利用状況モニタなどのツールも具体例で使い方を知ることができる。
SQLServer2008とはあるがSQLServer2000/2005やOracleとの違いも詳しく書かれているので「SQLServer全利用者ための教科書」と言って良いだろう。帯に「マイクロソフト SQL Server 製品担当者 推薦!」とあるが、そう言わしめるだけの内容が確かにこの本にはある。
Visual Studio等の具体的なサンプルソースはあまりない、それらは別途、開発言語向けの書籍で学習したほうが良いだろう。ただ、この本の価値はそれらの言語で開発する際に注意すべきSQLServerの仕様(仕組み)を教えてくれる。これを知っているのと知らないのとではパフォーマンスやデバッグ、トラブルシューティングに間違いなく差が出るだろう。
店頭で立ち読みしたとき、本来の目次とは別に、ヒントやコラムなどのTips集にも目次があるのに驚いたが、その量と質は類書を圧倒するもので、著者達が運用や開発の現場でどれだけ豊富な経験を積んでいるかが判る。
内容としては初心者向けだが、これまでに幾つものDBを運用開発してきた経験者(私)でも案外知らない、知っていても理論的には把握していなかった正規化のことやパフォーマンスに影響するクエリーの使い方、トランザクションとロック等、目から鱗の内容が至る所(ヒントとコラム)に散りばめられている。
また、これまで何のために使うのか判らなかったプロファイラや利用状況モニタなどのツールも具体例で使い方を知ることができる。
SQLServer2008とはあるがSQLServer2000/2005やOracleとの違いも詳しく書かれているので「SQLServer全利用者ための教科書」と言って良いだろう。帯に「マイクロソフト SQL Server 製品担当者 推薦!」とあるが、そう言わしめるだけの内容が確かにこの本にはある。
Visual Studio等の具体的なサンプルソースはあまりない、それらは別途、開発言語向けの書籍で学習したほうが良いだろう。ただ、この本の価値はそれらの言語で開発する際に注意すべきSQLServerの仕様(仕組み)を教えてくれる。これを知っているのと知らないのとではパフォーマンスやデバッグ、トラブルシューティングに間違いなく差が出るだろう。
![]() | SQL Server 2008の教科書―基礎から実践まで学べる by G-Tools |
2010年03月09日
プログラムから圧縮ファイル(LZH,ZIP)を解凍する一番手軽な方法
自前で解凍ルーチンを作るのは大変である。dllを使うのも結構面倒である。
そこでフリーソフトを使って簡単に行う方法を紹介する。
ソフトは「Lhasa」。ドラッグアンドドロップで簡単に解凍できる有名なソフトだが、実はコマンドラインでも使える。LHASA.TXTにパラメータの説明が載っているので試したところ見事に指定したフォルダに解凍させることができた。
コマンドラインサンプル:
そこでフリーソフトを使って簡単に行う方法を紹介する。
ソフトは「Lhasa」。ドラッグアンドドロップで簡単に解凍できる有名なソフトだが、実はコマンドラインでも使える。LHASA.TXTにパラメータの説明が載っているので試したところ見事に指定したフォルダに解凍させることができた。
コマンドラインサンプル:
1. C:\work\hoge.lzhを指定したフォルダ(例:C:\test)に解凍する場合
lhasa.exe -dC:\test -a- -e- -q -f C:\work\hoge.lzh
※パスに空白が含まれる時は"で囲む
lhasa.exe -d"C:\My Documents\hoge" ....
2. C:\work\hoge.lzh を同じ場所に解凍する場合
lhasa.exe -d- -a- -e- -q -f C:\work\hoge.lzh
パラメータの意味
-d(指定フォルダ) : 指定したディレクトリに出力
-d- : アーカイブと同じディレクトリに解凍
-a- : 出力先にそのままファイルを出力
-e- : 解凍先フォルダを開かない
-q : 途中経過表示をしない
-f : 解凍先に更新されたファイルがあっても確認せず上書き
これを元にVB2005で作ってみると
'/// LZH,ZIPファイルを指定したフォルダに解凍 /////
Public Sub Decompression(ByVal srcFile As String, ByVal desFolder As String)
'srcFile : 圧縮ファイル名
'desFolder : 解凍先フォルダ
'---------------------------
Dim para As String = "-d" & Chr(34) & desFolder & Chr(34) & " -a- -e- -q -f "
Dim exeFile As String = "C:\lhasa\lhasa.exe"
Dim proc As New Process
proc.StartInfo.FileName = exeFile
proc.StartInfo.Arguments = para & Chr(34) & srcFile & Chr(34)
proc.Start()
proc.WaitForExit()
End Sub
2010年02月01日
SQLで日付データを扱う場合
Date型フィールド(例:hogeDate)をDateTimePickerコントロールのValue値で指定する場合
SQLServer:
"hogeDate > CAST('" & DateTimePicker1.Value.ToString & "' AS datetime)
"hogeDate > CONVERT(datetime,'" & DateTimePicker1.Value.ToString & "')"
ACCESS:
"hogeDate > #" & DateTimePicker1.Value.ToString & "#"
Oracle:
"hogeDate > TO_DATE('" & DateTimePicker1.Value.ToString & "','YYYY-MM-DD HH24:MI:SS')"
※Value値を''で囲まないと「ORA-00907: 右カッコがありません」エラーが発生する
※フォーマット文字列を正しく指定しないと「ORA-01861: リテラルが書式文字列と一致しません」エラーが発生する
SQLServer:
"hogeDate > CAST('" & DateTimePicker1.Value.ToString & "' AS datetime)
"hogeDate > CONVERT(datetime,'" & DateTimePicker1.Value.ToString & "')"
ACCESS:
"hogeDate > #" & DateTimePicker1.Value.ToString & "#"
Oracle:
"hogeDate > TO_DATE('" & DateTimePicker1.Value.ToString & "','YYYY-MM-DD HH24:MI:SS')"
※Value値を''で囲まないと「ORA-00907: 右カッコがありません」エラーが発生する
※フォーマット文字列を正しく指定しないと「ORA-01861: リテラルが書式文字列と一致しません」エラーが発生する
2009年11月06日
SQLServer Express版の自動バックアップ
SQLServer2005の無償版であるExpress版ではAgentサービスが実装されていないため管理ツールSQLServer Management Studio(Express)からメンテナンス機能が使えない。
よってタスクメニューから手動でのバックアップはできても自動で(定期的に)バックアップを行うことができない。そのためどうしてもWindowsのタスク機能を使ってバッチ処理などで実行させる必要がある。
事例:
SQLServerインスタンス:SQLEXPRESS
データベース名:testdb
SQLServer認証ユーザー名:sa、同パスワード:pass
バックアップ保存先フォルダ:C:\sqlback
用意するのは2つのファイル(ファイル名は任意)
これをバックアップ保存先フォルダに配置する
1.バックアップ命令文(SQL):backup.sql
BACKUP DATABASE testdb TO DISK='C:\sqlback\testdb.bak' WITH INIT
GO
※解説
@DISK=''でバックアップファイルを指定したパスに保存
AWITH INIT の文が無いと、バックアップデータが毎回追加されてtestdb.bakが大きくなってしまう。この文を付けることで上書きモードになる。
2.バッチファイル(BAT):backup.bat
sqlcmd -S .\SQLEXPRESS -U sa -P pass -i C:\sqlback\backup.sql > C:\sqlback\backup.log
※解説
sqlcmdの詳細はサイトで確認
@-S はサーバー名(インスタンス名含)
A-U はログイン名
B-P はログインパスワード
注:-U -P はSQLServer認証の場合に必要だが、Windows認証の場合は -E だけになる(下参照)
例:sqlcmd -S .\SQLEXPRESS -E -i C:\sqlback\backup.sql
C-i は実行するSQLのファイル名
D > 以下は無くても良いがログを残したい時に使う
あとはWindowsのタスクでバッチファイルbackup.batを指定すれば良い。
今回は毎日指定された時刻に行う予定で作成したので、前日以前のバックアップは保存されない。
1週間分バックアップを保存したい場合には、曜日毎に別々のSQLとバッチファイルを用意してタスクに登録すれば良い。
よってタスクメニューから手動でのバックアップはできても自動で(定期的に)バックアップを行うことができない。そのためどうしてもWindowsのタスク機能を使ってバッチ処理などで実行させる必要がある。
事例:
SQLServerインスタンス:SQLEXPRESS
データベース名:testdb
SQLServer認証ユーザー名:sa、同パスワード:pass
バックアップ保存先フォルダ:C:\sqlback
用意するのは2つのファイル(ファイル名は任意)
これをバックアップ保存先フォルダに配置する
1.バックアップ命令文(SQL):backup.sql
BACKUP DATABASE testdb TO DISK='C:\sqlback\testdb.bak' WITH INIT
GO
※解説
@DISK=''でバックアップファイルを指定したパスに保存
AWITH INIT の文が無いと、バックアップデータが毎回追加されてtestdb.bakが大きくなってしまう。この文を付けることで上書きモードになる。
2.バッチファイル(BAT):backup.bat
sqlcmd -S .\SQLEXPRESS -U sa -P pass -i C:\sqlback\backup.sql > C:\sqlback\backup.log
※解説
sqlcmdの詳細はサイトで確認
@-S はサーバー名(インスタンス名含)
A-U はログイン名
B-P はログインパスワード
注:-U -P はSQLServer認証の場合に必要だが、Windows認証の場合は -E だけになる(下参照)
例:sqlcmd -S .\SQLEXPRESS -E -i C:\sqlback\backup.sql
C-i は実行するSQLのファイル名
D > 以下は無くても良いがログを残したい時に使う
あとはWindowsのタスクでバッチファイルbackup.batを指定すれば良い。
今回は毎日指定された時刻に行う予定で作成したので、前日以前のバックアップは保存されない。
1週間分バックアップを保存したい場合には、曜日毎に別々のSQLとバッチファイルを用意してタスクに登録すれば良い。
2009年03月25日
SQL Server Browserの使い道
SQLServer2005Expressをインストールすると本体(SQLServer)と一緒にSQLServerBrowserがサービスに組み込まれるが、これまで全く使っていなかった。
既定でも無効になっているのでどういう使い道があるのか知らなかった。
たまたま仕事でAccessデータベースをSQLServerに移行させる必要があり、サーバ機を用意するほどの予算もないので既存のXPマシンにExpress版をインストールして使うことになったとき、ODBC経由でネットワーク接続しようとしてODBCデータソースが作成できなかったことから調べていって判ったことである。
通常SQLServerのTCPポートは1433番固定なのだが、Express版は動的ポートが採用されている(今回初めて知った)。
そこでリモートから接続しようとするときどのポートに接続したらいいのか調べる必要があるが、それを行ってくれるのがSQL Server Browserというのである。
またXP(sp2適用)ではファイヤーウォールが有効になっているため、外部からSQLServerサービスとSQLServerBrowserサービスに接続するには、必要なポートを開ける必要がある。
実のところこれまではデータベースサーバとしてWindowsServer2003を使っていた。2003ではファイヤーウォールは既定では無効になっていたので意識する必要がなかったのだ。
固定ポートを使用していればファイヤーウォールの設定はそのポート番号を許可させるだけでよいが動的ポートの場合にはそれができない。
そこでサービスプログラム本体(sqlserver.exe)を許可させたあと、SQLServerBrowserサービスを使ってインスタンス名からポート番号を探る必要がるので、こちらも許可させる必要がある。なお、こちらはUDPの1434番(固定)を指定するか、sqlbrowser.exeを指定する。
詳しいことは下のサイトに紹介されている。
http://www.atmarkit.co.jp/fdotnet/dotnettips/545sqlsvrnet/sqlsvrnet.html
なお、余談だが今回Access2000のデータベースをSQLServer2005Express版に移行するのにAccess2000のアップサイジングウィザードを使ったところ「オーバーフロー」のエラーが発生した。この原因を調べたところAccess2000のバグのようでOffice2000ServicePack3を当てることで正常に変換できた。
既定でも無効になっているのでどういう使い道があるのか知らなかった。
たまたま仕事でAccessデータベースをSQLServerに移行させる必要があり、サーバ機を用意するほどの予算もないので既存のXPマシンにExpress版をインストールして使うことになったとき、ODBC経由でネットワーク接続しようとしてODBCデータソースが作成できなかったことから調べていって判ったことである。
通常SQLServerのTCPポートは1433番固定なのだが、Express版は動的ポートが採用されている(今回初めて知った)。
そこでリモートから接続しようとするときどのポートに接続したらいいのか調べる必要があるが、それを行ってくれるのがSQL Server Browserというのである。
またXP(sp2適用)ではファイヤーウォールが有効になっているため、外部からSQLServerサービスとSQLServerBrowserサービスに接続するには、必要なポートを開ける必要がある。
実のところこれまではデータベースサーバとしてWindowsServer2003を使っていた。2003ではファイヤーウォールは既定では無効になっていたので意識する必要がなかったのだ。
固定ポートを使用していればファイヤーウォールの設定はそのポート番号を許可させるだけでよいが動的ポートの場合にはそれができない。
そこでサービスプログラム本体(sqlserver.exe)を許可させたあと、SQLServerBrowserサービスを使ってインスタンス名からポート番号を探る必要がるので、こちらも許可させる必要がある。なお、こちらはUDPの1434番(固定)を指定するか、sqlbrowser.exeを指定する。
詳しいことは下のサイトに紹介されている。
http://www.atmarkit.co.jp/fdotnet/dotnettips/545sqlsvrnet/sqlsvrnet.html
なお、余談だが今回Access2000のデータベースをSQLServer2005Express版に移行するのにAccess2000のアップサイジングウィザードを使ったところ「オーバーフロー」のエラーが発生した。この原因を調べたところAccess2000のバグのようでOffice2000ServicePack3を当てることで正常に変換できた。
2008年10月27日
ログオン後に自動起動させる方法で一番早いのはどれか?
TOP (100) PERCENT と TOP 100 PERCENT
開発環境ではSQLServer2005を使っていた。
客先の実行環境ではSQLServer2000を使っている。
客先でデータベースを構築しているとき、テーブルの作成は問題無く出来たがViewの作成でエラーが起きた。
SQLServer2000のクエリアナライザからView作成のSQL文を実行させると
「行3:'(' の近くに無効な構文があります。」と出てViewの作成に失敗する。
一体どこが問題なのかさっぱり判らなかったのだが3行目にある
SELECT TOP (100) PERCENT ...... の100のカッコを外したら
正常に作成された。
SQLSever2005のManagement Studioが作ったSQL文には自動でカッコ付きになっているが、これが原因だった。大した違いはないと思うが2000には分からないらしい。
客先の実行環境ではSQLServer2000を使っている。
客先でデータベースを構築しているとき、テーブルの作成は問題無く出来たがViewの作成でエラーが起きた。
SQLServer2000のクエリアナライザからView作成のSQL文を実行させると
「行3:'(' の近くに無効な構文があります。」と出てViewの作成に失敗する。
一体どこが問題なのかさっぱり判らなかったのだが3行目にある
SELECT TOP (100) PERCENT ...... の100のカッコを外したら
正常に作成された。
SQLSever2005のManagement Studioが作ったSQL文には自動でカッコ付きになっているが、これが原因だった。大した違いはないと思うが2000には分からないらしい。
2008年07月04日
問題を解決するための一つの工夫?
打ち合わせに行ってきた。
ユーザーの要望を聞き、現場を見、その都度思い出してはこうしたい、ああしたいと言うユーザーの話を聞き、とりあえずメモっておくが、何だかとんでもなく面倒な仕様に感じてくる。
聞きながら「きっと見積額が相当になるだろうなぁ」と思う。
会社に戻り、がっくり疲れて打ち合わせ内容をまとめるのも面倒になって、気晴らしをしているうちに時間がきて何もせずに仕事を終える。
次の打ち合わせまで一週間あるので、まだいいやと思って他の仕事をしているうちに数日何もそのことは考えずに過ごした。
そろそろまとめなければと思い、どうやるかを考えてみると、あれ?意外と見通しが立つ仕様になった。
最初の時に感じた面倒臭さはない。知らない間に余計な情報が消えて(忘れただけかも)主題だけが残った結果みたいだ。疑問点も具体化して次回の打ち合わせにちょうど良い。
楽して問題が解決するなんて!これって無意識の脳の働きなんだろうか?
ユーザーの要望を聞き、現場を見、その都度思い出してはこうしたい、ああしたいと言うユーザーの話を聞き、とりあえずメモっておくが、何だかとんでもなく面倒な仕様に感じてくる。
聞きながら「きっと見積額が相当になるだろうなぁ」と思う。
会社に戻り、がっくり疲れて打ち合わせ内容をまとめるのも面倒になって、気晴らしをしているうちに時間がきて何もせずに仕事を終える。
次の打ち合わせまで一週間あるので、まだいいやと思って他の仕事をしているうちに数日何もそのことは考えずに過ごした。
そろそろまとめなければと思い、どうやるかを考えてみると、あれ?意外と見通しが立つ仕様になった。
最初の時に感じた面倒臭さはない。知らない間に余計な情報が消えて(忘れただけかも)主題だけが残った結果みたいだ。疑問点も具体化して次回の打ち合わせにちょうど良い。
楽して問題が解決するなんて!これって無意識の脳の働きなんだろうか?
2007年07月27日
SQL Server 2005 デフォルトではネットワーク接続が無効
新しいシステムを構築するためにSQLServer2005 DeveloperEditionをインストールし、サンプルプログラムから接続しようとしたところ、「SQL Server の既定の設定がリモート接続を許可しないようになっていることがエラーの原因である可能性があります....」というようなエラーが出た。
調べてみるとSQLServer2005ではデフォルトでネットワーク接続が無効になっているらしい。はて?Express版を以前使ったときも同じエラーがしたかな?と思ったが随分と昔のことなので思い出せない(^^;
最近のMicrosoft製品は「デフォルトセキュア」つまり、既定ではセキュリティが最も厳しい状態(安全性が最も高い状態)でセットアップされるようである。
ここに参考資料があるので一読してみよう。
http://www.microsoft.com/japan/sql/ssj/tips/01.mspx
続きを読む
調べてみるとSQLServer2005ではデフォルトでネットワーク接続が無効になっているらしい。はて?Express版を以前使ったときも同じエラーがしたかな?と思ったが随分と昔のことなので思い出せない(^^;
最近のMicrosoft製品は「デフォルトセキュア」つまり、既定ではセキュリティが最も厳しい状態(安全性が最も高い状態)でセットアップされるようである。
ここに参考資料があるので一読してみよう。
http://www.microsoft.com/japan/sql/ssj/tips/01.mspx
続きを読む
2007年05月10日
Microsoft SQL Server Management Studio Expressではインポート・エクスポートの機能が無い
SQLServer2005 Express Edition はかつてMSDE(Microsoft SQL Server Desktop Engine)と呼ばれていた無償のデータベースソフトの後継で.NET(2.0)対応版であるが、MSDEには無かった管理ツール「Microsoft SQL Server Management Studio Express」が無償でダウンロードして使える。これは大変うれしいものだった。
ところが、やはり無償ということで製品版と違い、いくつかの機能が削られている。その一つがインポート・エクスポート機能である。
開発の途中でそれに気が付き、今更のDeveloperEditionに置き換えるのも面倒なのでManagement StudioだけをDeveloperEditionからインストールすることにした。
何とかインストールできたが、WindowsUpdateを行うとSQLServer2005のServicePack2が適用される。既にExpress版のSP2を適用済みなのだが、ツールだけでも別物と解釈されるらしい。
データベース本体まで影響があるのかと心配したが別に問題なく動いている。
ところが、やはり無償ということで製品版と違い、いくつかの機能が削られている。その一つがインポート・エクスポート機能である。
開発の途中でそれに気が付き、今更のDeveloperEditionに置き換えるのも面倒なのでManagement StudioだけをDeveloperEditionからインストールすることにした。
何とかインストールできたが、WindowsUpdateを行うとSQLServer2005のServicePack2が適用される。既にExpress版のSP2を適用済みなのだが、ツールだけでも別物と解釈されるらしい。
データベース本体まで影響があるのかと心配したが別に問題なく動いている。
2006年11月20日
VistaではMSDEも使えない
Vistaでは無償データベースのMSDEが非対応だという。そして「SQLServer2005Express」がそれに代わる。
MSDE1.0(SQLServer7相当)、MSDE2000(SQLServer2000相当)は、自分も利用したがいろんなアプリで利用されている。無償だから文句は言えない(?)けど、データベース本体の移行はさほど難しくもないが、アプリの方が先の開発ツールのVistaの対応状況との兼ね合いでそのまま使えない可能性がある。
MSDEはGUIのマネージャーが付いてないため何かと不便だったが、SQLServer2005Expressには別途無償の「SQL Server Management Studio Express」 をダウンロードして使えるのがかなり嬉しい。
ダウンロード先は下を参照
http://www.microsoft.com/downloads/details.aspx?familyid=C243A5AE-4BD1-4E3D-94B8-5A0F62BF7796&displaylang=ja
どう転んでも仕事は増えそうだ(^^;
MSDE1.0(SQLServer7相当)、MSDE2000(SQLServer2000相当)は、自分も利用したがいろんなアプリで利用されている。無償だから文句は言えない(?)けど、データベース本体の移行はさほど難しくもないが、アプリの方が先の開発ツールのVistaの対応状況との兼ね合いでそのまま使えない可能性がある。
MSDEはGUIのマネージャーが付いてないため何かと不便だったが、SQLServer2005Expressには別途無償の「SQL Server Management Studio Express」 をダウンロードして使えるのがかなり嬉しい。
ダウンロード先は下を参照
http://www.microsoft.com/downloads/details.aspx?familyid=C243A5AE-4BD1-4E3D-94B8-5A0F62BF7796&displaylang=ja
どう転んでも仕事は増えそうだ(^^;
2006年07月19日
VirtualPC2004が無償に
先週のことで既にご存知の方も多いかと思いますが、開発者にとって大変便利なツール「VirtualPC」が無償になりました。次期バージョンも無償で公開される予定らしいです。
窓の杜「MS、仮想PC作成・実行ソフト「Virtual PC 2004」日本語版を無償公開」
このVirtualPCの便利なことは「なっちゃんのプログラマーズ日記」の方にかつて書いたのでご存知ない方はご参考に。
窓の杜「MS、仮想PC作成・実行ソフト「Virtual PC 2004」日本語版を無償公開」
このVirtualPCの便利なことは「なっちゃんのプログラマーズ日記」の方にかつて書いたのでご存知ない方はご参考に。


