2010年06月28日

Crystal Reports for Visual Studio 2010 Beta版は日本語環境では使えない

VS2008まではProfessional版以降ではCrystalReportsは標準でバンドルされていたが、VS2010になって別サイトからダウンロードするようになった(下図)

Crystal Reportsのダウンロード

しかし、まだベータ版ということになっている。そのためかダウンロードした「cr4vs2010.exe」をインストールしてもrptファイルが作成されず、最初と同じサイトへのリンクファイル(mht)になってしまう。(下図)

rptファイルが作成されない

フォーラム(英語)をネット翻訳で調べたところ、どうやらベータ版は英語仕様でしか動かないらしい。(確かに解凍されたセットアップのlangsフォルダにはenフォルダしか無かった)

Crystal Reports for Visual Studio 2010 Beta版は英語版なら起動する

正規版で各国語対応になるまで待てということらしい。

※ダウンロードサイトには正規版の公開は7月予定と記載されていた。

2010年7月6日現在、以下のように変更されていた。(訳はネット翻訳による)
「ベータ1は現在利用可能です。ベータ2は8月上旬、製品版は11月の予定です。」

ベータ2に日本語版が含まれていれば良いが、無ければVS2008で開発しないと納期に間に合わないかも・・・・。続きを読む
posted by なっちゃん at 15:31| 静岡 🌁| Comment(0) | TrackBack(0) | VB.NET Tips | このブログの読者になる | 更新情報をチェックする

2010年06月22日

フォームデザイン時の補助線が消えた

Visual Basic 2005(2008,2010)になって、Windowsアプリのフォーム作成時にコントロールを配置する時に補助線が出るようになった(下図)。

デザイン時の補助線

が、いつのまにかそれが出なくなってしまった。
どこをどういじったか忘れてしまったが、ようやく設定場所を見つけた。

「ツール」メニューから「オプション」を開く。
「Windowsフォームデザイナー」の「全般」の「レイアウト設定」で
[LayoutMode]をSnapLinesに、[ShowGrid]をTrueにすれば良い。(下図)
注意:開いてあるフォームを一度閉じないと反映されない。

オプションの設定
posted by なっちゃん at 14:11| 静岡 ☁| Comment(0) | TrackBack(0) | VB.NET Tips | このブログの読者になる | 更新情報をチェックする

2010年06月10日

SQL Server 2008 の教科書

まさに「教科書」の名に相応しい充実した内容の本である。

店頭で立ち読みしたとき、本来の目次とは別に、ヒントやコラムなどのTips集にも目次があるのに驚いたが、その量と質は類書を圧倒するもので、著者達が運用や開発の現場でどれだけ豊富な経験を積んでいるかが判る。

内容としては初心者向けだが、これまでに幾つものDBを運用開発してきた経験者(私)でも案外知らない、知っていても理論的には把握していなかった正規化のことやパフォーマンスに影響するクエリーの使い方、トランザクションとロック等、目から鱗の内容が至る所(ヒントとコラム)に散りばめられている。
また、これまで何のために使うのか判らなかったプロファイラや利用状況モニタなどのツールも具体例で使い方を知ることができる。

SQLServer2008とはあるがSQLServer2000/2005やOracleとの違いも詳しく書かれているので「SQLServer全利用者ための教科書」と言って良いだろう。帯に「マイクロソフト SQL Server 製品担当者 推薦!」とあるが、そう言わしめるだけの内容が確かにこの本にはある。

Visual Studio等の具体的なサンプルソースはあまりない、それらは別途、開発言語向けの書籍で学習したほうが良いだろう。ただ、この本の価値はそれらの言語で開発する際に注意すべきSQLServerの仕様(仕組み)を教えてくれる。これを知っているのと知らないのとではパフォーマンスやデバッグ、トラブルシューティングに間違いなく差が出るだろう。

SQL Server 2008の教科書―基礎から実践まで学べるSQL Server 2008の教科書―基礎から実践まで学べる

実践Microsoft SQL Server 2008開発入門 (マイクロソフト公式解説書) アドバンストMicrosoft SQL Server 2008構築・管理 (マイクロソフトコンサルティングサービステクニカルリファレンスシリーズ) ひと目でわかるMicrosoft SQL Server 2008 (マイクロソフト公式解説書) MCP教科書 SQL Server 2008 (試験番号:70-432) 実践Microsoft SQL Server 2008 レポーティング入門 (マイクロソフト公式解説書)

by G-Tools


posted by なっちゃん at 14:05| 静岡 ☁| Comment(0) | TrackBack(0) | ETC | このブログの読者になる | 更新情報をチェックする

2010年03月09日

プログラムから圧縮ファイル(LZH,ZIP)を解凍する一番手軽な方法

自前で解凍ルーチンを作るのは大変である。dllを使うのも結構面倒である。
そこでフリーソフトを使って簡単に行う方法を紹介する。

ソフトは「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


posted by なっちゃん at 16:23| 静岡 ☔| Comment(1) | TrackBack(0) | ETC | このブログの読者になる | 更新情報をチェックする

2010年03月08日

WebBrowserの印刷プレビュー画面が異様に小さい

WindowsアプリでHTMLを表示するのにWebBrowserコントロールが使えるが、これをデザイン時にフォームに配置した場合、印刷プレビューは特に問題なく表示するのだが、コードで動的に作成した場合、印刷プレビュー画面が異様に小さくなる(下図参照)

異様に小さい印刷プレビュー

これを何とかしようとWidth,Heightプロパティを指定してみたが一向に直らない。
あれこれ調べまわった挙句、ようやく判った。

デザイン時にコントロールを貼り付けた場合、印刷プレビュー画面は元(親)のフォームと同じサイズで表示される。これがミソだ。親コンテナと同じサイズで表示される仕様らしい。

というわけで、Parentプロパティに親フォーム名または単にMeを指定すれば良いのだ。

WebBrowser.Parent = Me
WebBrowser.ShowPrintPreviewDialog()
posted by なっちゃん at 17:28| 静岡 ☔| Comment(0) | TrackBack(0) | VB.NET Tips | このブログの読者になる | 更新情報をチェックする

2010年03月06日

メールの日付ヘッダの相互変換

メールの送受信プログラムを作る時、メール日付の変換に苦労した。
ヘッダの日付情報は文字列であり、それをDate(DateTime)型に変換するにはどうすれば良いのか。また現在日時(Date型)をヘッダ書式に変換するにはどうすれば良いのか。
以下にまとめておく。

'//// メール形式の日付を日付型(ローカル時間)に変換 ////
Public Function DateHeader_ToDate(ByVal strdate As String) As Date
'-----------------------------------------------------
' 引数:strdate メールヘッダの日付文字列
'(書式:曜日, 日 月 年 時:分:秒 TimeZone)
'-----------------------------------------------------
Dim wkArray() As String 'ヘッダの文字列の配列
Dim in_date As Date 'ヘッダの日時
Dim interval_hour As Single 'ヘッダのローカル(日本)時間との時差
'半角スペースが2個つながる部分は1つにする
strdate = Replace(strdate, Chr(32) & Chr(32), Chr(32))
'改行以降は削除
If InStr(strdate, Chr(10)) > 0 Then
strdate = Left(strdate, InStr(strdate, Chr(10)))
End If
'半角スペースをキーに配列に保存
wkarray = Split(strdate, Chr(32))
'ヘッダ日時を取得
Dim utcOffset As TimeSpan = TimeZone.CurrentTimeZone.GetUtcOffset(Now)
Select Case wkarray.Length
Case 6, 7 '曜日を含んだ日付文字列の場合
If InStr(wkarray(0), ",") > 0 Then
in_date = Format(wkarray(1) & "-" & _
wkarray(2) & "-" & _
wkarray(3) & " " & _
wkarray(4))
'ローカル(日本)時間との時差を取得
interval_hour = utcOffset.TotalHours - CInt(wkarray(5)) * 0.01
End If
Case 5 '曜日が無い日付文字列の場合
If InStr(wkarray(0), ",") = 0 Then
in_date = Format(wkarray(0) & "-" & _
wkarray(1) & "-" & _
wkarray(2) & " " & _
wkarray(3))
'ローカル(日本)時間との時差を取得
interval_hour = utcOffset.TotalHours - CInt(wkarray(4)) * 0.01
End If
End Select
'ローカル時間に修正
Return DateAdd(DateInterval.Hour, interval_hour, in_date)
End Function
 
'//// 日付型データをメール形式に変換 ///////
Public Function Date_ToDateHeader(ByVal d As Date) As String
'd : 対象日時
'-------------
'UTC(世界協定時刻)とのオフセットを求める
Dim utcOffset As TimeSpan = TimeZone.CurrentTimeZone.GetUtcOffset(Now)
'オフセットを分数に変更
Dim Jisa As Long = utcOffset.TotalMinutes
'オフセット時間は以下のようにしても求められる
'Dim Jisa As Long = DateDiff(DateInterval.Minute, d.ToUniversalTime, d)
'オフセットを「+0900」書式に変換
Dim strJisa As String = IIf(Math.Sign(Jisa) >= 0, " +", " -") & _
(Math.Abs(Jisa) \ 60).ToString("00") & _
(Math.Abs(Jisa) Mod 60).ToString("00")
'メール日付に整形(英語表記のためカルチャーを変更)
Dim cultureUS As New System.Globalization.CultureInfo("en-us")
Return d.ToString("ddd, dd MMM yyyy HH:mm:ss", cultureUS) & strJisa
End Function
posted by なっちゃん at 10:58| 静岡 ☁| Comment(0) | TrackBack(0) | VB.NET Tips | このブログの読者になる | 更新情報をチェックする

2010年02月22日

ListViewコントロールで各列ヘッダをクリックしてソートさせる

ListViewの列ヘッダをクリックしてソートさせる方法はヘルプにも書かれているが、クリックする度に昇順・降順を切り替える方法が書かれていない。そこでいろいろ調べてようやく見つけた方法を紹介する。

'フォームのカラムクリックイベント
Private Sub ListView1_ColumnClick(ByVal sender As Object, _
ByVal e As System.Windows.Forms.ColumnClickEventArgs) _
Handles ListView1.ColumnClick
Static no(5) As Integer '列のソート状態保持用
If no(e.Column) = 0 Then
'初回または昇順
Me.ListView1.ListViewItemSorter = New ListViewItemComparer(e.Column, 0)
no(e.Column) = 1 '次回は降順
Else
'降順
Me.ListView1.ListViewItemSorter = New ListViewItemComparer(e.Column, 1)
no(e.Column) = 0 '次回は昇順
End If
End Sub

'ListViewItemComparerクラスをフォームコードに追加
Class ListViewItemComparer
Implements IComparer

Private col As Integer
Private sort As Integer

Public Sub New()
col = 0
sort = 0
End Sub

Public Sub New(ByVal column As Integer, ByVal sortflg As Integer)
'column : 列番号
'sortflg : ソート(0=昇順,1=降順)
'--------------------------------
col = column
sort = sortflg
End Sub

Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _
Implements IComparer.Compare
If sort = 0 Then
'昇順
Return [String].Compare(CType(x, ListViewItem).SubItems(col).Text, _
CType(y, ListViewItem).SubItems(col).Text)
Else
'降順
Return -[String].Compare(CType(x, ListViewItem).SubItems(col).Text, _
CType(y, ListViewItem).SubItems(col).Text)
End If
End Function
End Class

降順にするには マイナスを付けるだけだったとは知らなかった。
posted by なっちゃん at 16:17| 静岡 ☀| Comment(1) | TrackBack(0) | VB.NET Tips | このブログの読者になる | 更新情報をチェックする

2010年02月06日

VB6(VBA)とVB.NET(VB2005,2008)の色データの違い

VB2008でExcelの表を作成するプログラムを作った時、セルの色を指定するところでエラーが起きた。

原因はVB6やVBA(Excel)が色のデータをRGB(赤,緑,青)の3色(3×8)24bitで表現しているのに対し、.NETではARGB(RGBとAlpha(透過)値)の4×8=32bitで表現するようになったためだ。

これらを相互に変換するためにSystem.Drawing.ColorTranslatorクラスにある関数を使う。

・ARGB(Color構造体)をRGBにする
ColorTranslator.ToOle(Color.Red)
ColorTranslator.ToWin32(Color.Red)

・逆にRGBデータをARGB(Color構造体)に変換するには
ColorTranslator.FromOle(RGB(255,255,0))
ColorTranslator.FromWin32(RGB(255,255,0))

・ColorTranslatorにはHTMLで使うカラー形式を変換するメソッドもある
ColorTranslator.ToHtml(Color.Red)
ColorTranslator.FromHtml("#FF00FF")

その後RGBで指定する場合ならColor構造体のメンバーにあるFromArgbメソッドでも可能なことが分かった。
RGBデータでColor(ARGB)指定するには Color.FromArgb(255,255,0)とするだけでよい。この場合アルファ値は暗黙的に 255 (完全不透明) になる。
posted by なっちゃん at 13:33| 静岡 ☀| Comment(0) | TrackBack(0) | VB vs VB.NET | このブログの読者になる | 更新情報をチェックする

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: リテラルが書式文字列と一致しません」エラーが発生する
posted by なっちゃん at 11:31| 静岡 ☁| Comment(0) | TrackBack(0) | ETC | このブログの読者になる | 更新情報をチェックする

2010年01月26日

コントロールの描画エラー

久しぶりに昔のプログラムを修正することになりプロジェクトを開いたところ画面のコントロールに下図のようなエラーが表示された。
「コントロールの描画エラー−HyperLink1 ハンドルされていない例外が発生しました。オブジェクト参照がオブジェクトインスタンスに設定されていません。」

コントロールの描画エラー

HyperLinkを貼り直してもエラーが消えない。イメージファイルを指定しなければ問題ないし、またエラーしてもビルドは正常に行える。

以前はちゃんと開いていたのに何か環境が変わってしまったのかと思い調べてみたところどうやらMicrosoftのWindowsUpdateで更新した結果このような現象が起きることが判った。
パッチも公開されているのでそれを適用したところ、無事解消された。

パッチの提供場所
https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=18157

パッチ画面
posted by なっちゃん at 12:28| 静岡 ☁| Comment(0) | TrackBack(0) | ASP.NET Tips | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。