2011年7月29日金曜日
2011年7月28日木曜日
→→→正規検索
Dim r As New Regex("<p>(.*?),/p.")
Dim m As Match = r.Match( source )
while m.success
m = m.NextMatch()
End while
----------------------------------------------
Dim r As RegEx
Dim m As Match
r = New RegEx( パターン文字列 )
m = r.Match( 検索対象の文字列 )
while m.success
m = m.NextMatch() '見つかった文字列に対する処理
End while
Dim m As Match = r.Match( source )
while m.success
m = m.NextMatch()
End while
----------------------------------------------
Dim r As RegEx
Dim m As Match
r = New RegEx( パターン文字列 )
m = r.Match( 検索対象の文字列 )
while m.success
m = m.NextMatch() '見つかった文字列に対する処理
End while
123abc1456abc
↓
(23a) (456a)だけを抜く
Dim i As Integer
Dim r As New Regex(" 1(.*?)bc1(.*?)b" )
Dim m As Match( "123abc1456abc" )
While Not ( m.Group(i).Value = "" )
MsgBox( m.Group(i).Value, , i )
i += 1
End While
-----------------------------------------
Dim results(20) As String
Dim i As Integer
Dim j As New Regex( "<.*?""(.*?)"".*?>" )
Dim m As Match
m = r.Match( " <tr></tr><a href=""/news/****/.html""abcdwxyz</tr>\n<tr/>")
While not (m.Group(i).Value = "")
results(i) = m.Groups(i).Value
MsgBox(results(i), , i)
End While
-----------------------------------------
位置を見つける(発見位置が2番目なのに1番目となるから注意)
Dim text1 As String = "テ"
Dim text2 As String = "イクテス"
Dim r As New System.Text.RegularExpressions.Regex(text1)
Dim m As System.Text.RegularExpressions.Match = r.Match( text2 )
If m.Success Then
MsgBox("Found match at position "& m.Index.ToString())
End If
→→→OleDbCommandクラスについて
データソースに対して実行するSQLステートメント・ストアドプロシージャを表す
■OleDbCommandのインスタンスを作成すると
読み書き可能なプロパティが初期値に設定されます
実行するためのメソッド
1.ExecuteReader ------> 行を返すコマンド
2.ExecuteNonQuery ----> SqlのINSERT,DELETE,UPDATE,SETステートメントなどのコマンドを実行
3.ExecuteScalar -------> データベースから単一の値(集計値)を取得する
1.
例 OleDbCommandをOleDbDataAdapterおよびOleDbConnectionと共に使用して
Accessデータベースから行を選択する
Public Sub ReadMyData( ByVal ConnectionString As String)
Dim queryString As String = "SELECT OrderID,CustomID FROM orders"
Using connection As New OleDbConnection( ConnectionString )
Dim command As New OleDbCommand( queryString, connection )
connection.Open()
Dim reader As OleDbDataReader = command.ExexuteReader()
Whlie reader.Read()
..................................................
End While
reader.Close()
End Using
End Sub
2.
OleDbCommand.ExecuteNonQueryメソッド
Dim instance As OleDbCommand
Dim returnValue As Integer
returnValue = instance.ExecuteNonQuery()
ExecuteNonQueryではカタログ操作を実行できる。(データベース構造の照会、オブジェクトの作成)
また、DataSetを使用せずにUpdate,Insert,Deleteステートメントを実行してデータベース内の
データを変更することもできる
例
Private Sub CreateOleDbCommand(ByVal queryString As String,
ByVal connectionString As String)
Using connection As New OleDbConnection( ConnectionString )
connection.Open()
Dim command As New OleDbCommand(queryString, connection )
command.ExecuteNonQuery()
End Using
End Sub
■OleDbCommandのインスタンスを作成すると
読み書き可能なプロパティが初期値に設定されます
実行するためのメソッド
1.ExecuteReader ------> 行を返すコマンド
2.ExecuteNonQuery ----> SqlのINSERT,DELETE,UPDATE,SETステートメントなどのコマンドを実行
3.ExecuteScalar -------> データベースから単一の値(集計値)を取得する
1.
例 OleDbCommandをOleDbDataAdapterおよびOleDbConnectionと共に使用して
Accessデータベースから行を選択する
Public Sub ReadMyData( ByVal ConnectionString As String)
Dim queryString As String = "SELECT OrderID,CustomID FROM orders"
Using connection As New OleDbConnection( ConnectionString )
Dim command As New OleDbCommand( queryString, connection )
connection.Open()
Dim reader As OleDbDataReader = command.ExexuteReader()
Whlie reader.Read()
..................................................
End While
reader.Close()
End Using
End Sub
2.
OleDbCommand.ExecuteNonQueryメソッド
Dim instance As OleDbCommand
Dim returnValue As Integer
returnValue = instance.ExecuteNonQuery()
ExecuteNonQueryではカタログ操作を実行できる。(データベース構造の照会、オブジェクトの作成)
また、DataSetを使用せずにUpdate,Insert,Deleteステートメントを実行してデータベース内の
データを変更することもできる
例
Private Sub CreateOleDbCommand(ByVal queryString As String,
ByVal connectionString As String)
Using connection As New OleDbConnection( ConnectionString )
connection.Open()
Dim command As New OleDbCommand(queryString, connection )
command.ExecuteNonQuery()
End Using
End Sub
3.
OleDbCommand.ExecuteScalarメソッド
クエリを実行し、そのクエリが返す結果セットの最初の行にある
最初の列を返します。残りの列または行は無視されます
Public Sub CreateMyOleDbCommand(queryString As String,connection As OleDbconnection)
Dim command As New OleDbCommand ( queryString , connection )
command.connection.open()
command.ExecuteScalar()
connection.close
End Sub
→→→VBテキスト読み込み
Dim sCom As SqlCilent.SqlCommand
Dim sCn As SqlCilent.SqlConnection = New SqlCilent.SqlConnection()
scn.ConnectionString = "Data Source=.\SQLEXPRESS; AttachDbFileName = " &
& My.Application.Info.DirectoryPath &
"****.mdf; Integrated Security=True; Connect TimeOut=30;
User Instance = True"
Try
sCn.Open()
sCom = New SqlCilent.SqlCommand
("BULK INSERT 読込 FROM 'C:\テキスト.txt' WITH (Fieldterminator = ',' ,
rowterminator = '\n' )" , sCn)
sCom.ExecuteNonQuery()
Catch ex As Exception
MessageBox.Show( ex.Message )
End Try
sCn.Close()
Dim sCn As SqlCilent.SqlConnection = New SqlCilent.SqlConnection()
scn.ConnectionString = "Data Source=.\SQLEXPRESS; AttachDbFileName = " &
& My.Application.Info.DirectoryPath &
"****.mdf; Integrated Security=True; Connect TimeOut=30;
User Instance = True"
Try
sCn.Open()
sCom = New SqlCilent.SqlCommand
("BULK INSERT 読込 FROM 'C:\テキスト.txt' WITH (Fieldterminator = ',' ,
rowterminator = '\n' )" , sCn)
sCom.ExecuteNonQuery()
Catch ex As Exception
MessageBox.Show( ex.Message )
End Try
sCn.Close()
→→→VB2005Express SQLExpress 接続
Dim sCom As SqlClient.SqlCommandBuilder
Dim dSet As DataSet = New DataSet()
Dim dAdp As SqlClient.SqlDataAdapter
Dim scn As SqlClient.SqlConnection = New SqlClient.SqlConnection()
scn.ConnectionString = "Data Source=.\SQLEXPRESS;AttchDbFile name=" &
My.Application.Info.DirectoryPath &
"\***.mdf; Integrated Security = True; Connect TimeOut=30;
User Instance = True"
dAdp = New SqlClient.SqlDataAdapter("SELECT * FROM テーブル" , scn)
dAdp.Fill( dSet, "t_テーブル" )
sCom = New SqlClient.SqlCommandBuilder( dAdp )
For i As Integer = 0 To dSet.Tables("t_テーブル").Rows.Count - 1
dSet.Tables("t_テーブル").Rows(i)("項目") = "代入値"
Next
dAdp.Update( dSet, "t_テーブル")
scn.Close()
-----------------------------------------------------------------------
データセットに取得したレコードの更新をデータベースに反映するには
SqlCommandBuilderオブジェクトを生成してから
SqlDataAdapterオブジェクトのUpdateメソッドを実行する
SqlCommandBuilderオブジェクトの生成はNewキーワードを使い
引数にSqlDataAdapterオブジェクトを指定する
New SqlCilent.SqlCommandBuilder( SqlDataAdapter )
SqlCommandBuilderオブジェクトはデータセットの変更に対応するSQL文を自動的に作成します
データセットのレコード更新はDataRowオブジェクトに、フィールドのインデックスまたは名前を指定し
新たな値を代入します
DataTableオブジェクト.Rows( レコードのインデックス )( フィールドのインデックス/名前 ) = 値
更新後,SqlDataAdapterオブジェクトのUpdateメソッドを実行すると
データセットの変更がデータベースに反映される
Updateメソッドの引数には、DataSetオブジェクトとテーブル名を指定する
SqlDataAdapterオブジェクト.Update( DataSetオブジェクト, テーブル名 )
Dim dSet As DataSet = New DataSet()
Dim dAdp As SqlClient.SqlDataAdapter
Dim scn As SqlClient.SqlConnection = New SqlClient.SqlConnection()
scn.ConnectionString = "Data Source=.\SQLEXPRESS;AttchDbFile name=" &
My.Application.Info.DirectoryPath &
"\***.mdf; Integrated Security = True; Connect TimeOut=30;
User Instance = True"
dAdp = New SqlClient.SqlDataAdapter("SELECT * FROM テーブル" , scn)
dAdp.Fill( dSet, "t_テーブル" )
sCom = New SqlClient.SqlCommandBuilder( dAdp )
For i As Integer = 0 To dSet.Tables("t_テーブル").Rows.Count - 1
dSet.Tables("t_テーブル").Rows(i)("項目") = "代入値"
Next
dAdp.Update( dSet, "t_テーブル")
scn.Close()
-----------------------------------------------------------------------
データセットに取得したレコードの更新をデータベースに反映するには
SqlCommandBuilderオブジェクトを生成してから
SqlDataAdapterオブジェクトのUpdateメソッドを実行する
SqlCommandBuilderオブジェクトの生成はNewキーワードを使い
引数にSqlDataAdapterオブジェクトを指定する
New SqlCilent.SqlCommandBuilder( SqlDataAdapter )
SqlCommandBuilderオブジェクトはデータセットの変更に対応するSQL文を自動的に作成します
データセットのレコード更新はDataRowオブジェクトに、フィールドのインデックスまたは名前を指定し
新たな値を代入します
DataTableオブジェクト.Rows( レコードのインデックス )( フィールドのインデックス/名前 ) = 値
更新後,SqlDataAdapterオブジェクトのUpdateメソッドを実行すると
データセットの変更がデータベースに反映される
Updateメソッドの引数には、DataSetオブジェクトとテーブル名を指定する
SqlDataAdapterオブジェクト.Update( DataSetオブジェクト, テーブル名 )
2011年7月27日水曜日
→→→VB.NET ACCESS97との接続
Dim cCom As OleDbCommandBuilder
Dim dSet As DataSet = New DataSet()
Dim dAdp As OleDbDataAdapter
Dim ocn As OleDbConnection = New OleDbConnection()
ocn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;
DataSource=D:\***.mdb;Persist Security Info=False"
dAdp = New OleDbDataAdapter("SELECT * FROM テーブル", ocn)
dAdp.Fill( dSet , "t" )
Dim i As Integer
For i = 0 To 999
dSet.Tables("t").Rows(i)("列名") = dSet.Tables("t").Rows(i)("列名") & " 様"
Next
cCom = New OleDbCommandBuilder(dAdp)
dAdp.Update( dSet , "t" )
Dim dSet As DataSet = New DataSet()
Dim dAdp As OleDbDataAdapter
Dim ocn As OleDbConnection = New OleDbConnection()
ocn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;
DataSource=D:\***.mdb;Persist Security Info=False"
dAdp = New OleDbDataAdapter("SELECT * FROM テーブル", ocn)
dAdp.Fill( dSet , "t" )
Dim i As Integer
For i = 0 To 999
dSet.Tables("t").Rows(i)("列名") = dSet.Tables("t").Rows(i)("列名") & " 様"
Next
cCom = New OleDbCommandBuilder(dAdp)
dAdp.Update( dSet , "t" )
→→→SQL命令のサンプル
SELECT 住所, 住所 & ' 町' FROM テーブル
SELECT 住所, Right(住所, 2) FROM テーブル
SELECT 住所, Len(住所) FROM テーブル
SELECT TOP10 * FROM テーブル
SELECT TOP10 PERCENT * FROM テーブル
SELECT * FROM テーブル WHERE ID<= 50
SELECT * FROM テーブル WHERE 住所 = '北海道'
SELECT * FROM テーブル WHERE カナ住所 LIKE 'ホ%'
SELECT * FROM テーブル WHERE カナ住所 LIKE '[カ-コ]%'
SELECT * FROM テーブル WHERE LEN(住所) = 4
SELECT * FROM テーブル WHERE ID>=5 AND ID<=19
SELECT * FROM テーブル WHERE ID BETWEEN 5 AND 19
SELECT 住所, Right(住所, 2) FROM テーブル
SELECT 住所, Len(住所) FROM テーブル
SELECT TOP10 * FROM テーブル
SELECT TOP10 PERCENT * FROM テーブル
SELECT * FROM テーブル WHERE ID<= 50
SELECT * FROM テーブル WHERE 住所 = '北海道'
SELECT * FROM テーブル WHERE カナ住所 LIKE 'ホ%'
SELECT * FROM テーブル WHERE カナ住所 LIKE '[カ-コ]%'
SELECT * FROM テーブル WHERE LEN(住所) = 4
SELECT * FROM テーブル WHERE ID>=5 AND ID<=19
SELECT * FROM テーブル WHERE ID BETWEEN 5 AND 19
→→→VB2008 ACCESS2007との接続
Imports System.Data.OleDb
Dim cn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\**.accdb)
Dim SQLcm As OleDbCommand = cn.CreateCommand
Dim Adapter As New OleDbDataAdapter(SQLcm)
Dim Table As New DataTable
'SQL命令
Adapter.Fill( Table )
'データグリッドに表示
DataGridView1.DataSource = Table
Table.Dispose()
Adapter.Dispose()
SQLcm.Dispose()
cn.Dispose()
Dim cn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\**.accdb)
Dim SQLcm As OleDbCommand = cn.CreateCommand
Dim Adapter As New OleDbDataAdapter(SQLcm)
Dim Table As New DataTable
'SQL命令
Adapter.Fill( Table )
'データグリッドに表示
DataGridView1.DataSource = Table
Table.Dispose()
Adapter.Dispose()
SQLcm.Dispose()
cn.Dispose()
→→→VB2005 ACCESSとの接続
Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=D:\**.mdb")
Dim SQLcm As OleDbCommand = cn.CreateCommand
Dim Adapter As New OleDbAdapter(SQLcm)
Dim Table As New DataTable
SQLcm.CommandText = "SELECT * FROM テーブル"
Adapter.Fill(Table)
'データグリッドにデータを表示する
DataGridView1.DataSource = Table
Table.Dispose()
Adapter.Dispose()
SQLcm.Dispose()
cn.Dispose()
--------------------------------------------------------------
'Tableの内容をテキストにして書き出す
Dim Writer As New IO.StreamWriter("D:\Data.csv")
Dim LineText As String
For Each Row As DataRow In Table.Rows
LineText = ""
For i As Integer = 0 To Table.Columns.Count - 1
If Len(LineText) > 0 Then
LineText &= ","
End If
LineText &= Row(i)
Next
Writer.WriteLine(LineText)
Next
Writer.Close()
Writer.Dispose()
---------------------------
'S-JIS
Dim Writer As New IO.StreanWriter
("C:\*****.csv", False, System.Text.EncodingGetEncoding("Shift-Jis"))
-------------------------------------------------------
Dim SQLcm As OleDbCommand = cn.CreateCommand
Dim Adapter As New OleDbAdapter(SQLcm)
Dim Table As New DataTable
SQLcm.CommandText = "SELECT * FROM テーブル"
Adapter.Fill(Table)
'データグリッドにデータを表示する
DataGridView1.DataSource = Table
Table.Dispose()
Adapter.Dispose()
SQLcm.Dispose()
cn.Dispose()
--------------------------------------------------------------
'Tableの内容をテキストにして書き出す
Dim Writer As New IO.StreamWriter("D:\Data.csv")
Dim LineText As String
For Each Row As DataRow In Table.Rows
LineText = ""
For i As Integer = 0 To Table.Columns.Count - 1
If Len(LineText) > 0 Then
LineText &= ","
End If
LineText &= Row(i)
Next
Writer.WriteLine(LineText)
Next
Writer.Close()
Writer.Dispose()
---------------------------
'S-JIS
Dim Writer As New IO.StreanWriter
("C:\*****.csv", False, System.Text.EncodingGetEncoding("Shift-Jis"))
-------------------------------------------------------
Dim cCom As OleDbCommandBuilder
Dim dSet As DataSet = New DataSet()
Dim dAdp As OleDbDataAdapter
Dim ocn As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;
DataSource=D:\***.mdb;Persist Security Info=False")
dAdp = New OleDbDataAdapter("SELECT * FROM テーブル", ocn)
dAdp.Fill( dSet , "t_テーブル" )
cCom = New OleDbCommandBuilder(dAdp)
Dim i As Integer
For i = 0 To 999 (----> dSet.Tables("t_テーブル").Rows.Count - 1)
dSet.Tables("t_テーブル").Rows(i)("列名") = "代入物"
Next
dAdp.Update( dSet, "t_テーブル")
dAdp.Update( dSet , "t" )
→→→前回のフォームの位置をおぼえて、再度開いた時同じ位置にする
フォームプロパティを保存
Form1→「プロパティ」ウィンドウの上の方にある
(PropertyBinding)の欄の[.....]ボタンをクリック
↓
[...]ボタンをクリックするとダイアログボックスが表示される
プロパティの一覧の中から「Location」を探し右側の下矢印ボタンをクリックする
↓
ここで「新規」を選べば設定項目との対応付けができる
↓
Nameのところに「Pos」と入力
↓
これでウィンドウの位置を保存するための設定ができる
Form1→「プロパティ」ウィンドウの上の方にある
(PropertyBinding)の欄の[.....]ボタンをクリック
↓
[...]ボタンをクリックするとダイアログボックスが表示される
プロパティの一覧の中から「Location」を探し右側の下矢印ボタンをクリックする
↓
ここで「新規」を選べば設定項目との対応付けができる
↓
Nameのところに「Pos」と入力
↓
これでウィンドウの位置を保存するための設定ができる
2011年7月26日火曜日
→→→ListBoxに表示された列をダブルクリックで実行させる
TextBoxとListBoxを貼り付け
TextBoxに検索する文字列を入力
↓
指定したフォルダから一致するファイルを検索し一致したらListBoxに表示
↓
ListBoxら表示された列をダブルクリックすると実行する
Imports System.IO
Dim Folder As New DirectoryInfo("C:\USER\Documents")
Private Sub TextBox1_TextChanged(...
ListBox1.Items.Clear()
If TextBox1.Text.Length = 0 Then
Return
End If
Dim File As FileInfo
ListBox1.BeginUpdate()
For Each File In Folder.GetFiles( TextBox1.Text & "*" )
ListBox1.Items.Add( File.FullName )
Next
ListBox1.EndUpdate()
End Sub
Private Sub ListBox_DoubleClick( ....
On Error Resume Next
Process.Start( ListBox1.SelectedItem )
End Sub
→→→メール送信ひながた
Imports System.Net
Imports System.Net.Mail
Public Class Form1
Private Sub Button1_Click( ・・・
Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding(50220)
Try
Dim message As New System.Net.MailMessage("****@**.**.ne.jp" , "***@***.ne.jp" )
message.SubjectEncoding = enc
message.BodyEncoding = enc
message.Subject = Me.txtSubject.Text
message.Body = Me.txtBody.Text
Dim Client As New System.Net.Mail.SmptClient("mail.***.***.ne.jp")
Client.Credentials = New NetWorkCredential("ユーザー名","パスワード")
Client.Send(message)
txtForm.Clear()
txtTo.Clear()
txtSubject.Clear()
txtBody.Clear()
messageBox.Show("メールを送信しました","送信終了")
Catch ex As Exception
messageBox.Show("送信できませんでした","エラー")
End Try
Me.Close()
End Sub
End Class
Imports System.Net.Mail
Public Class Form1
Private Sub Button1_Click( ・・・
Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding(50220)
Try
Dim message As New System.Net.MailMessage("****@**.**.ne.jp" , "***@***.ne.jp" )
message.SubjectEncoding = enc
message.BodyEncoding = enc
message.Subject = Me.txtSubject.Text
message.Body = Me.txtBody.Text
Dim Client As New System.Net.Mail.SmptClient("mail.***.***.ne.jp")
Client.Credentials = New NetWorkCredential("ユーザー名","パスワード")
Client.Send(message)
txtForm.Clear()
txtTo.Clear()
txtSubject.Clear()
txtBody.Clear()
messageBox.Show("メールを送信しました","送信終了")
Catch ex As Exception
messageBox.Show("送信できませんでした","エラー")
End Try
Me.Close()
End Sub
End Class
→→→VB2005データベースの作成
1.[プロジェクト]→[新しい項目の追加]
2.SQLデータベースを選択
3.ファイル名決定
4.追加
5."データソース構成ウィザード"が表示
6.キャンセル
7.テーブル作成
7-1[表示]→[データベースエクスプローラ]
7-2データエクスプローラで「***.mdf」を選ぶ
7-3[データ]→[新規]→[テーブル]
7-4テーブルに表を(列作成)作る
7-5テーブルの作成が終わったら[ファイル]→[Tableを保存]→テーブル名を変え保存
7-6すべてを保存→1回終了
8データベースファイルのコピー
8-1データベースファイルをプログラムの出力先ディレクトリーにコピー
8-2ソリューションエクスプローラで「***.mdf」を選び
プロパティウィンドウの「出力ディレクトリーにコピー」を「コピーしない」に設定
8-3VB2005を終了してプロジェクトのフォルダにある「***.mdf」ファイルを
コピーしてプロジェクトのフォルダ→binフォルダ→Debugフォルダに貼り付ける
2.SQLデータベースを選択
3.ファイル名決定
4.追加
5."データソース構成ウィザード"が表示
6.キャンセル
7.テーブル作成
7-1[表示]→[データベースエクスプローラ]
7-2データエクスプローラで「***.mdf」を選ぶ
7-3[データ]→[新規]→[テーブル]
7-4テーブルに表を(列作成)作る
7-5テーブルの作成が終わったら[ファイル]→[Tableを保存]→テーブル名を変え保存
7-6すべてを保存→1回終了
8データベースファイルのコピー
8-1データベースファイルをプログラムの出力先ディレクトリーにコピー
8-2ソリューションエクスプローラで「***.mdf」を選び
プロパティウィンドウの「出力ディレクトリーにコピー」を「コピーしない」に設定
8-3VB2005を終了してプロジェクトのフォルダにある「***.mdf」ファイルを
コピーしてプロジェクトのフォルダ→binフォルダ→Debugフォルダに貼り付ける
2011年7月25日月曜日
→→→入力時の全半角チェック
Imports System
Imports System.Text
Imports.System.RegularExpressions
Private Sub Button1_Click(....
Dim intRet As Integer
Dim dr As DataSet1.入力Row = DataSet11.入力.NewRow()
'5ケタ半角で入力
If Regex.IsMatch( TextBox1.Text , "^[0-9]{5}$" ) Then
Try
TextBox1.Text = TextBox1.Text
Catch ex As Exception
MsgBox(ex.ToString)
End Try
Else
MsgBox("半角5ケタで入力してください")
End If
dr.SEQ = TextBox1.Text
dr.Zip = TextBox2.Text
'全角で入力
intRet = CHK(TextBox3.Text , 0 )
If intRec > 0 Then
MsgBox("全角で入力してください")
Exit Sub
Else
dr.住所 = TextBox3.Text
End If
DataSet11.入力.Rows.Add( dr )
UpdateDatabase()
End Sub
Private Sub Form1_Load( ....
oleDbDataAdapter1.Fill( DataSet11, "入力" )
End Sub
Private Sub UpdateDatabase()
If Not DataSet11.HasChanges() Then Return
oleDbDataAdapter1.Update( DataSet11 )
End Sub
Private Function CHK(ByVal AO As String , ByVal AKA As String) As Long
Dim nagasa As Long
Dim position As Long
Dim moji As String
Dim sjisEnc As Encoding = Encoding.GetEncoding("Shift-JIS")
CHK = 0
nagasa = AO.Length
position = 1
Do
If position > nagasa Then
Exit do
End If
moji = Mid( AO , position , 1 )
If sjisEnc.GetByteCount( moji ) = 1 Then
If AKA = 0 Then
CHK = position
Exit Function
End If
Else
If AKA = 1 Then
CHK = position
Exit Function
End If
End If
position = position + 1
Loop
End Function
----------------------------------------
新規フォームに
TextBox1 = SEQ
TextBox2 = Zip
TextBox3 = 住所
Button1 = 登録
を貼り付け
Imports System.Text
Imports.System.RegularExpressions
Private Sub Button1_Click(....
Dim intRet As Integer
Dim dr As DataSet1.入力Row = DataSet11.入力.NewRow()
'5ケタ半角で入力
If Regex.IsMatch( TextBox1.Text , "^[0-9]{5}$" ) Then
Try
TextBox1.Text = TextBox1.Text
Catch ex As Exception
MsgBox(ex.ToString)
End Try
Else
MsgBox("半角5ケタで入力してください")
End If
dr.SEQ = TextBox1.Text
dr.Zip = TextBox2.Text
'全角で入力
intRet = CHK(TextBox3.Text , 0 )
If intRec > 0 Then
MsgBox("全角で入力してください")
Exit Sub
Else
dr.住所 = TextBox3.Text
End If
DataSet11.入力.Rows.Add( dr )
UpdateDatabase()
End Sub
Private Sub Form1_Load( ....
oleDbDataAdapter1.Fill( DataSet11, "入力" )
End Sub
Private Sub UpdateDatabase()
If Not DataSet11.HasChanges() Then Return
oleDbDataAdapter1.Update( DataSet11 )
End Sub
Private Function CHK(ByVal AO As String , ByVal AKA As String) As Long
Dim nagasa As Long
Dim position As Long
Dim moji As String
Dim sjisEnc As Encoding = Encoding.GetEncoding("Shift-JIS")
CHK = 0
nagasa = AO.Length
position = 1
Do
If position > nagasa Then
Exit do
End If
moji = Mid( AO , position , 1 )
If sjisEnc.GetByteCount( moji ) = 1 Then
If AKA = 0 Then
CHK = position
Exit Function
End If
Else
If AKA = 1 Then
CHK = position
Exit Function
End If
End If
position = position + 1
Loop
End Function
----------------------------------------
新規フォームに
TextBox1 = SEQ
TextBox2 = Zip
TextBox3 = 住所
Button1 = 登録
を貼り付け
2011年7月23日土曜日
→→→イベントとプロシージャを動的に結びつける
状況に応じて動的に結びつけるには{AddHandlerステートメント・RemoveHandlerステートメント}を使う
(1)例えば MyClickプロシージャとButton2のClickイベントを結びつけるには
AddHandler 変数.イベント名 AddressOf イベントの関数
AddHandler Button2.Click , AddressOf MyClick
フォームにButton1,2を貼り付けてから
Private Sub Button1_Click( .... ) Handles Button1.Click
AddHandler Button2.Click , AddressOf MyClick
End Sub
Private Sub MyClick( .... )
MsgBox( sender.name )
End Sub
このプログラムを実行するとはじめButton2をクリックしても何も起きない。
Button1をクリックしてからButton2をクリックすると
MyClickプロシージャが呼び出される
Private Sub Button1_Click( .... ) Handles Button1.Click
MsgBox("はじめ")
RemoveHandler Button1.Click , AddressOf Button1_Click
AddHandler Button1.Click , AddressOf MyClick
End Sub
Private Sub MyClick( .... )
MsgBox("2回目以降")
End Sub
Button1_ClickプロシージャにHandles句があるので、はじめはButton1をクリックするとこのプロシージャ
が呼び出されます。
ところが、このプロシージャの中でRemoveHandlerステートメントが使用されていて、
Button1のClickイベントとButton1_Clickプロシージャの結びつきが削除されてしまう
それで新たにAddHandlerステートメントを利用して
Button1のClickイベントはMyClickプロシージャに結びつけられる
(1)例えば MyClickプロシージャとButton2のClickイベントを結びつけるには
AddHandler 変数.イベント名 AddressOf イベントの関数
AddHandler Button2.Click , AddressOf MyClick
フォームにButton1,2を貼り付けてから
Private Sub Button1_Click( .... ) Handles Button1.Click
AddHandler Button2.Click , AddressOf MyClick
End Sub
Private Sub MyClick( .... )
MsgBox( sender.name )
End Sub
このプログラムを実行するとはじめButton2をクリックしても何も起きない。
Button1をクリックしてからButton2をクリックすると
MyClickプロシージャが呼び出される
Private Sub Button1_Click( .... ) Handles Button1.Click
MsgBox("はじめ")
RemoveHandler Button1.Click , AddressOf Button1_Click
AddHandler Button1.Click , AddressOf MyClick
End Sub
Private Sub MyClick( .... )
MsgBox("2回目以降")
End Sub
Button1_ClickプロシージャにHandles句があるので、はじめはButton1をクリックするとこのプロシージャ
が呼び出されます。
ところが、このプロシージャの中でRemoveHandlerステートメントが使用されていて、
Button1のClickイベントとButton1_Clickプロシージャの結びつきが削除されてしまう
それで新たにAddHandlerステートメントを利用して
Button1のClickイベントはMyClickプロシージャに結びつけられる
→→→KeyPressイベント
このイベントプロシージャの第2引数はKeyPressEventArgs型で入力されたキーに関する情報が
取得できる。
また、このKeyPressEventArgs型のHandledプロパティは読み取りだけでなく設定することもでき、
Trueを設定した場合はキーボードからの入力もキャンセルすることができる。
(例)テキストボックスに数字以外入力できないようにする。
Private Sub TextBox1_KeyPress(ByVal sender As Object ,
ByVal e As System.Windows.Forms.KeyPressEventArgs)
Handles TextBox1.KeyPress
If IsNumeric(e.KeyChar) = False Then
e.Handled = True
End If
End Sub
取得できる。
また、このKeyPressEventArgs型のHandledプロパティは読み取りだけでなく設定することもでき、
Trueを設定した場合はキーボードからの入力もキャンセルすることができる。
(例)テキストボックスに数字以外入力できないようにする。
Private Sub TextBox1_KeyPress(ByVal sender As Object ,
ByVal e As System.Windows.Forms.KeyPressEventArgs)
Handles TextBox1.KeyPress
If IsNumeric(e.KeyChar) = False Then
e.Handled = True
End If
End Sub
→→→お絵かき
Private Sub PictureBox1_MouseMove(ByVal sender As Object,
ByVal e As System.Windows.Forms.MouseEventArgs)
Handles PictureBox1.MouseMove
Dim g As Graphics = sender.CreateGraphics()
If e.Button = MouseButtons.Left Then
g.FillEllipse( Brushes.Red , e.X , e.Y , 10 , 10)
ElseIf e.Button = MouseButtons.Right Then
g.FillEllipse( Brushes.Blue , e.X , e.Y , 10 , 10)
End If
End Sub
ByVal e As System.Windows.Forms.MouseEventArgs)
Handles PictureBox1.MouseMove
Dim g As Graphics = sender.CreateGraphics()
If e.Button = MouseButtons.Left Then
g.FillEllipse( Brushes.Red , e.X , e.Y , 10 , 10)
ElseIf e.Button = MouseButtons.Right Then
g.FillEllipse( Brushes.Blue , e.X , e.Y , 10 , 10)
End If
End Sub
2011年7月22日金曜日
→→→イベントプロシージャの第2引数の使い方
-----------------------------------------------------------------------------
Private Sub Button1_Click(Byval sender As System.Object,
ByVal e As System.EventArgs)Handles Buttin1.Click
End Sub
-----------------------------------------------------------------------------
1つ目はイベントとプロシージャを結びつけるHandlesキーワードがある
2つ目は引数
イベントプロシージャには必ず2つの引数があり、
第1引数はObject型、第2引数はEventArgs型
この2つの要件を満たしいるものはすべてイベントプロシージャです。
第1引数はイベントを発生させたクラスが渡されています。上記の
Clickイベントプロシージャの場合、第1引数のsenderには
Button1がセットされています。
第2引数はイベントの追加情報が渡されてきます
*イベントプロシージャの使い方
-------------------------------------------------------------------------------
①MouseEnterイベント(マウスがコントロールの上に入ったときに発生)
Private Sub Button1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Button1.MouseEnter
Button1.BackColor = Color.Pink
End Sub
--------------------------------------------------------------------------------
②MouseLeaveイベント(マウスカーソルがコントロール外に離れていったときに発生)
Private Sub Button1_Click(Byval sender As System.Object,
ByVal e As System.EventArgs)Handles Buttin1.Click
End Sub
-----------------------------------------------------------------------------
1つ目はイベントとプロシージャを結びつけるHandlesキーワードがある
2つ目は引数
イベントプロシージャには必ず2つの引数があり、
第1引数はObject型、第2引数はEventArgs型
この2つの要件を満たしいるものはすべてイベントプロシージャです。
第1引数はイベントを発生させたクラスが渡されています。上記の
Clickイベントプロシージャの場合、第1引数のsenderには
Button1がセットされています。
第2引数はイベントの追加情報が渡されてきます
*イベントプロシージャの使い方
-------------------------------------------------------------------------------
①MouseEnterイベント(マウスがコントロールの上に入ったときに発生)
Private Sub Button1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Button1.MouseEnter
Button1.BackColor = Color.Pink
End Sub
--------------------------------------------------------------------------------
②MouseLeaveイベント(マウスカーソルがコントロール外に離れていったときに発生)
Private Sub Button1_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Button1.MouseLeave
Button1.BackColor = Color.FromKnownColor(KnownColor.Control)
End Sub
--------------------------------------------------------------------------------
→→→リストボックスにフィールドの値を一覧表示
ListBox1.DataSource = dSet.Tables("t_テスト")
ListBox1.DisplayMember = "コード"
ListBox1.ValueMember = "コード"
DisPlayMemberプロパティにはListBoxコントロールに表示するフィールド
表示したそれぞれの項目に対してプログラム内で実際に使うフィールドの値を
ValueMemberプロパティで指定
ListBox1.DisplayMember = "コード"
ListBox1.ValueMember = "コード"
DisPlayMemberプロパティにはListBoxコントロールに表示するフィールド
表示したそれぞれの項目に対してプログラム内で実際に使うフィールドの値を
ValueMemberプロパティで指定
→→→テキストボックス
Dim dSet As DataSet = New DataSet
Dim dAdp As OleDbDataAdapter
Dim ocn As OleDbConnection = New OleDbConnection
ocn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;
Data Source = D:\**.mdb; Persist Security Info=False"
dAdp = New OleDbDataAdapter("SELECT * FROM テスト", ocn )
dAdp.Fill( dSet , "t_テスト" )
TextBox1.DataBindings.Add("Text" , dSet.tables("t_テスト") , "コード")
TextBox2.DataBindings.Add("Text" , dSet.tables("t_テスト") , "製品")
Add.(プロパティ名 , テーブル名 , フィールド名)
次のレコードを表示
Me.BindingContext.Item( ).Position += 1
2011年7月21日木曜日
→→→DataGridを編集可能かつ行の追加を不可にする
Dim dSet As DataSet = New DataSet("t_テスト")
Dim dView As DataView
Dim dAdp As OleDbDataAdapter
Dim ocn As OleDbConnection = New OleDbConnection
ocn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4..0;
Data Source=D:\***.mdb;Persist Security Info = False"
dAdp = New OleDbDataAdapter("SELECT * FROM テスト", ocn )
dAdp.Fill( dSet, "t_テスト" )
dView = New DataView( dSet.Tables("t_テスト"))
'新しい行を追加できないようにする
dViewAllowNew = False
DataGrid1.DataSource = dView
------------------------------------------------------------------
<クリックされたセルの行番号、列番号を取得>
Private Sub DataGrid1_MouseUp(ByVal sender As Object,
ByVal e As System.Windows.Forms.MouseEventArgs)
Handles DataGrid1.MouseUp
Dim hitInfo As DataGrid.HitTestInfo
hitInfo = sender.HitTest( e.X , e.Y )
MessageBox.show("クリックした行:" & hitInfo.Row + 1 & ControlChars.NewLine &
"クリックした列:" & hitInfo.Column + 1, "通知結果")
End Sub
→→→DataGrid(すでに開かれているDataGridをいじる)
Dim dSet As DataSet
Dim dTbl As DataTable
Dim i As Integer
dSet = DataGrid1.DataSource
dTbl = dSet.Tables(DataGrid1.DataMember)
For i = 0 To dTbl.Rows.Count - 1
Debug.WriteLine( i.ToString() & ControlChars.Tab & dTbl.Rows(i).RowState.ToString())
Next
-----------------------------------------------------------
Add ---->追加された行
Deleted ---->削除された行
Detached -->DataRowコレクションに追加されていない行
Modified --->変更された行
Unchanged ->前回のAcceptChangesメソッド以降変更されていない行
-------------------------------------------------------------
DataGridの行の編集を確定する
Dim dTbl As DataTable
Dim i As Integer
dSet = DataGrid1.DataSource
dTbl = dSet.Tables(DataGrid1.DataMember)
For i = 0 To dTbl.Rows.Count - 1
Debug.WriteLine( i.ToString() & ControlChars.Tab & dTbl.Rows(i).RowState.ToString())
Next
-----------------------------------------------------------
Add ---->追加された行
Deleted ---->削除された行
Detached -->DataRowコレクションに追加されていない行
Modified --->変更された行
Unchanged ->前回のAcceptChangesメソッド以降変更されていない行
-------------------------------------------------------------
DataGridの行の編集を確定する
Dim dSet As DataSet
Dim dTbl As DataTable
Dim i As Integer
dSet = DataGrid1.DataSource
dTbl = dSet.Tables(DataGrid1.DataMember)
For Each dRow In dTbl.Rows
If dRow.RowState <> DataRowState.Unchanged Then
dRow.AcceptChanges()
End If
Next
For Each dRow In dTbl.Rows
i += 1
Debug.WriteLine( i.ToString() & "行目" & dRows.RowState.ToString())
Next
DataGridを編集できないようにする
---------------------------------
DataGrid1.ReadOnly = True
-------------------------------------
<DataGridのセルのクリックイベントを処理する>
・DataGridコントロールのセルをクリックしたときのイベントを処理するには
DataGridコントロールのセルを表す
DataGridTextBoxオブジェクトのTextChangedイベントを利用する
TextChangeイベントを処理するイベントハンドラを作成し、
TextChangeイベントをAddHandlerステートメントと
AddressOf演算子を使ってイベントハンドラに関連付けます
-------------------------------------------
AddHandler イベント AddressOf イベントハンドラ
-------------------------------------------
→→→DataGridにタイトルをつける
Dim dSet As DataSet = New DataSet
Dim dAdp As OleDbDataAdapter
Dim ocn As OleDbConnection = New OleDbConnection
ocn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4..0;
Data Source=D:\***.mdb;Persist Security Info = False"
dAdp = New OleDbDataAdapter("SELECT * FROM テスト", ocn )
dAdp.Fill( dSet, "t_テスト" )
DataGrid1.SetDataBinding(dSet, "t_テスト")
DataGrid1.CaptionText = "社員情報"
DataGrid1.CaptionForeColor = Color.Red
DataGrid1.CaptionBackColor = Color.White
---------------------------------------------------------------------
<タイトルバーを表示しない>
DataGrid1.CaptionVisible = False
---------------------------------------------------------------------
<一行おきに背景色をつける>
DataGrid1.AlternatingBackColor = Color.Gray
---------------------------------------------------------------------
<DataGridの高さを変更する>
DataGrid1.PreferredRowHeight = 30
---------------------------------------------------------------------
<DataGridの列見出しクリック時に並べ替えないようにする>
DataGrid1.AllowSorting = False
2011年7月20日水曜日
→→→DataGridの特定の行にマークをつける
商品コード 単価 チェック
A001 150 ○
B001 100 ○
C001 500
A001 150 ○
B001 100 ○
C001 500
Dim dCol As DataColumn
Dim dSet As DataSet = New DataSet
Dim dAdp As OleDbDataAdapter
Dim ocn As OleDbConnection = New OleDbConnection
ocn.ConnectionString = "Provider~"
dAdp = New OleDbDataAdapter ("SELECT * FROM テスト" , ocn)
dAdp.Fill( dSet, "t_テスト")
dCol = dSet.Tables("t_テスト").Columns.Add("チェック")
dCol.Expression = "IIF(単価<200 , '○' , ' ' )"
DataGrid1.SetDataBinding( dSet , "t_テスト")
→→→DataGridにフィールドの値の1部を表示する
商品コード 種別
A001 CA
B001 IC
I005 BA
A001 CA
B001 IC
I005 BA
Dim dCol As DataColumn
Dim dSet As DataSet = New DataSet
Dim dAdp As OleDbDataAdapter
Dim ocn As OleDbConnection = New OleDbConnection
ocn.ConnectionString = "Provider~"
dAdp = New OleDbDataAdapter ("SELECT * FROM テスト" , ocn)
dAdp.Fill( dSet, "t_テスト")
dCol = dSet.Tables("t_テスト").Columns.Add(種別)
dCol.Expression = "SUBSTRING(商品コード,1,2)"
DataGrid1.SetDataBinding( dSet , "t_テスト")
→→→DataGridに集計値を表示する
<DataColumn><Expression>
仕入テーブル
伝票NO 仕入日 商品コード 数量
001 2008/7/1 A001 100
002 2008/7/5 B001 250
商品テーブル
商品コード 商品名 単価
A001 ***** 270
B001 ///// 500
--------------------------------------------------
Dim dCol As DataColumn
Dim dSet As DataSet = New DataSet("仕入")
Dim dAdp As OleDbDataAdapter
Dim ocn As OleDbConnection = New OleDbConnection
ocn.ConnectionString = "Provider~"
dAdp = New OleDbDataAdapter ("SELECT * FROM 仕入" , ocn)
dAdp.Fill( dSet, "t_仕入")
仕入テーブル
伝票NO 仕入日 商品コード 数量
001 2008/7/1 A001 100
002 2008/7/5 B001 250
商品テーブル
商品コード 商品名 単価
A001 ***** 270
B001 ///// 500
--------------------------------------------------
Dim dCol As DataColumn
Dim dSet As DataSet = New DataSet("仕入")
Dim dAdp As OleDbDataAdapter
Dim ocn As OleDbConnection = New OleDbConnection
ocn.ConnectionString = "Provider~"
dAdp = New OleDbDataAdapter ("SELECT * FROM 仕入" , ocn)
dAdp.Fill( dSet, "t_仕入")
dAdp = New OleDbDataAdapter ("SELECT * FROM 商品" , ocn)
dAdp.Fill( dSet, "t_商品")
dSet.relations.Add("商品売上", dSet.Tables("t_商品").Columns("商品コード"),
dSet.Tables("t_仕入").Columns("商品コード"))
dCol = dSet.Tables("t_商品").Columns.Add("仕入数")
dCol.Expression = "SUM(Child.数量)"
DataGrid1.SetDataBinding( dSet , "t_商品")
→→→DataGridにフィールドを連結した列を追加
Dim dCol As DataColumn
Dim dSet As DataSet = New DataSet("t_テスト")
Dim dAdp As OleDbDataAdapter
Dim ocn As OleDbConnection = New OleDbConnection
ocn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=D:\***.mdb;Persist Security Info = False"
dAdp = New OleDbDataAdapter("SELECT * FROM テスト" , ocn)
dAdp.Fill( dSet , "t_テスト")
dCol = dSet.Tables("t_テスト").Columns.Add("[コード]製品名")
dCol.Expression = "コード + 製品名"
DataGrid1.SetDataBinding( dSet , "t_テスト")
-------------------------------------------------------
(1)DataGridコントロールに列を追加するには
dCol = dSet.Tables("テーブル名").Columns.Add("見出し")
(2)既存の複数のフィールドを連結したものにするにはExpressionプロパティを使う
Dim dSet As DataSet = New DataSet("t_テスト")
Dim dAdp As OleDbDataAdapter
Dim ocn As OleDbConnection = New OleDbConnection
ocn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=D:\***.mdb;Persist Security Info = False"
dAdp = New OleDbDataAdapter("SELECT * FROM テスト" , ocn)
dAdp.Fill( dSet , "t_テスト")
dCol = dSet.Tables("t_テスト").Columns.Add("[コード]製品名")
dCol.Expression = "コード + 製品名"
DataGrid1.SetDataBinding( dSet , "t_テスト")
-------------------------------------------------------
(1)DataGridコントロールに列を追加するには
dCol = dSet.Tables("テーブル名").Columns.Add("見出し")
(2)既存の複数のフィールドを連結したものにするにはExpressionプロパティを使う
→→→DataGridに表示する
'スタンダード<DataGrid表示>
Dim dSet As DataSet = New DataSet("t_テスト")
Dim dAdp As OleDbDataAdapter
Dim ocn As OleDbConnection = New OleDbConnection
ocn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4..0;
Data Source=D:\***.mdb;Persist Security Info = False"
dAdp = New OleDbDataAdapter("SELECT * FROM テスト", ocn )
dAdp.Fill( dSet, "t_テスト" )
DataGrid1.SetDataBinding(dSet, "t_テスト")
Dim dSet As DataSet = New DataSet("t_テスト")
Dim dAdp As OleDbDataAdapter
Dim ocn As OleDbConnection = New OleDbConnection
ocn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4..0;
Data Source=D:\***.mdb;Persist Security Info = False"
dAdp = New OleDbDataAdapter("SELECT * FROM テスト", ocn )
dAdp.Fill( dSet, "t_テスト" )
DataGrid1.SetDataBinding(dSet, "t_テスト")
→→→条件に合致したレコードのみDataGridに表示する
Dim dView As DataView
Dim dSet As DataSet = New DataSet
Dim dAdp As OleDbDataAdapter
Dim ocn As OleDbConnection = New OleDbConnection
ocn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=D:\***.mdb;Persist Security Info=False"
dAdp = New OleDbDataAdapter("SELECT * FROM テスト",ocn)
dAdp.Fill( dSet, "t_テスト")
dView = New DataView(dSet.Tables("t_テスト"),"コード2", "" , DataViewRowState.CurrentRows)
DataGrid1.DataSource = dView
*DataGridの行のヘッダの幅を変更する
DataGrid1.RowHeaderWidth = 30
*DataGridの行ヘッダを表示しない
DataGrid1.RowHeadersVisible = False
Dim dSet As DataSet = New DataSet
Dim dAdp As OleDbDataAdapter
Dim ocn As OleDbConnection = New OleDbConnection
ocn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=D:\***.mdb;Persist Security Info=False"
dAdp = New OleDbDataAdapter("SELECT * FROM テスト",ocn)
dAdp.Fill( dSet, "t_テスト")
dView = New DataView(dSet.Tables("t_テスト"),"コード2", "" , DataViewRowState.CurrentRows)
DataGrid1.DataSource = dView
*DataGridの行のヘッダの幅を変更する
DataGrid1.RowHeaderWidth = 30
*DataGridの行ヘッダを表示しない
DataGrid1.RowHeadersVisible = False
2011年7月19日火曜日
→→→DataGridにデータの内容を表示する
テーブルへのデータ追加
DataRow
Dim dRow As DataRow
dRow = dTbl.NewRow()
dRow("Name") = "Smith"
dTbl.Rows.Add( dRow )
dTbl --> "id"<Column> "Name"<Column> ----> dRow("id") dRow("Name")
(A)
Dim dTbl As DataTable = New DataTable
Dim dRow As DataRow
Dim dView As DataView
Dim i As Integer
dTbl.Columns.Add("id" , Type.GetType("SYstem.Int32"))
dTbl.Columns.Add("Name" , Type.GetType("System.String"))
For i = 0 To 9
dRow = dTbl.NewRow()
dRow(" id ") = i
dRow(" Name ") = "item" & i
dTbl.Rows.Add( dRow )
Next
dView = New DataView( dTbl )
DataGrid1.DataSource = dView
(B)
Dim dSet As DataSet = New DataSet("リス")
Dim dTbl As DataTable
dTbl = dSet.Tables.Add("種類")
dTbl.Columns.Add("NO" , Type.GetType("System.Int32"))
dTbl.Columns.Add("名前" , Type.GetType("System.String"))
dTbl.Rows.Add( New Object() { 1 , "シマリス" })
dTbl.Rows.Add( New Object() { 2 , "エゾリス" })
dTbl.Rows.Add( New Object() { 3 , "シケリス" })
DataGrid1.SetDataBinding( dSet , "種類" )
(C)
Dim dSet As DataSet = New DataSet
Dim dTbl As DataTable
Dim dRow As DataRow
Dim i As Integer
dTbl = dSet.Tables.Add("種類")
dTbl.Columns.Add("NO" , Type.GetType("System.String"))
For i = 0 To 9
dRow = dTbl.NewRow()
dRow("NO") = i
dTbl.Rows.Add( dRow )
Next
DataGrid1.SetDataBinding( dSet, "種類")
DataRow
Dim dRow As DataRow
dRow = dTbl.NewRow()
dRow("Name") = "Smith"
dTbl.Rows.Add( dRow )
dTbl --> "id"<Column> "Name"<Column> ----> dRow("id") dRow("Name")
(A)
Dim dTbl As DataTable = New DataTable
Dim dRow As DataRow
Dim dView As DataView
Dim i As Integer
dTbl.Columns.Add("id" , Type.GetType("SYstem.Int32"))
dTbl.Columns.Add("Name" , Type.GetType("System.String"))
For i = 0 To 9
dRow = dTbl.NewRow()
dRow(" id ") = i
dRow(" Name ") = "item" & i
dTbl.Rows.Add( dRow )
Next
dView = New DataView( dTbl )
DataGrid1.DataSource = dView
(B)
Dim dSet As DataSet = New DataSet("リス")
Dim dTbl As DataTable
dTbl = dSet.Tables.Add("種類")
dTbl.Columns.Add("NO" , Type.GetType("System.Int32"))
dTbl.Columns.Add("名前" , Type.GetType("System.String"))
dTbl.Rows.Add( New Object() { 1 , "シマリス" })
dTbl.Rows.Add( New Object() { 2 , "エゾリス" })
dTbl.Rows.Add( New Object() { 3 , "シケリス" })
DataGrid1.SetDataBinding( dSet , "種類" )
(C)
Dim dSet As DataSet = New DataSet
Dim dTbl As DataTable
Dim dRow As DataRow
Dim i As Integer
dTbl = dSet.Tables.Add("種類")
dTbl.Columns.Add("NO" , Type.GetType("System.String"))
For i = 0 To 9
dRow = dTbl.NewRow()
dRow("NO") = i
dTbl.Rows.Add( dRow )
Next
DataGrid1.SetDataBinding( dSet, "種類")
→→→トランザクションを開始/終了
トランザクションを使用することによってデータベース更新中にエラーが
発生した場合、データ整合性を保持することができる
BeginTransactionメソッド
トランザクションを終了するには、Commitメソッドを使う
Commitメソッドはトランザクション処理中のデータベース操作を確定して
トランザクションを終了する
Dim sTrans As OleDbTransaction
Dim ocn As OleDbConnection = New OleDbConnection
ocn.ConnectionString = "Provider=Microsoft.Jet.OlEDB.4.0;
DataSource=D:\**mdb;Persist Security Info=False"
ocn.open()
Try
sTrans = ocn.BeginTransaction()
MessageBox.show("トランザクションを開始しました")
sTrans.Commit()
Catch ex As Exception
MessageBox.show("トランザクションを開始できませんでした")
End Try
ocn.Close()
発生した場合、データ整合性を保持することができる
BeginTransactionメソッド
トランザクションを終了するには、Commitメソッドを使う
Commitメソッドはトランザクション処理中のデータベース操作を確定して
トランザクションを終了する
Dim sTrans As OleDbTransaction
Dim ocn As OleDbConnection = New OleDbConnection
ocn.ConnectionString = "Provider=Microsoft.Jet.OlEDB.4.0;
DataSource=D:\**mdb;Persist Security Info=False"
ocn.open()
Try
sTrans = ocn.BeginTransaction()
MessageBox.show("トランザクションを開始しました")
sTrans.Commit()
Catch ex As Exception
MessageBox.show("トランザクションを開始できませんでした")
End Try
ocn.Close()
→→→まとめ②
1.データセット(データベースに非接続のキャッシュ)
データセットにデータを取得する( .Fill )
< .Fillメソッド >
第1引数 レコードの内容を取得するDataSetオブジェクト
第2引数 テーブル名
2.データセットのデータを参照する
データベースのテーブル = DataTableオブジェクト
↓
レコードの内容としてRowsプロパティ
3.データセットのデータを配列に取得
DataRowオブジェクトはRowsプロパティにインデックスを指定して取得
DataRowオブジェクトのItemArrayプロパティを使うと
DataSetオブジェクトのテーブルデータ(レコード)を
配列に取得できる
-- 基本形 ----------------------------------------------------------------
Dim dSet As DataSet = New DataSet
Dim dAdp As OleDbDataAdapter
Dim ocn As OleDbConnection = New OleDbConnection
ocn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;
Data Source = D:\**.mdb; Persist Security Info=False"
dAdp = New OleDbDataAdapter("SELECT * FROM テスト", ocn )
dAdp.Fill( dSet , "t_テスト" )
------------------------------------------------------------------------
'レコード数
Dim rNum As Integer
rNum = dSet.Tables("t_テスト").Rows.Count
'配列
Dim dRow As DataRow
Dim RecArray() As Object
For Each dRow In dSet.Tables("t_テスト").Rows
RecArray = dRow.ItemArray
Next
'指定した行番号のレコードを取得
Dim dRow As DataRow
dRow = dSet.Tables("t_テスト").Rows.Item(1)
'フィールドを指定して値を取得
Dim dRow As DataRow
For Each dRow In dSet.Tables("t_テスト").Rows
Debug.Write( dRow("社員NO") & dRow("氏名")
Next
'修正
Dim cCon As OleDbCommandbuilder
dSet.Tables("t_テスト").Rows(0)("製品名") = "修正内容"
cCon = New OleDbCommandBuilder( dAdp )
dAdp.Update( dSet , "t_テスト" )
'追加
Dim dRow As DataRow
Dim cCon As OleDbCommandBuilder
dRow = dSet.Tables("t_テスト").NewRow
dRow("社員NO") = "1999"
dRow("氏名") = "山田"
dSet.Tables("t_テスト").Rows.Add( dRow )
cCon = New OleDbCommandBuilder( dAdp )
dAdp.Update( dSet, "t_テスト")
'削除
Dim dRow As DataRow
Dim cCom As OleDbCommandBuilder
dRow = dSet.Tables("t_テスト").Rows(0)
dRow.Delete()
cCom = New OleDbCommandBuilder( dAdp )
dAdp.Update( dSet, "t_テスト" )
Windows ------ データセット ------ データアダプタ ---- コネクション ---- DB
データセットにデータを取得する( .Fill )
< .Fillメソッド >
第1引数 レコードの内容を取得するDataSetオブジェクト
第2引数 テーブル名
2.データセットのデータを参照する
データベースのテーブル = DataTableオブジェクト
↓
レコードの内容としてRowsプロパティ
3.データセットのデータを配列に取得
DataRowオブジェクトはRowsプロパティにインデックスを指定して取得
DataRowオブジェクトのItemArrayプロパティを使うと
DataSetオブジェクトのテーブルデータ(レコード)を
配列に取得できる
-- 基本形 ----------------------------------------------------------------
Dim dSet As DataSet = New DataSet
Dim dAdp As OleDbDataAdapter
Dim ocn As OleDbConnection = New OleDbConnection
ocn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;
Data Source = D:\**.mdb; Persist Security Info=False"
dAdp = New OleDbDataAdapter("SELECT * FROM テスト", ocn )
dAdp.Fill( dSet , "t_テスト" )
------------------------------------------------------------------------
'レコード数
Dim rNum As Integer
rNum = dSet.Tables("t_テスト").Rows.Count
'配列
Dim dRow As DataRow
Dim RecArray() As Object
For Each dRow In dSet.Tables("t_テスト").Rows
RecArray = dRow.ItemArray
Next
'指定した行番号のレコードを取得
Dim dRow As DataRow
dRow = dSet.Tables("t_テスト").Rows.Item(1)
'フィールドを指定して値を取得
Dim dRow As DataRow
For Each dRow In dSet.Tables("t_テスト").Rows
Debug.Write( dRow("社員NO") & dRow("氏名")
Next
'修正
Dim cCon As OleDbCommandbuilder
dSet.Tables("t_テスト").Rows(0)("製品名") = "修正内容"
cCon = New OleDbCommandBuilder( dAdp )
dAdp.Update( dSet , "t_テスト" )
'追加
Dim dRow As DataRow
Dim cCon As OleDbCommandBuilder
dRow = dSet.Tables("t_テスト").NewRow
dRow("社員NO") = "1999"
dRow("氏名") = "山田"
dSet.Tables("t_テスト").Rows.Add( dRow )
cCon = New OleDbCommandBuilder( dAdp )
dAdp.Update( dSet, "t_テスト")
'削除
Dim dRow As DataRow
Dim cCom As OleDbCommandBuilder
dRow = dSet.Tables("t_テスト").Rows(0)
dRow.Delete()
cCom = New OleDbCommandBuilder( dAdp )
dAdp.Update( dSet, "t_テスト" )
Windows ------ データセット ------ データアダプタ ---- コネクション ---- DB
2011年7月18日月曜日
→→→まとめ①
1.データセットのテーブル数を取得
DataSetオブジェクト.Tables.Count
Dim dSet As DataSet = New DataSet("~")
Dim dTbl As DataTable
dTbl = dSet.Tables.Add("ドリンク")
Debug.writeLine("テーブル数:" & dSet.Tables.Count)
dTbl = dSet.Tables.Add("デザート")
Debug.WriteLine("テーブル数:" & dSet.Tables.Count)
2.データセットのテーブルを削除するには、Removeメソッド
Dim dSet As DataSet = New DataSet("~")
DataSetオブジェクト.Tables.Count
Dim dSet As DataSet = New DataSet("~")
Dim dTbl As DataTable
dTbl = dSet.Tables.Add("ドリンク")
Debug.writeLine("テーブル数:" & dSet.Tables.Count)
dTbl = dSet.Tables.Add("デザート")
Debug.WriteLine("テーブル数:" & dSet.Tables.Count)
2.データセットのテーブルを削除するには、Removeメソッド
Dim dSet As DataSet = New DataSet("~")
Dim dTbl As DataTable
dTbl = dSet.Tables.Add("ドリンク")
Debug.writeLine("テーブル数:" & dSet.Tables.Count)
dSet.Tables.Remove("ドリンク")
Debug.WriteLine("テーブル数:" & dSet.Tables.Count)
3.データセットのテーブル間にリレーションを設定
DataSetオブジェクト.Relations.Add (リレーション名, 親フィールド, 子フィールド)
Dim dSet As DataSet = New DataSet("~")
Dim dTbl As DataTable
dTbl = dSet.Tables.Add("ドリンク")
dTbl.Columns.Add("ID", Type.GetType("System.Int32"))
dTbl.Columns.Add("メニュー", Type.GetType("System.String"))
dTbl = dSet.Tables.Add("売上")
dTbl.Columns.Add("NO", Type.GetType("System.Int32"))
dTbl.Columns.Add("個数", Type.GetType("System.String"))
'リレーションを設定
dSet.Relations.Add("メニュー別売上"
, dSet.Tables("ドリンク").Columns("ID")
, dSet.Tables("売上").Columns("NO"))
4.テーブルにフィルタを設定
DataRowオブジェクトのSelectメソッドを使ってデータセットのテーブルにフィルタを
設定した結果を得ることができる
Selectメソッドの引数には、フィルタ基準となる条件式を
「"フィールド名 > 100"」のように指定
また、第2引数でフィールドの値に応じた並べ替えを指定
並べ替えは昇順のときは「"フィールド名 ASC"」
降順のときは「"フィールド名 DESC"」と指定できる
Selectメソッドの戻り値はDataRowオブジェクトの配列
Dim RetRows As DataRow()
Dim dRow As DataRow
Dim dCol As DataColumn
Dim dSet As DataSet = New DataSet("~")
Dim dAdp As OleDbDataAdapter
Dim ocn As OleDbConnection = New OleDbConnection
ocn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\***.mdb;Persist Security Info=False
dAdp = New OleDbDataAdapter("SELECT * FROM 商品",ocn)
dAdp.Fill( dSet , "t_商品" )
RetRows = dSet.Tables("t_商品").Select("単価>=200", "単価 DESC")
If RetRows.Length = 0 Then
Debug.WriteLine("見つかりませんでした")
Exit Sub
End If
For Each dRow In RetRows
For Each dCol In dRow.Table.Columns
Debug.Write(ControlChars.Tab & dRow( dCol) )
Next
Debug.WriteLine("")
Next
登録:
投稿 (Atom)