7月によく見られたページのランキングです。
1.[VB.NETde業務アプリ]
2.[VB-Reportのまとめ]@[VB.NETde業務アプリ]
3.[.NET FrameworkのPrintDocumentについてのまとめ]@[VB.NETde業務アプリ]
4.[ADO.NETの基本的なコード:「非接続型アクセス」の接続とデータ更新]@[VB.NETde業務アプリ]
5.[ADO.NETの基本的なコード:「非接続型アクセス」の接続とデータ参照]@[VB.NETde業務アプリ]
6.[帳票印刷について考える]@[VB.NETde業務アプリ]
7.[レコードを登録するコード]@[VB.NETde業務アプリ]
8.[ADO.NETの基本的なコード:トランザクション処理]@[VB.NETde業務アプリ]
9.[DataSet(DataTable)の更新]@[VB.NETde業務アプリ]
10.[UIで共通に使われるコードを作成する]@[VB.NETde業務アプリ]
11.[5月の検索フレーズ]@[VB.NETde業務アプリ]
12.[データベースへのアクセスのクラス]@[VB.NETde業務アプリ]
13.[ADO.NETの基本的なコード:「接続型アクセス」の接続とデータ更新]@[VB.NETde業務アプリ]
14.[プレースホルダ使ってますか?]@[VB.NETde業務アプリ]
15.[ADO.NETの基本的なコード:「接続型アクセス」の接続とデータ参照]@[VB.NETde業務アプリ]
この記事の全文を読む....
ADO.NETの基本的なコード:「SQLの非同期実行」(その2)
実際にコードを書いてみるとこんな感じ
これで処理が重いSQL文を発行してもUIが固まらなくなった。
この記事の全文を読む....
Dim SqlCommand As New Data.SqlClient.SqlCommand("処理の重いSQL文")
Using asyncDBConnection As New System.Data.SqlClient.SqlConnection(DBConnectionString)
※DBConnectionStringには「async=true」を加えておく
Try
asyncDBConnection.Open()
SqlCommand.Connection = asyncDBConnection
Dim result As IAsyncResult = SqlCommand.BeginExecuteNonQuery()
While Not result.IsCompleted
※SQL文が完了するまで待つループ
Threading.Thread.Sleep(100)
System.Windows.Forms.Application.DoEvents()
※とりあえずDoEventsでUIが固まらないようにするよ
End While
SqlCommand.EndExecuteNonQuery(result)
Catch ex As Exception
MsgBox(ex.Message)
※発生した例外のメッセージを表示してみる
End Try
End Using
書いてみると結構簡単これで処理が重いSQL文を発行してもUIが固まらなくなった。
この記事の全文を読む....
ADO.NETの基本的なコード:「SQLの非同期実行」(その1)
扱うデータ件数が多くなってきたり、複雑な問い合わせをデータベースにさせると、だんだんレスポンスが悪くなり「UIが固まる」ことがよくあります。
それを防ぐためにADO.NET 1.xでは別スレッドで処理したりしていたのですが、ADO.NET 2.0とSqlServerの組み合わせでは「SQLの非同期実行」ができるようになっています。
これを効果的に使うことで、実行時間のかかるクエリを実行するときに「UIが固まる」ことがなくなります。
データの件数が増えてきたり、複雑な問い合わせをさせる機会が増える頻度に合わせて
mdbファイル(デプロイが簡単なので手放せない)→SqlServer
とアップサイズしていく訳ですが、特に「非接続型アクセス」を多用するスタイルでは「UIが固まる」頻度が高いです。
ともかく(応答なし)と出てしまうのはみっともないですし...
そこで本題
今回は「ExecuteNonQuery」の非同期化から
ADO.NET 2.0になって非同期実行用の「BeginExecuteNonQuery」と「EndExecuteNonQuery」が増えています。
「BeginExecuteNonQuery」で実行を開始して「EndExecuteNonQuery」で結果を拾います。
・非同期実行をするためには?
接続文字列に「async=true」を加えて接続すると非同期実行が使えます。
この状態でも同期実行用の「ExecuteNonQuery」は実行できます。(パフォーマンスは落ちますが...)
・非同期実行完了の検出
「BeginExecuteNonQuery」を実行すると結果が出た出ないにかかわらず、すぐに処理が戻ってきます。
ここが同期実行用の「ExecuteNonQuery」との大きな違いです。
同期実行の場合はデータベースの処理が完了しないと処理が戻ってきません。
処理が戻ってこない→UIの処理がされない→「UIが固まる」
となってしまう訳です。
逆に非同期実行ではそのようなことがない代わりにいつデータベース側で処理が終わったかわかりません。
したがって非同期実行完了の検出をしてあげる必要があります。
今回は一番処理が簡単そうな「ポーリング」で処理完了の検出を行うことにしました。
この記事の全文を読む....
それを防ぐためにADO.NET 1.xでは別スレッドで処理したりしていたのですが、ADO.NET 2.0とSqlServerの組み合わせでは「SQLの非同期実行」ができるようになっています。
これを効果的に使うことで、実行時間のかかるクエリを実行するときに「UIが固まる」ことがなくなります。
データの件数が増えてきたり、複雑な問い合わせをさせる機会が増える頻度に合わせて
mdbファイル(デプロイが簡単なので手放せない)→SqlServer
とアップサイズしていく訳ですが、特に「非接続型アクセス」を多用するスタイルでは「UIが固まる」頻度が高いです。
ともかく(応答なし)と出てしまうのはみっともないですし...
そこで本題
今回は「ExecuteNonQuery」の非同期化から
ADO.NET 2.0になって非同期実行用の「BeginExecuteNonQuery」と「EndExecuteNonQuery」が増えています。
「BeginExecuteNonQuery」で実行を開始して「EndExecuteNonQuery」で結果を拾います。
・非同期実行をするためには?
接続文字列に「async=true」を加えて接続すると非同期実行が使えます。
この状態でも同期実行用の「ExecuteNonQuery」は実行できます。(パフォーマンスは落ちますが...)
・非同期実行完了の検出
「BeginExecuteNonQuery」を実行すると結果が出た出ないにかかわらず、すぐに処理が戻ってきます。
ここが同期実行用の「ExecuteNonQuery」との大きな違いです。
同期実行の場合はデータベースの処理が完了しないと処理が戻ってきません。
処理が戻ってこない→UIの処理がされない→「UIが固まる」
となってしまう訳です。
逆に非同期実行ではそのようなことがない代わりにいつデータベース側で処理が終わったかわかりません。
したがって非同期実行完了の検出をしてあげる必要があります。
今回は一番処理が簡単そうな「ポーリング」で処理完了の検出を行うことにしました。
この記事の全文を読む....
合計請求書(請求書の表紙)を印刷する簡単なプログラムに手を入れる(その3)
今回は
・登録した発行履歴を使って入力を簡易化する
です。
入力を簡易化するために(それだけではありませんが..)コード入力という手法がよく使われます。
ただコード決めることさえも面倒くさいことがちょくちょくありませんか?
そんな時には発行履歴を使って入力を簡易化してみましょう。
まず発行履歴を表示、選択するフォームを作成します。

FormにDataGridViewを1つ置いただけです。
「親コンテナにドッキングする」を選択しておきましょう。
これからコードを書いていきます。
まずは「発行履歴を表示、選択するフォーム」側から
つぎに呼び出す側も書いていきます。
今回は請求先の入力欄をダブルクリックすると、選択画面が表示されるようにしました。
これで請求先の入力欄をダブルクリックすると選択画面が表示され、発行履歴の行をダブルクリックすると請求先の入力欄が入力されるようになりました。
この記事の全文を読む....
・登録した発行履歴を使って入力を簡易化する
です。
入力を簡易化するために(それだけではありませんが..)コード入力という手法がよく使われます。
ただコード決めることさえも面倒くさいことがちょくちょくありませんか?
そんな時には発行履歴を使って入力を簡易化してみましょう。
まず発行履歴を表示、選択するフォームを作成します。
FormにDataGridViewを1つ置いただけです。
「親コンテナにドッキングする」を選択しておきましょう。
これからコードを書いていきます。
まずは「発行履歴を表示、選択するフォーム」側から
Public Class Form請求先選択
Dim db As New database.MSAccess.DBAccess
Dim SqlCommand As OleDb.OleDbCommand
Dim dt As DataTable
Private Sub Form_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
Call dgvFill()
End Sub
Private Sub Form_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
AddHandler Me.FormClosing, AddressOf CommonLib.Form_FormClosing
End Sub
Private Sub dgvFill()
SqlCommand = New OleDb.OleDbCommand("SELECT DISTINCT [宛先1行目] & [宛先2行目] AS 宛先, 宛先1行目, 宛先2行目 FROM 発行履歴 ORDER BY [宛先1行目] & [宛先2行目];")
dt = db.getDataTable(SqlCommand)
If IsNothing(dt) Then
Dim ex As Exception = db.SQLException
MsgBox("請求先の取り出しでエラーが発生しました。" & vbNewLine & ex.Message, MsgBoxStyle.Information, "")
Exit Sub
Else
Try
dgv.Columns("宛先1行目").Visible = True
dgv.Columns("宛先2行目").Visible = True
Catch ex As Exception
'なにもしない
End Try
dgv.DataSource = dt.DefaultView
dgv.Columns("宛先1行目").Visible = False
dgv.Columns("宛先2行目").Visible = False
Call dgvFormat()
End If
End Sub
Private Sub dgvFormat()
'dgvの設定
dgv.AllowUserToResizeRows = False
'-----明細行の色を変える-----
dgv.AlternatingRowsDefaultCellStyle.BackColor = Color.LightCyan
'----------------------------
'-----明細行の選択は行選択にする-----
dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect
'----------------------------
'-----列の各設定-----
dgv.Columns("宛先").ReadOnly = True
dgv.Columns("宛先").Width = 330
'--------------------
End Sub
Private Sub dgv_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles dgv.DoubleClick
Try
If dgv.CurrentRow.Index = -1 Then Exit Sub
Catch ex As Exception
Exit Sub
End Try
If dgv.Item(1, dgv.CurrentRow.Index).Value.ToString.Length = 0 Then
Try
frm合計請求書発行.tb1行目.Text = ""
frm合計請求書発行.tb1行目.Visible = False
Catch ex As Exception
'なにもしない
End Try
Else
frm合計請求書発行.tb1行目.Text = dgv.Item(1, dgv.CurrentRow.Index).Value.ToString
frm合計請求書発行.tb1行目.Visible = True
End If
frm合計請求書発行.tb2行目.Text = dgv.Item(2, dgv.CurrentRow.Index).Value.ToString
frm合計請求書発行.tb今回請求金額.Focus()
Me.Close()
End Sub
End Class
つぎに呼び出す側も書いていきます。
今回は請求先の入力欄をダブルクリックすると、選択画面が表示されるようにしました。
Private Sub tb2行目_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles tb2行目.DoubleClick If IsNothing(frm請求先選択) Then frm請求先選択 = New Form請求先選択 frm請求先選択.Owner = Me End If frm請求先選択.Show() End Sub
これで請求先の入力欄をダブルクリックすると選択画面が表示され、発行履歴の行をダブルクリックすると請求先の入力欄が入力されるようになりました。
この記事の全文を読む....
「Academia in 大阪」行ってきました
Infragistics社が主催するセミナー「Academia in 大阪」行ってきました
主な目的は本業で使うためのコンポーネント製品の情報収集だったんですが面白そうな製品群でした。
Silverlight使うと業務アプリケーションも一気に表現力が高まりますね
テクノロジーの採用に対するハードルはすごく下がったような気がします
ただセンスよく見せるために超えなくてはいけないハードルはまだまだ高そうです
残念ながらWindowsForms関連のネタがなかったので、このブログで扱えそうなものはありませんでした
もしWindowsForms関連のセミナーがあれば是非参加したいですね
Demo版ではモチベーション上がらないのでここで取り上げるのはかなり先の話になりそうですが、入手できたらすぐに使えそうなコントロール群がちらほら...
早くAdSenseの収益が貯まらないかなぁ(笑)
セミナー終了後ビンゴ大会があり、何名かの方が実際の製品を獲得されたようです
・[NetAdvantage for Silverlight Data Visualization]×1人
・[アイコン集]×2人位?
・ボールみたいなグッズ+スタバのカード×3人位?
だったかな?
もちろん当たるはずもなく、Demo版のDVDとTシャツをいただいて帰りました
この記事の全文を読む....
主な目的は本業で使うためのコンポーネント製品の情報収集だったんですが面白そうな製品群でした。
Silverlight使うと業務アプリケーションも一気に表現力が高まりますね
テクノロジーの採用に対するハードルはすごく下がったような気がします
ただセンスよく見せるために超えなくてはいけないハードルはまだまだ高そうです
残念ながらWindowsForms関連のネタがなかったので、このブログで扱えそうなものはありませんでした
もしWindowsForms関連のセミナーがあれば是非参加したいですね
Demo版ではモチベーション上がらないのでここで取り上げるのはかなり先の話になりそうですが、入手できたらすぐに使えそうなコントロール群がちらほら...
早くAdSenseの収益が貯まらないかなぁ(笑)
セミナー終了後ビンゴ大会があり、何名かの方が実際の製品を獲得されたようです
・[NetAdvantage for Silverlight Data Visualization]×1人
・[アイコン集]×2人位?
・ボールみたいなグッズ+スタバのカード×3人位?
だったかな?
もちろん当たるはずもなく、Demo版のDVDとTシャツをいただいて帰りました
この記事の全文を読む....
登録:
投稿 (Atom)