2009年10月29日


SMO : Microsoft のリンクと VB.net でのバックアップ例

SQL-DMO の SMO へのマッピング

Visual Studio .NET で Visual Basic SMO プロジェクトを作成する方法

1) Microsoft.SqlServer.ConnectionInfo
2) Microsoft.SqlServer.Smo
3) Microsoft.SqlServer.SqlEnum

( ファイルの場所の例 : C:\Program Files\Microsoft SQL Server\90\SDK\Assemblies )
' サーバー
Dim srv As Server
' インスタンス
srv = New Server()

' サーバーインスタンスの情報
srv.ConnectionContext.AutoDisconnectMode = AutoDisconnectMode.NoAutoDisconnect
srv.ConnectionContext.LoginSecure = False
srv.ConnectionContext.Login = "sa"
srv.ConnectionContext.Password = "trustno1"
' 接続
srv.ConnectionContext.Connect()

' バージョンの表示
Console.WriteLine(srv.Information.Version)

' デバイスオブジェクト
Dim backup_dev As BackupDevice = New BackupDevice()

' サーバーと関係付ける
backup_dev.Parent = srv
' 論理名を設定
backup_dev.Name = "BACKUP"
' 装置のタイプ
backup_dev.BackupDeviceType = BackupDeviceType.Disk
' 実際の場所( バックアップするまで作成されません )
backup_dev.PhysicalLocation = "c:\tmp\backup.dmp"
Try
	' 既に存在する場合はそのまま使う
	backup_dev.Create()
Catch ex As Exception
End Try


' バックアップオブジェクト
Dim dbBackup As Backup = New Backup()

' デフォルトは Database
dbBackup.Action = BackupActionType.Database
dbBackup.Database = "lightbox"
dbBackup.Devices.AddDevice("BACKUP", DeviceType.LogicalDevice)
dbBackup.BackupSetName = "BACKUP_lightbox"

' バックアップ開始
dbBackup.SqlBackup(srv)

' 接続解除
srv.ConnectionContext.Disconnect()

Console.WriteLine("バックアップが終了しました")



posted by at 2009-10-29 14:46 | VB.NET Framework2.0 | このブログの読者になる | 更新情報をチェックする

VB.net : LboxGrid : 列にボタンを実装する

Lboxgrid_den_btn
ボタン用のイベントは内部で定義しているユーザイベントです
' ************************************************
' カラム追加
' ************************************************
Me.LboxGrid1.AddColumn("COL_1", "コード")
Me.LboxGrid1.SetColumnWidth("COL_1", 40)

Me.LboxGrid1.AddColumn("COL_REF", "", lightbox.LboxColumnType.LboxColumnType_Button)
Me.LboxGrid1.Columns(1).DefaultCellStyle.BackColor = Color.Silver

Me.LboxGrid1.AddColumn("COL_2", "商品名")
Me.LboxGrid1.SetColumnWidth("COL_2", 150)
Me.LboxGrid1.Columns("COL_2").ReadOnly = True   ' この列は入力不可

Me.LboxGrid1.AddColumn("COL_3", "数量")
Me.LboxGrid1.SetColumnWidth("COL_3", 50)

' 右寄せにする為、ヘッダとカラム用のスタイルを作成する
Dim MiddleRight As DataGridViewCellStyle = New DataGridViewCellStyle
MiddleRight.Alignment = DataGridViewContentAlignment.MiddleRight
Me.LboxGrid1.Columns("COL_3").HeaderCell.Style = MiddleRight
Me.LboxGrid1.Columns("COL_3").DefaultCellStyle = MiddleRight

Me.LboxGrid1.AddColumn("COL_4", "単価")
Me.LboxGrid1.SetColumnWidth("COL_4", 50)
Me.LboxGrid1.Columns("COL_4").ReadOnly = True   ' この列は入力不可
Me.LboxGrid1.Columns("COL_4").HeaderCell.Style = MiddleRight
Me.LboxGrid1.Columns("COL_4").DefaultCellStyle = MiddleRight

Me.LboxGrid1.AddColumn("COL_5", "金額")
Me.LboxGrid1.SetColumnWidth("COL_5", 50)
Me.LboxGrid1.Columns("COL_5").HeaderCell.Style = MiddleRight
Me.LboxGrid1.Columns("COL_5").DefaultCellStyle = MiddleRight

' 行を作成
Dim I As Integer
For I = 1 To 6
	Me.LboxGrid1.AddRow()
	Me.LboxGrid1.SetColumnText("COL_1", "")
	Me.LboxGrid1.SetColumnText("COL_2", "")
	Me.LboxGrid1.SetColumnText("COL_3", "")
	Me.LboxGrid1.SetColumnText("COL_4", "")
	Me.LboxGrid1.SetColumnText("COL_5", "")
	Me.LboxGrid1.SetColumnText("COL_REF", "参照")
Next

' 編集対象フォーカスの設定
Me.LboxGrid1.SetFocusCell(0, 0)
' 初期の編集可能なセルフォーカスの設定
Me.LboxGrid1.EditingControl.Select()
Private Sub LboxGrid1_CellClickButton(ByVal sender As System.Windows.Forms.DataGridViewCell, _
ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles LboxGrid1.CellClickButton

	Dim nCol As Integer = e.ColumnIndex
	Dim nRow As Integer = e.RowIndex

	If Me.LboxGrid1.GetColumnName(nCol) = "COL_REF" Then
		MessageBox.Show(nRow & "行目のボタン")
	End If

End Sub
関連する記事
伝票入力に最適化した DataGridView


posted by at 2009-10-29 14:29 | VB.NET LboxGrid | このブログの読者になる | 更新情報をチェックする

VB.net : LboxGrid+DB : 簡単な問い合わせ

ここで使用しているのは、SQLServer ですが、MDB や ODBC 用のメソッドがあります

タイアログに LboxGrid を貼り付けて、プロパティで接続情報をセットし、
初期化時に、select 文を使ってメソッドを呼び出すだけです。
select 文から自動的に列と行が作成されます
Lboxgrid_db

Lboxgrid_db_2
Private Sub Dialog1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load

	Dim Query As String = "select 得意先コード as コード,得意先名 from 得意先マスタ"

	Me.LboxGrid1.LoadSqlServer(Query)

End Sub

Private Sub LboxGrid1_CellDoubleClick(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles LboxGrid1.CellDoubleClick

	Dim nRow As Integer = e.RowIndex

	MessageBox.Show(Me.LboxGrid1.GetColumnText(nRow, "コード") & _
	"|" & Me.LboxGrid1.GetColumnText(nRow, "得意先名"))

End Sub

関連する記事
ダイアログの呼び出しとオーナーの参照


posted by at 2009-10-29 13:42 | VB.NET LboxGrid | このブログの読者になる | 更新情報をチェックする

VB.net : フォームの「閉じるボタン」を無効にする

実装時の注意事項
Form1 のクラス内に直接記述してもいいですが、Partial で別ファイルに記述しています。
「閉じるボタン」を無効にしてしまうと、終了できなくなるので、「ESC」で終了できる
ように OnKeyDown イベントもオーバーライドしています。
ただ、デフォルトではウインドウのキーイベントが有効では無いので、OnLoad イベント
をオーバーライドして KeyPreview を True にしておきます

ESC キーを押した時に発生する Beep 音がメッセージボックスの Beep 音と重なって
うるさく感じる場合は、Form1 に KeyPress イベントを作成して、

If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Escape) Then
	e.Handled = True
End If

とすると1回になります
Partial Class Form1

	' ******************************************************
	' 閉じるボタンを無効にする
	' ******************************************************
	Protected Overrides Sub WndProc( _
	 ByRef message As System.Windows.Forms.Message)

		' WinUser.h
		' #define WM_SYSCOMMAND		0x0112
		' #define SC_CLOSE			0xF060

		If message.Msg = &H112 And message.WParam.ToInt32() = &HF060 Then
			Return
		End If

		MyBase.WndProc(message)

	End Sub

	' ******************************************************
	' KeyPress での処理を有効にする為の割り込み
	' ******************************************************
	Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)

		MyBase.OnLoad(e)
		MyBase.KeyPreview = True

	End Sub

	' ******************************************************
	' ESC による終了処理
	' ******************************************************
	Protected Overrides Sub OnKeyDown(ByVal e As System.Windows.Forms.KeyEventArgs)

		MyBase.OnKeyDown(e)

		If e.KeyCode = Keys.Escape Then
			If MessageBox.Show( _
			 "終了しますか?", _
			 "ESC", _
			 MessageBoxButtons.YesNo, MessageBoxIcon.Question _
			 ) = Windows.Forms.DialogResult.Yes Then
				Application.Exit()
			End If

		End If

	End Sub

End Class



posted by at 2009-10-29 12:04 | VB.NET Framework2.0 | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

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

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

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

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


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

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

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

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

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