VBでSQLite、データ検索までしたので続いて登録、更新、削除をしてみました。
C#からの移植ではありますが、微妙に違うところもありますね。
プログラムは前回のものを流用します。
【VB.NET】SQLiteからデータを取得して表示する
画面に追加、更新、削除ボタンを追加し、それぞれにクリックイベントを設定します。
追加更新削除後に再検索するため、別メソッドに切り出します。
''' <summary>
''' 検索ボタンクリックイベント.
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click
search()
End Sub
''' <summary>
''' 検索処理
''' </summary>
Private Sub search()
Using conn As New SQLiteConnection("Data Source=SampleDb.sqlite")
' データベースオープン
conn.Open()
' 検索条件を指定してデータを取得
Using con As New DataContext(conn)
Dim searchName As String = txtName.Text
Dim searchKind As String = CType(cmbKind.SelectedValue, Kind).KindCd
Dim tblCat As Table(Of Cat) = con.GetTable(Of Cat)
Dim result As IQueryable(Of Cat)
If (searchKind = "") Then
' 種別が選択されていなければ名前のみ前方一致指定
result = From x In tblCat
Where x.Name.StartsWith(searchName)
Order By x.No
Select x
Else
' 種別が選択されていれば名前+種別で検索
result = From x In tblCat
Where x.Name.StartsWith(searchName) & x.KindCd = searchKind
Order By x.No
Select x
End If
' データグリッドビューに設定
dgvCat.DataSource = result.ToList()
End Using
' データベースクローズ
conn.Close()
End Using
End Sub
''' <summary>
''' 追加ボタンクリックイベント
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
Using conn As New SQLiteConnection("Data Source=SampleDb.sqlite")
' データベースオープン
conn.Open()
' データ追加
Using con As New DataContext(conn)
' 対象のテーブルオブジェクトを取得
Dim Table = con.GetTable(Of Cat)
' データ作成
Dim Cat As New Cat()
Cat.No = 5
Cat.Name = "こなつ"
Cat.Sex = "♀"
Cat.Age = 7
Cat.KindCd = "01"
Cat.Favorite = "布団"
' データ追加
Table.InsertOnSubmit(Cat)
' DBの変更を確定
con.SubmitChanges()
End Using
conn.Close()
End Using
' データ再検索
search()
MessageBox.Show("データを追加しました。")
End Sub
追加ボタンをクリックすると、固定ではありますがデータが追加されます。
''' <summary>
''' 更新ボタンクリックイベント
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click
Using conn As New SQLiteConnection("Data Source=SampleDb.sqlite")
' データベースオープン
conn.Open()
' データ更新
Using con As New DataContext(conn)
' 対象のテーブルオブジェクトを取得
Dim Table = con.GetTable(Of Cat)
' 選択されているデータを取得
For Each r As DataGridViewRow In dgvCat.SelectedRows
Dim Cat As Cat = CType(dgvCat.DataSource(), List(Of Cat)).Item(r.Index)
' テーブルから対象のデータを取得
Dim target As Cat = Table.Single(Function(x As Cat) x.No = Cat.No)
' データ変更
target.Favorite = "高いところ"
' DBの変更を確定
con.SubmitChanges()
Next
End Using
conn.Close()
End Using
' データ再検索
search()
MessageBox.Show("データを更新しました。")
End Sub
更新ボタンをクリックすると、選択された行の好物が更新されます。
''' <summary>
''' 削除ボタンクリックイベント
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click
Using conn As New SQLiteConnection("Data Source=SampleDb.sqlite")
' データベースオープン
conn.Open()
' データ削除
Using con As New DataContext(conn)
' 対象のテーブルオブジェクトを取得
Dim Table = con.GetTable(Of Cat)
' 選択されているデータを取得
For Each r As DataGridViewRow In dgvCat.SelectedRows
Dim Cat As Cat = CType(dgvCat.DataSource(), List(Of Cat)).Item(r.Index)
' テーブルから対象のデータを取得
Dim target As Cat = Table.Single(Function(x As Cat) x.No = Cat.No)
' データ削除
Table.DeleteOnSubmit(target)
' DBの変更を確定
con.SubmitChanges()
Next
End Using
conn.Close()
End Using
' データ再検索
search()
MessageBox.Show("データを削除しました。")
End Sub
削除ボタンをクリックすると、選択されている行のデータが削除されます。
とりあえず簡単ではありますが追加、更新、削除ができました。
次回はデータグリッドを直接編集してデータの更新等が行えるようにしたいと思います。
ではでは。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント