摘要:讀者詢問存取 Access 資料庫的相關問題
原發問問題:
章老師 有問題了 我要如何把TEXTBOX中的文字字串 依序寫入(更新) ACCESS資料庫中A資料表裡面的A1欄位 可以指導一下。書中我沒有翻到相關的範例
回答:
親愛的讀者您好,很感謝您對於章立民研究室的支持,有關於您提到的問題,回覆如下。
圖表1
圖表1所示者為程式範例的執行畫面,使用者可以按下對應的按鈕來新增、修改、或者是刪除Access資料庫(以本範例來說,指的就是「雜匯.mdb」)之「章立民工作室」資料表的資料。程式範例設計的重點說明如下:
q 請替「開始新增資料」按鈕的 Click 事件撰寫事件處理常式 btnInsert_Click,以便將使用者輸入的資料寫入「章立民工作室」資料表,程式碼如下所示:
Private Sub btnInsert_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles btnInsert.Click
If Me.btnInsert.Text = "開始新增資料" Then
Me.TextBox1.Text = "自動編號欄位"
Me.TextBox2.ReadOnly = False
Me.TextBox2.Text = ""
Me.TextBox3.Text = ""
Me.TextBox4.Text = ""
Me.TextBox5.Text = ""
Me.TextBox6.Text = ""
DateTimePicker1.Value = DateTime.Today
Me.TextBox8.Text = ""
DateTimePicker2.Value = DateTime.Today
NumericUpDown1.Value = 16788
NumericUpDown2.Value = 16788
DateTimePicker3.Value = DateTime.Today
Me.TextBox13.Text = ""
Me.btnInsert.Text = "執行新增作業"
ElseIf Me.btnInsert.Text = "執行新增作業" Then
' 利用 OleDbConnectionStringBuilder 物件來構建連接字串。
Dim connectStringBuilder As New OleDbConnectionStringBuilder()
connectStringBuilder.DataSource = _
"C:VB2005_IO_Data_SampleDatabase雜匯.mdb"
connectStringBuilder.Provider = "Microsoft.Jet.OLEDB.4.0"
Try
' 建立連接
Using con As New OleDbConnection(connectStringBuilder.ConnectionString)
Dim ID As Integer = 0
Dim idCMD As OleDbCommand = New OleDbCommand( _
"SELECT MAX(員工編號) FROM 章立民工作室", con)
' 開啟連接
con.Open()
ID = CInt(idCMD.ExecuteScalar() + 1)
' 新增資料記錄的 INSERT 陳述式
Dim insertStr As String = _
"INSERT INTO 章立民工作室 VALUES (" & _
"'" & ID & "'," & _
"'" & TextBox2.Text & "'," & _
"'" & TextBox3.Text & "'," & _
"'" & TextBox4.Text & "'," & _
"'" & TextBox5.Text & "'," & _
"'" & TextBox6.Text & "'," & _
"'" & DateTimePicker1.Value & "'," & _
"'" & TextBox8.Text & "'," & _
"'" & DateTimePicker2.Value & "'," & _
NumericUpDown1.Value & "," & _
NumericUpDown2.Value & "," & _
"'" & DateTimePicker3.Value & "'," & _
"'" & TextBox13.Text & "')"
' 使用 OleDbCommand 類別的第三個建構函式
' 來建立 SqlCommand 物件
Dim insertCMD As New OleDbCommand(insertStr, con)
' 執行資料命令來新增資料記錄
insertCMD.ExecuteNonQuery()
End Using
MessageBox.Show("已經成功新增資料記錄。", "恭喜您", _
MessageBoxButtons.OK, MessageBoxIcon.Information)
Me.btnInsert.Text = "開始新增資料"
' 重新將所有員工的身份證字號填入 ListBox 控制項
FillListBoxId()
Catch ex As Exception
MessageBox.Show(ex.ToString(), "請注意", MessageBoxButtons.OK, _
MessageBoxIcon.Stop)
End Try
End If
End Sub
q 請替「更新資料」按鈕的 Click 事件撰寫事件處理常式 btnUpdate_Click,以便更新「章立民工作室」資料表的資料,程式碼如下所示:
Private Sub btnUpdate_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnUpdate.Click
' 利用 OleDbConnectionStringBuilder 物件來構建連接字串。
Dim connectStringBuilder As New OleDbConnectionStringBuilder()
connectStringBuilder.DataSource = _
"C:VB2005_IO_Data_SampleDatabase雜匯.mdb"
connectStringBuilder.Provider = "Microsoft.Jet.OLEDB.4.0"
Try
' 建立連接
Using con As New _
OleDbConnection(connectStringBuilder.ConnectionString)
' 更新資料記錄的 UPDATE 陳述式
Dim updateStr As String = _
"UPDATE 章立民工作室 " & _
" SET 姓名=" & "'" & TextBox3.Text & "'" & _
" ,性別=" & "'" & TextBox4.Text & "'" & _
" ,地址=" & "'" & TextBox5.Text & "'" & _
" ,郵遞區號=" & "'" & TextBox6.Text & "'" & _
" ,出生日期=" & "'" & DateTimePicker1.Value & "'" & _
" ,婚姻狀況=" & "'" & TextBox8.Text & "'" & _
" ,僱用日期=" & "'" & DateTimePicker2.Value & "'" & _
" ,起薪=" & NumericUpDown1.Value & _
,目前薪資=" & NumericUpDown2.Value & _
" ,加薪日期=" & "'" & DateTimePicker3.Value & "'" & _
" ,部門=" & "'" & TextBox13.Text & "'" & _
" WHERE 身份證字號 = " & _
"'" & ListBoxId.SelectedItem.ToString() & "'"
' 使用 OleDbCommand 類別的第三個建構函式
' 來建立 SqlCommand 物件
Dim updateCMD As New OleDbCommand(updateStr, con)
' 開啟連接
con.Open()
' 執行資料命令來更新資料記錄
updateCMD.ExecuteNonQuery()
End Using
MessageBox.Show("已經成功更新資料記錄。", "恭喜您", _
MessageBoxButtons.OK, MessageBoxIcon.Information)
Catch ex As Exception
MessageBox.Show(ex.ToString(), "請注意", MessageBoxButtons.OK, _
MessageBoxIcon.Stop)
End Try
End Sub
q 請替「刪除資料」按鈕的 Click 事件撰寫事件處理常式 btnDelete_Click,以便將使用者所選取的該筆資料從章立民工作室資料表中刪除,程式碼如下所示:
Private Sub btnDelete_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnDelete.Click
' 利用 OleDbConnectionStringBuilder 物件來構建連接字串。
Dim connectStringBuilder As New OleDbConnectionStringBuilder()
connectStringBuilder.DataSource = _
"C:VB2005_IO_Data_SampleDatabase雜匯.mdb"
connectStringBuilder.Provider = "Microsoft.Jet.OLEDB.4.0"
Try
' 建立連接
Using con As New OleDbConnection(connectStringBuilder.ConnectionString)
' 刪除資料記錄的 DELETE 陳述式
Dim deleteStr As String = _
"DELETE FROM 章立民工作室 " & _
" WHERE 身份證字號 = " & "'" & _
ListBoxId.SelectedItem.ToString() & "'"
' 使用 OleDbCommand 類別的第三個建構函式
' 來建立 SqlCommand 物件
Dim deleteCMD As New OleDbCommand(deleteStr, con)
' 開啟連接
con.Open()
' 執行資料命令來刪除資料記錄
deleteCMD.ExecuteNonQuery()
End Using
MessageBox.Show("已經成功刪除資料記錄。", "恭喜您", _
MessageBoxButtons.OK, MessageBoxIcon.Information)
' 重新將所有員工的身份證字號填入 ListBox 控制項
FillListBoxId()
Catch ex As Exception
MessageBox.Show(ex.ToString(), "請注意", MessageBoxButtons.OK, _
MessageBoxIcon.Stop)
End Try
End Sub
q 事件處理常式都會呼叫自訂方法 FillListBoxId,以便將「章立民工作室」資料表的內容重新載入至 ListBox 控制項,程式碼如下所示:
Private Sub FillListBoxId()
Try
' 利用 OleDbConnectionStringBuilder 物件來構建連接字串。
Dim connectStringBuilder As New OleDbConnectionStringBuilder()
connectStringBuilder.DataSource = _
"C:VB2005_IO_Data_SampleDatabase雜匯.mdb"
connectStringBuilder.Provider = "Microsoft.Jet.OLEDB.4.0"
Using con As New OleDbConnection(connectStringBuilder.ConnectionString)
' 建立資料命令物件(亦即 OleDbCommand 物件)
Dim foxCMD As New OleDbCommand
foxCMD.Connection = con
foxCMD.CommandText = "SELECT 身份證字號 FROM 章立民工作室"
' 開啟連接
con.Open()
Using myReader As OleDbDataReader = _
foxCMD.ExecuteReader( _
CommandBehavior.CloseConnection Or CommandBehavior.SingleResult)
ListBoxId.Items.Clear()
' 將員工編號填入 ListBox 控制項中
If myReader.HasRows Then
While myReader.Read()
ListBoxId.Items.Add(myReader.GetString(0))
End While
End If
End Using
' 選取第一個選項
ListBoxId.SelectedIndex = 0
End Using
Catch Ex As Exception
End Try
End Sub