Upload
graham-hall
View
1.178
Download
8
Embed Size (px)
Citation preview
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 1
บทท 1 เรมตนสราง Project และการสรางเมน
1.1 เปดโปรแกรม VB 2008 แลวท าการ New Project ขนมาแลวตงชอวา MyTraining โดยท าการจดเกบProject ไวท C: ตามภาพ
1.2 ท Properties Form ท าการปรบคา (Name) เปน FormMenu และท Text เปนค าวา เมนหลก
1.3 จากนนท าการเปลยนชอ Form1.vb เปน FormMenu.vb
1.4 ท ToolBox เลอกเครองมอชอวา ToolStrip มาวางไวท FormMenu
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 2
1.5 น า Mouse คลกเลอกชนดเมนทเปน Button ตามรป
1.6 น า Mouse เลอกทรปภาพแลวท าการคลกขวา เลอก DisplayStyle ชนดเปน ImageAndText
1.7 ท Properties ในหวขอ Text ใหพมพค าวา ขอมลหนงสอตามภาพ
1.8 จากนนท าการน ารปภาพเขาโดย Click เลอกทขอมลหนงสอแลวท าการ Click ขวา เลอก Set Image…
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 3
1.9 ท าการเลอกทหวขอ Project resource file เพอจะใหน าภาพทเราตองการมาไวท Project เราแลวกดปม Import…
1.10 เลอกรปหนงสอทอยใน Folder แลว ท าการ OK
1.11 จะไดรปหนงสอเปนรปเลกๆ ตามภาพ
1.12 จากนนท าการปรบแตใหรปมขนาดตามปกต โดยคลกเลอกทตวเมน จากนนก าหนด Properties เมนดานขวาโดยเลอกค าวา ImagesScaling เปน None
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 4
1.13 รปภาพทท าการ Import เขาไปจะมขนาดเทารปจรงดงภาพ
1.14 ท าการเพมเสนแบงขอความปมโดยเลอกทรปแบบเมนถดไป แลวเลอกเสนแบงขอความเมนเปน Separator ดงภาพ
1.15 จะไดเลนแบงตามภาพ โดยเสนแบงนจะท าใหเมนดดและแบงแยกกนไดดขน ดดและมระดบ
1.16 ท ToolBox การเพม StatusStrip เพอใหเมนหลกดดขน โดยท าการลากเครองมอนมาไวท FormMenu
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 5
1.17 ท าการปรบแตง FormMenu นใหเปน Form หลกและในการใชงานโปรแกรม Form อนๆ จะรนอยภายใตการท างานของ FormMenu น สามารถก าหนดไดโดยน า Mouse คลกท FormMenu แลวก าหนด Properties ในหวขอท IsMdiContainer จาก False เปน True ตามรป
1.18 รปแบบเมนทสรางเสรจ จากนนท าการ Run โปรแกรมเพอทดสอบเมนทเราสรางไว
1.19 ถาเมนมขนาดไมเตมจอภาพของเครองคอมพวเตอรใหท าการก าหนดคา ให Form Menu เตมจอท Properties โดยเลอก FormMenu ในหวขอ WindowsState เปน Maximized ตามภาพแลวทดลองรนโปรแกรมอกครง
1.20 เนองจากในขอมลหนงสอในตารางฐานขอมลประกอบดวย ตารางทเชอมโยงกน 3 ตารางประกอบดวย
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 6
1.21 ดงนนในการเขยนโปรแกรมเพมขอมลหนงสอ จะตองท าการเพมขอมล 3 สวนคอ (1) ขอมลประเภทหนงสอ (2) ขอมลส านกพมพ กอนถงจะท าในสวนท (3) ขอมลหนงสอ ดงนนในสวนของขอมลหนงสอจะตองท าการปรบเปลยนเมนมาเปนแบบ Drop Down Menu แทนดวยวธการคลกเลอกเมนขอมลหนงสอ แลวคลกขวา ท าการ Convert To DropDownButton
1.22 ท าการเพมขอมลหนงสอดงตอไปน
1.23 ท าการใสขอมลรปภาพแบบเดยวกบทเคยท าเมนทผานมา
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 7
1.24 ในหวขอนใหนกศกษาท าเมนเพมโดยมรปแบบดงตอไปน
\
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 8
บทท 2 การเขยนโปรแกรม Login เบองตน
2.1 ท าการเพม Form ใหมแลวท าการเปลยนชอเปน FormLogin ดงรป
2.2 ท าการสราง Form Login ดงภาพโดยมรายระเอยดดงตอไปน
ก าหนดคาตามน
ก าหนดคา ก าหนด Properties
Form (Name) FormLogin Text FormLogin
TextBox1 (Name) TblUser
TextBox2 (Name) TblPassword UseSystemPasswordChar True
Button1 (Name) ButtonOK Button2 (Name) ButtonCancel
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 9
2.3 เมอเสรจเรยบรอยแลวใหท าการเปด FormMenu ขนมาแลวน า Mouse คลกเลอก ToolStrip1 ดานลาง FormMenu จากนนก าหนดคา Properties หวขอ Enabled จาก True เปน False
2.4 จากนนน า Mouse 2 Click ทกลาง FormMenu เพอท าการเขยนค าสงดงตอไปน
Private Sub FormMenu_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
FormLogin.MdiParent = Me
FormLogin.Show()
End Sub
2.5 จากนนท าการ Run โปรแกรมดวา FormLogin อยภายใต Form Menu หรอไม
ถาตองการให Form Login อยตรงกลาง Form Menu ใหก าหนด Properties ของ Form Login ใน
หวขอ StartPosition เปน CenterScreen
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 10
2.6 ขนตอนตอไปนจะเปนการเขยนโปรแกรมค าสงเพอท าการตรวจสอบวามการปอน Username หรอไม ถาชองทรบคา Username เปนคาวาง ให Cursor รอรบคา Username จนกวาคาในชอง Username จะมคา ซงท านองเดยวกนในชอง Password กจะมการตรวจสอบเดยวกบ Username ดวย และเมอทง Username และ Password มขอมลแลว โปรแกรมจะท าการตรวจสอบอกครงวา Username และ Password ถกตองหรอไมตอไป ซงในเหตการณนจะกระท าการตรวจสอบในขณะทเรา Click ทปม OK ดงนนเราจงตองเขยนโปรแกรมฝงทปม OK โดยท าการ 2 Click ทปม OK แลวท าการเขยนโปรแกรมดงน
Public Class FormLogin
Private Sub ButtonOK_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ButtonOK.Click
If TblUser.Text = "" Then
MessageBox.Show("กรณาปอน Username ใหถกตอง. ", "ค าเตอน", _
MessageBoxButtons.OK, _ MessageBoxIcon.Exclamation, _
MessageBoxDefaultButton.Button1)
TblUser.Focus()
Exit Sub
End If
End Sub
2.7 เมอท าการเขยนโปรแกรมตรวจสอบคาในชอง Username เสรจแลวใหนกศกษาเขยนโปรแกรมเพมเตมเพอท าการตรวจสอบ Password วามคาวาหรอไมเองครบ
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 11
2.8 เมอท าการตรวจสอบ Username และ Password วามการปอนขอมลหรอไมแลว อนดบตอไปคอการเขยนโปรแกรมวา Username และ Password ทปอนมานนถกตองหรอไม ถาถกตอง เมนท Form Menu จะสามารถใชงานได แตถา Username และ Password อยางใดอยางหนงไมถกตอง จะแสดง Message Box ขนมาวา Username หรอ Password ไมถกตอง และระบบจะใหท าการปอนขอมลใหม จนกวาจะถกตองอยางนไปเลอยๆ
If ((TblUser.Text = "admin") And (TblPassword.Text = "admin")) Then
FormMenu.ToolStrip1.Enabled = True
Me.Close()
Else
MessageBox.Show("กรณาปอน Username หรอ Password ใหถกตอง. ", "ค าเตอน", _
MessageBoxButtons.OK, _
MessageBoxIcon.Exclamation, _ MessageBoxDefaultButton.Button1)
TblUser.Clear()
TblPassword.Clear()
TblUser.Focus()
End If
2.9 ในกรณทเรา Click ทปม Cancel ใหโปรแกรมจบการท างานของโปรแกรม โดยเราจะเขยนค าสงฝงทปม Cancel ดงตอไปน
Private Sub ButtonCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonCancel.Click
FormMenu.Close()
End Sub
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 12
บทท 3 การเขยนโปรแกรมตดตอฐานขอมลดวย Wizard (ADO.NET)
3.1 ท าการเพม Form ขนมาใหมอก 1 Form ชอ FormBookType.vb
3.2 ท าการตดตอกบฐานขอมลโดยใชเมน Data เลอก Add New Data Source…
3.3 ท าการเลอกท Database แลวท าการ Next
3.4 ท าการเลอก New Connection…
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 13
3.5 ทหนาจอ Add Connection ท าการเลอกสถานทตดตอไฟล โดยคลกทปม Change…
3.6 ตอมาท าการเลอกชนดของฐานขอมล ในทนฐานขอมลเราจะเปน Microsoft Access Database File แลวท าการเลอก OK
3.7 จากนนโปรแกรมจะใหเราเลอกทเกบไฟลของฐานขอมล Microsoft Access โดย Browse… ไปหาทเกบไฟล
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 14
3.8 โปรแกรมจะแสดงใหเราทราบวาในขณะนสามารถท าการเชอมตอฐานขอมลไดเรยบรอยแลวใหท าการกดปม Next
3.9 ระบบจะรายงานวาจ าท าการ Copy database ไวท Project ในขนตอนนใหตอบ No
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 15
3.10 ระบบจะท าการเขยนค าสงในการเชอมตอฐานขอมลโดยเปดโอกาศใหเราตงชอไฟลทจะใชเชอมตอฐานขอมล ในทนใหตงชอวา DatabaseConnectionString แลวท าการ Next
3.11 ตอมาระบบจะท าการสราง DataSet เพอท าการเลอกตารางตางๆ ทเราตองการใชงานมาเกบไวในหนวยความจ าในทนเลอกTable ชอ Types และในชอง DataSet name ใหตงชอวา BookTypeDataSet แลวท าการ Finish
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 16
3.12 เมอท าการ Finish แลว ท Solution Explorer จะมการเพมไฟล 2 ไฟลดงภาพ
File app.config เปนไฟลทระบบสรางขนเพอใชในการเชอมตอฐานขอมล File BookTypeDataSet.xsd เปนไฟลทระบบสรางขนเมอเราท าการเลอกตารางทจะใชงาน
ระบบวามตารางอะไรบาง ในขณะทเรารนโปรแกรม BookTypeDataSet จะท าการเลอกตารางทเราก าหนดมาเกบไวทหนวยความจ า
3.13 ทหนาตางทางดานซายมอ จะปรากฏขอมลของตารางทเราเลอกใน BookTypeDataSet วามขอมลอะไรบางซง DataSet นนจะมเพยงตารางเดยวคอตาราง Type
3.14 ขนตอนตอไปเปนการน าขอมลในฐานขอมลทก าหนดไวท DataSet ชอ BookTypeDataSet มาแสดงบน FormBookType ดวยการน าเครองมอใน Toolbox ชอ DataGridView มาวางท FormBookType จากนนก าหนด Properties ท Name ชอ TypeDataGridView จากนนท าการเชอมตอขอมลระหวาง DataGridView กบ BookTypeDataSet ดงภาพ
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 17
3.15 เมอเสรจแลว DataGridView จะแสดงขอมลใน DataGridView ทเปนหวตารางออกมาดงรป
3.16 เมอท าการรนโปรแกรมท FormBookType จะแสดงขอมลประเภทหนงสอดงงภาพ
3.17 จากนนท าการน า Textbox และ Label มาท าการสราง Formดงภาพ โดย Textbox รหสประเภทตงชอ (Name) TypeIDTextBox และ Textbox ชอประเภทตงชอ (Name) TYpeNameTextBox
3.18 เมอเสรจแลวใหนกศกษาน า Mouse เลอกท Textbox รหสประเภท แลวท าการ Bindings Data ดวยเมน Text จากนนท าการเลอก TypeBindingSourde ท Columns TypeID ดงรป
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 18
3.19 ท าการ Binding ในสวนของชอประเภทหนงสอ แลวท าการ Run โปรแกรมเพอทดสอบ
3.20 จากการท างานของโปรแกรมและการแสดงผลดงกลาวทดานลางของ Form จะมเครองมอ 4 ชนท
ชวยใหเราสามารถท างานไดดงภาพ
BookTypeDataSet คอสวนแรกทท าหนาทดงขอมลตารางจากฐานขอมลมาเกบไวทหนวยความจ าขณะทเรารนโปรแกรมและเลอกใช Dataset น
TypeBindingSource ท าหนาทผกตดขอมลทจะแสดผลในแตละคอลมน โดยสงเกตทเราน า Mouse เลอกท DataGrid แลวขอมลจะแสดงท Textbox ตามทเราเลอก
TypeTableAdapter เปนตวทหนาทรอรบค าสง เพม แกไข และลบขอมล ระหวาง หนวยความจ ากบฐานขอมลจรงวาจะท าการบนทกทฐานขอมลจรงหรอไม โดยเราตองเขยนค าสงทเปน Source code สงโดยตรงอกครงหนง
TableAdapterManager เปนตวทท าหนาทรบค าสง เพม แกไข ลบ ตลอดจนการคนหา เชอมความสมพนธของตารางทกตารางใน DataSet
3.21 ใหนกศกษาท าการเพมปมตางๆ ลงไปใน Form แลวท าการก าหนดคาตางๆ ดงรป
ปม เพม ก าหนด Prosperity (Name) เปน ButtonAdd ปม ลบ ก าหนด Prosperity (Name) เปน ButtonDelete
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 19
ปม แกไข ก าหนด Prosperity (Name) เปน ButtonEdit ปม บนทก ก าหนด Prosperity (Name) เปน ButtonSave ท Textbox ประเภทหนงสอก าหนด Prosperity ReadOnly เปน True ในสวนของ Textbox TypeID หรอ รหสประเภทหนงสอ ทฐานขอมลก าหนดใหเปนการให
รหสใหแบบอตโนมต ดงนนจงตดทงครบ 3.22 จากนนท าการเขยนโปรแกรมเพมสงใหปมเพมสามารถท างานรบขอมล โดย 2Click ทปมเพม
Public Class FormBookType
Private Sub FormBookType_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
'TODO: This line of code loads data into the 'BookTypeDataSet.Types' table. You can move, or remove it, as needed.
Me.TypesTableAdapter.Fill(Me.BookTypeDataSet.Types)
End Sub
Private Sub ButtonAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles ButtonAdd.Click
Me.TYpeNameTextBox.ReadOnly = False Me.TYpeNameTextBox.Focus()
Me.TypesBindingSource.AddNew()
End Sub
End Class
3.23 เมอท าการรนโปรแกรมแลว คลกปมเพม แลวปอนขอมลท Textbox แลวคลกทวาง ขอมลจะท าการเพมลงใน DataGrid ใหอตโนมต แตเมอเรา Stop โปรแกรมและท าการ Run Program ใหมขอมลทเพมลงไปจะหายไป อนเนองมาจาก การเพมขอมลนนเปนการในสวนของหนวยความจ า ของ DataSet เทานนยงไมไดเปนการท างานกบฐานขอมลโดยตรง ดงนนตอไปนจะเปนการเขยนโปรแกรมทปม บนทก เพอท าการบนทกขอมลจากหนวยความจ าลบฐานขอมล
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 20
3.24 ทปม บนทก ท าการ 2 Click ลงไปเพอเขยนค าสงบนทก ดงน Private Sub ButtonSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonSave.Click
Me.Validate() Me.TypesBindingSource.EndEdit()
Me.TableAdapterManager.UpdateAll(Me.BookTypeDataSet) Me.TypesTableAdapter.Fill(Me.BookTypeDataSet.Types)
Me.TYpeNameTextBox.ReadOnly = True
End Sub
3.25 ทปม ลบ ท าการ 2 Click ลงไปเพอเขยนค าสงลบ ดงน
Private Sub ButtonDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonDelete.Click
Me.TypesBindingSource.RemoveCurrent()
End Sub
3.26 ทปมแกไข ท าการ 2 Click ลงไปเพอเขยนค าสงแกไข ดงน
Private Sub ButtonEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles ButtonEdit.Click
Me.TYpeNameTextBox.ReadOnly = False Me.TYpeNameTextBox.Focus()
End Sub
3.27 ในขนตอนตอมาเปนการ Lock และ ซอน ปม ตางๆ เพอบงคบใหผใชสามารถใชตามทระบบตองการเพอปองกนความผดพลาด และ Error ของระบบ โดยใชค าสงซอนปม และ การปด – เปด การท างานของปม ดงน
1) เมอรนโปรแกรมใหปม บนทก หายไป 2) เมอเราคลกปม เพม ปมเพมจะหายไปแลวปม บนทก ปรากฏขนมาใหสามารถใชงานได
สวนปม แกไข และ ลบ ไมสามารถใชงานได 3) เมอคลกปม บนทก แลว ปมบนทกจะหายไป ปม เพม แกไข ลบ สามารถใชงานได 4) เมอคลกปม แกไข ปมเพมจะหายไปแลวปม บนทก ปรากฏขนมาใหสามารถใชงานได สวน
ปม แกไข และ ลบ ไมสามารถใชงานได 5) เมอคลกปม ลบ ปมเพมจะหายไปแลวปม บนทก ปรากฏขนมาใหสามารถใชงานได สวน
ปม แกไข และ ลบ ไมสามารถใชงานได หมายเหต : ใหนกศกษาใชความรเดมทเรยนมาเขยนโปรแกรมค าสงบงคบปมเอง
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 21
3.28 เราสามารถเขยนโปรแกรมเพอทดสอบความถกตองของขอมลไดโดยใช MessageBox โดยมรปแบบของการแสดงคา
1) แบบท 1 แบบทมขอความแจงเตอนเพยงอยางเดยว
MessageBox.Show(" ขอความทจะแจงเตอน.", "ขอความบน Titlebar ", _
MessageBoxButtons.OK, _ MessageBoxIcon.Exclamation, _
MessageBoxDefaultButton.Button1)
2) แบบท 2 แบบทสามารถเลอกเหตการณได
MessageBox.Show(" ขอความแจงเตอน ", " ขอความบน TitleBar ", _
MessageBoxButtons.YesNo, _
MessageBoxIcon.Question, _ MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
การใชงาน MessageBox แบบมเงอนไขของ VB.Net จะตองก าหนดตวแปรเพอรบขอมล
ตอจากนนใช ค าสง IF เพอท าการตรวจสอบดงน
Dim ResultMsgBox As DialogResult
ResultMsgBox = MessageBox.Show(" ขอความแจงเตอน ", " ขอความบน TitleBar ", _
MessageBoxButtons.YesNo, _
MessageBoxIcon.Question, _ MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
If ResultMsgBox = Windows.Forms.DialogResult.Yes Then
' ตอบ Yes
Else ' ตอบ No
End If
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 22
3.29 การใช Messagebox แจงเตอนทปม เพม โดยถามกอนวาตองการจะเพมขอมลใชหรอไม ถาตอบใช ระบบถงจะใหท าการปอนขอมลประเภทหนงสอ
Private Sub ButtonAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonAdd.Click
Dim ResultMsgBox As DialogResult
ResultMsgBox = MessageBox.Show(" ตองการทจะเพมขอมล ใช หรอ ไม ", "แจงเตอน ", _ MessageBoxButtons.YesNo, _
MessageBoxIcon.Question, _ MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
If ResultMsgBox = Windows.Forms.DialogResult.Yes Then
Me.TYpeNameTextBox.ReadOnly = False Me.TYpeNameTextBox.Focus()
Me.TypesBindingSource.AddNew()
End If
End Sub
3.30 ในหวขอนใหนกศกษาเขยนค าสงแจงเตอนการท างานของปมตางๆ ดงตอไปน
1) คลกปมบนทกใหแสดง MessageBox ขนมาบอกวา ระบบไดท าการบนทกขอมลเรยบรอยแลว
2) คลกปมลบ ใหแสดง MessageBox ขนมาบอกวา ตองการลบขอมล ใช หรอ ไม โดยถาคลกปม Yes ระบบจะลบขอมลออก
3) คลกปมแกไข ใหแสดง MessageBox ขนมาบอกวา ตองการแกไขขอมล ใช หรอ ไม โดยถาคลกปม Yes ระบบจะใหแกไขขอมล
หมายเหต : ใหนกศกษาศกษาจากเอกสารแลวประยกตค าสงมาใชกบโปรแกรมเอง
3.31 การปรบแตง DataGrid เพอใหสามารถแสดงผลตามตองการ ดวยการคลกขวา ท DataGrid แลวเลอก Edit Columns…
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 23
3.32 ท าการปรบแตง Columns โดยไปลบ Columns ของ TypeID ออกเนองจากเปนการรนแบบอตโนมต จากนนท Columns TypeName ท าการเปลยนหวขอตารางเปน ชนดหนงสอดงภาพ
และก าหนดให AutoSizeMode เปน Fill
3.33 นอกก าหนด Columns ของ DataGrid แลว เรายงสามารถตงคาของตารางใหสามารถแสดงผลแบบตางๆ ไดโดยการคลก Mouse ท DataGrid แลวท าการปรบแตงท Properties เชนก าหนดหวขอ AlternatingRowDefaultCellStyle โดยเลอกรปแบบของส BackColor ตามใจชอบครบ
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 24
3.34 กลบมาท FormMenu ท าการ 2Click ท หวขอขอมลประเภทหนงสอ
3.35 แลวท าการเขยนค าสงก าหนด Form Type ใหเปน Form ลก จากนนท าการเรยก Form มาใชงาน
Private Sub ประเภทหนงสอToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ประเภทหนงสอToolStripMenuItem.Click
FormBookType.MdiParent = Me
FormBookType.Show()
End Sub
3.36 ทดสอบการรนโปรแกรมท FormMenu
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 25
บทท 4 การเขยนโปรแกรมเชอมความสมพนธระหวางตาราง
4.1 ท าการเพม Form ใหมขนมาอก 1 Form โดยตงชอวา FormBooks.vb
4.2 จากตารางความสมพนธ จะเหนวาตารางขอมลหนงสอ (Books) นนมความสมพนธกบ ตารางประเภทหนงสอ (Types) และ ตารางส านกพมพ (Publishers) ดงนนการทเราจะเพมขอมลหนงสอไดเราตองเอาขอมลจากตาราง Types และ Publishers มารวมใชงานในฟอรมขอมลหนงสอดวย
4.3 เมอเมอเขาใจแลวในขนตอนตอไปจะเปนการสราง DataSet ขนมาใหมชอวา BookDataSet ซงภายในประกอบดวยตาราง 3 ตารางคอ Type Books และ Publishers ดวยการ Add New Data Source… จากเมน Data
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 26
4.4 เลอกค าวา Database แลวท าการคลกปม Next สงเกตวาระบบจะน าขอมลการชอมตอทบนทกไวในระบบมาแสดงใหทราบ เพอเปนการรวดเรวในการท างาน โดยในขนตอนนใหเราคลกปม Next ตอไป
4.5 จากนนโปรแกรมจะใหเลอกตารางทจะใชงานใน FormBooks.vb โดยใหเลอกตามภาพและท าการตงชอ DataSet ชอ BooksDataSet แลวท าการ Finish
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 27
4.6 เมอเสรจแลว ถาเราเปดหนาตาง DataSource จะพบวาขณะนม DataSet อย 2 DataSet ดวยกนซงแตละ DataSet กจะมตารางทเราเลอกใชงานแสดงใหเหนดงภาพ
4.7 น า DataGridView1 มาวางไวท Form แลวตงชอใหมท Prosperity (Name) ชอ BookDataGridView จากนนท าการเชอมตอ DataSource โดยเลอก BooksDataSet เลอก Table Books
4.8 ท าการรนโปรแกรมเพอทดสอบการแสดงผลของ DataGrid ขอมลหนงสอดงรป
4.9 ท Data Sources ท าการเปลยนรปแบบการแสดงผลขอมลจาก DataGridView เปน Datails
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 28
4.10 เมอเสรจแลวท าการลากชอ Columns จากตารางหนงสอมาวางไวท Form
4.11 เมอไดตามรปแบบนแลวท าการ ท าสอบโดยการรนโปรแกรม
4.12 ท าการปรบแตง Form ท าการเพมปม เพม ลบ แกไข และบนทกไวตอจากขอมลหนงสอดงรป
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 29
ก าหนดคาใหแกปมดงน 1) ปม เพม ตงชอ (Name) วา ButtonAdd 2) ปม ลบ ตงชอ (Name) วา ButtonDelete 3) ปม แกไข ตงชอ (Name) วา ButtonEdit 4) ปม บนทก ตงชอ (Name) วา ButtonSave
4.13 เมอท าการ Run โปรแกรมจะเหนไดวาประเภทหนงสอ กบ ส านกพมพแสดงเปนตวเลขรหส ซงเปนการยากทจะท าใหผยากตอการจดจ า วาเปนรหสประเภทใด ส านกพมพใด ดงนนวธการแกปญหานจะเรยกวาวธการผขอมลของความสมพนธระหวางตารางในหวขอถดไป
4.14 ใหนกศกษาลบ Textbox ประเภทหนงสอออก จากนนไปทหนาตาง DataSources แลวท าการเลอก BooksDataSet เลอกทตาราง Types เลอกรปแบบเปน ComboBox
4.15 จากนนในนกศกษาลากขอมลจากตาราง Type มาวางท Form ดงภาพ
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 30
4.16 เมอท าการรนโปรแกรมสงเกตวา เมอเราเลอกขอมลท DataGrid ขอมลประเภทหนงสอยงคงไมเปลยนแปลตามมความสมพนธของตารางเนองจากโปรแกรมยงไมผกความส าพนธระหวางตาราง Books กบ Type
4.17 วธการผกความสมพนธโดย Click ท Combobox ทลกศรทางขวามอท าการ คลกเลอก ตามภาพ
4.18 แลวท าการรนโปรแกรมอกครง และทดสอบเลอกขอมลท DataGrid ดวาขอมลมการเปลยนแปลงหรอไม ถาไดในสวนของส านกพมพ ใหนกศกษาท าเชนเดยวกน (ท าเองนะครบ)
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 31
4.19 ท าการปรบแตง DataGrid ขอมลหนงสอดงภาพ
4.20 ในการรนโปรแกรมใหนกศกษาสงเกตวาใน DataGrid ท Column ชอส านกพมพทแสดงเปนรหสส านกพมพ ซงเราสามารถเปลยนใหรหสส านกพมพเปนชอส านกพมพไดเชนกน โดยท าการคลกขวาท DataGrid แลวเลอก Edit Columns
4.21 ท าการเลอก Column ชอส านกพมพ จากนนท ColumnType เลอก DataGridViewComboBoxColumn
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 32
4.22 จากนนเชอมความส าพนธระหวางตาราง Books กบ ตาราง Publisher ดงรป
4.23 เมอเสรจแลวท าการรนโปรแกรมจะไดรปแบบการแสดงขอมลดานลางน
4.24 เมอท าการรนโปรแกรมเสรจเรยบรอยแลวใหนกศกษาเขยน Code โปรแกรมฝงไวทปมทง 4 เพอใหสามารถ เพม ลบ แกไข และ บนทกขอมลในตารางหนงสอได
Public Class FormBooks
Private Sub FormBooks_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.PublishersTableAdapter.Fill(Me.BooksDataSet.Publishers)
Me.TypesTableAdapter.Fill(Me.BooksDataSet.Types) Me.BooksTableAdapter.Fill(Me.BooksDataSet.Books)
End Sub
Private Sub ButtonAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonAdd.Click
Me.BooksBindingSource.AddNew() Me.TypesComboBox.SelectedIndex = 0
Me.PublishersComboBox.SelectedIndex = 0
Me.BookIDTextBox.Focus() End Sub
Private Sub ButtonDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles ButtonDelete.Click Me.BooksBindingSource.RemoveCurrent()
End Sub
Private Sub ButtonEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles ButtonEdit.Click Me.BookIDTextBox.Focus()
End Sub
Private Sub ButtonSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles ButtonSave.Click Me.Validate()
Me.BooksBindingSource.EndEdit() Me.TableAdapterManager.UpdateAll(Me.BooksDataSet)
End Sub
End Class
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 33
บทท 5 การเขยนโปรแกรมคนหาขอมล
5.1 ท าการ Add Form ใหมแลวท าการตงชอวา FormExampleSerch.vb ตามภาพ
5.2 ทหนาตาง Data Sources สงเกตวาจะม Data Set อยทงหมด 2 ตว คอ BooksDataSet และ BookTypeDataSet ซงในแตละ Data Set กจะมตารางแตกตางกน ในบทนเราจะท าการเขยนโปรแกรมเพอท าการคนหาขอมลประเภทหนงสอ โดยใช DataSet ชอ BookTypeDataSet ซงใน DataSet นมตาราง Types ซงเปนตารางประเภทหนงสออยภายใน DataSet
5.3 กอนอนท าการสราง DataGridView กอนเพอน าขอมลในตาราง Type จาก BookTypeDataSet มาแสดงผลขอมลกอน
5.4 จากนนท าการเชอมโยงตาราง Type จาก BookTypeDataSet กบ DataGridView
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 34
5.5 ท าการรนโปรแกรมเพอทดสอบการแสดงผล
5.6 กอนทจะท าการเขยน Query ทเปนภาษา SQL เบองตนใหนกศกษาท าความเขาใจกบเครองมอ 3 ชนทมความสมพนธกนเมอน าตารางจาก DataSet มาแสดงบน Form
5.7 ตวแรกเรยกวา DataSet ในทนชอ BookTypeDataSet ท าหนาทเกบตารางฐานขอมลจากฐานขอมลมาไวทหนวยความจ าใน DataSet แตละ DataSet จะประกอบดวยตารางทเราเลอกใชงานจากฐานขอมล การดโครงสรา และความสมพนธของตารางใน DataSet สามารถท าไดโดยการคลกขวา แลวท าการเลอก Edit in DataSetDesigner… ตามภาพ
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 35
5.8 น DataSet นมตารางทเราเรยกใชงาน 1 ตารางคอตาราง Type ประกอบดวย 2 สวนคอ Data Table และ TableAdapter โดยหนาทของ TableAdapter คอ คนหา เพม ลบ แกไข ขอมลระหวาง DataTable กบฐานขอมลจรง
ในแตละ DataTable จะประกอบดวยชอตาราง และ Columns ของฐานขอมล ใน TableAdapter จะประกอบดวยค าสงทเปนภาษา SQL ทระบบสรางใหโดยท าหนาทหลก
คอ Insert, Update, Delete, Select โดยระบบจะเขยน Query เพอดงขอมลมาให 1 Query ชอวา Fill,GetData() เปน Method 2 Method ทใชในการสอสารขอมลคอ Method Fill และ Method GetData
ตวอยาง DataSet ทมตารางมากกวาหนงและความสมพนธกน
DataTable
TableAdapter
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 36
5.9 เราสามารถดค าสงภาษา SQL ในแตละ Query ไดโดยการเลอกท Query แลวท าการ Click ขวาแลวเลอกค าวา Configure… ดงภาพ
5.10 ในการเขยนโปรแกรมเพอท าการคนหาขอมลเราตองท า Query ขนมาใหมจากนนท าการระบวาจะท าการคนหาขอมลอะไร โดยเราสามารถท าการเพม Query จากแถบเครองมอทางดานซายมอ มาวางตอจาก Fill,GetData()
5.11 ระบบจะถามวาเราจะท าการ ให TableAdapter ท าการ query จากฐานขอมลโดยใชภาษา SQLใหเราท าการเลอกปม Next
5.12 จากนนท าการเลอกรปแบบของภาษา SQL ในทนเลอกหวขอแรกคอ เลอกทก Columns แลวท าการ Next
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 37
5.13 จากนนระบบจะเขยนค าสงภาษา SQL ใหดงภาพ แตในทนเราตองการใชเงอนไขในการแสดง
ขอมลโดยการปรบแตงแกไข Query ทปม ดานลาง
5.14 ทหนาตาง Query Builder ในชองทเราตองการคนหาในทนคอชอง TypeName ใน Column Fiter ท าการเพมค าสงดงภาพแลวกดปม OK
ค าสง LIKE เปนค าสงใหคนหาขอมล สวน SName เปนชอตวแปรทเราตงขนแลวตามดวยเครองหมายบากเปอรเซนทอยภายใตเครองหมายขด ซงเครองหมายเปอรเซนหมายถงอะไรกได รวมค าพดแลวหมายถง ค าทพมพคนหาในตวแปร SName แลวตามดวยค าอะไรกได
LIKE SName+'%'
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 38
5.15 โปรแกรมจะกลบมาแสดงค าสง SQL อกครง ใหท าการกดปม Next
5.16 จากนนท าการท าการตงชอ Fill a DataTable วา FillBySName พรอมกลบเลอก Return a DataTable แลวท าการ Finish
5.17 ท าการ Next เพอตรวจสอบความถกตอง และ Finish ระบบจะท าการเตม Query ใหดงภาพ
5.18 ท าการ Add Form ใหมแลวท าการตงชอวา FormExampleSerch.vb ตามภาพ
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 39
5.19 ในขนตอนตอไปเราตองท าการสรางตวแปร เรยกอกอยางวา Parameters เพอท าหนาทรบสงขอมลระหวาง Form กบ TableAdapter ใน DataSet โดยน า Mouse คลกเลอก FillBySName, GetDataBy() จากนนทหนาตาง Properties เลอก Parameters
5.20 ท าการเพม Parameters และก าหนดชอ SName ตามภาพแลวท าการ OK
5.21 สงเกตวาท Query จะมชอตวแปรตามมา
เลอก
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 40
5.22 จากนนท าการทดสอบ Query ทสรางขนโดยคลกขวา Preview Data
5.23 ท าการทดสอบการคนหาดงภาพ ถาไมม Error อะไรแสดงวาทกอยางถกตอง
5.24 กอนทจะท าการเขยนโปรแกรมคนหา ยงมเครองมออกหนงตวคอ TypeBindingSource ทเราตองรจกในภาษา VB เรยกวา BinfingSource เปนเครองมอทท าหนาทเชอมและผกขอมลระหวางตาราง(DataTable) ใน DataSet กบ FormControls ซงในขณะนกคอ DataGridView
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 41
โครงสรางการท างานของ ADO.NET
ดงนนจะเหนวาการดงขอมลใน DataSet หนงตารางจะประกอบดวย Control 2 ตวคอ BindingSource และ TableAdapter
5.25 เมอเขาใจหลกการแลวตอมาท Source Code ของโปรแกรม โดยการเลอก View Code
Public Class FormExampleSerch
Private Sub FormExampleSerch_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load 'TODO: This line of code loads data into the 'BookTypeDataSet.Types' table. You can
move, or remove it, as needed.
Me.TypesTableAdapter.Fill(Me.BookTypeDataSet.Types)
End Sub
End Class
จาก Code โปรแกรมเมอมการเชอม DataTable ใน TableAdapter ของ DataSet เขากบ DataGridView หรอเครองมอตวอนๆ เชน Textbox Combobox ฯลฯ ท Private Sub Program Form Load ระบบจะท าการเขยนค าสง Me.TypesTableAdapter.Fill(Me.BookTypeDataSet.Types) ซงหมายความวา อางถง TableAdapter ชอ TypeTableAdapter ให Fill ขอมลจาก DataSet ชอ BookTypeDataSet โดยเลอก DataTable ชอ Types มาเกบไวทหนวยความจ า โดยเราจะไปเชอมกบเครองมอทจะแสดงผลแบบใหนเราจะใชเครองมอ BindingSource ท าหนาทเชอมให
5.26 เมอพอเขาใจหลกการท างานแลวจากนนกลบมาท Form ท าการปรบแตง Form ดงภาพ
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 42
5.27 ทปมคนหา ท าการ 2 Click เพอท าการเขยน Code ดงน
Private Sub FormExampleSerch_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load 'TODO: This line of code loads data into the 'BookTypeDataSet.Types' table. You can
move, or remove it, as needed.
Me.TypesTableAdapter.Fill(Me.BookTypeDataSet.Types)
Me.DataGridView1.DataSource = TypesBindingSource
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
Dim SName As String
SName = TextBox1.Text
Me.TypesTableAdapter.FillBySName(Me.BookTypeDataSet.Types, SName)
End Sub
จาก Code สงเกตวา จะเหมอนกบการเขยนโปรแกรมในหวขอทแลว แตเพมเพยงใหมการสงคา
Parameters ชอ SName ชนดเปน String เทานน
5.28 ท าการรนโปรแกรมและทดสอบการคนหาขอมลดงภาพ
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 43
5.29 ในการท างานของเครองมอ Control ทง 3 ทมความสมพนธกนระหวางเครองมอ BindingSource ทท าหนาทผขอมลระหวางตารางใน DataTable ทใชค าสงตางๆ ใน TableAdater ในการจดการประมวลผลขอมลจากฐานขอมลจรง มาไวทหนวยความจ าในรปแบบ DataSet นอกจากนแลวในการท างานบางครงระบบยงมการน าเครองมออกชนดหนงใสเพมเตมให นนกคอ TableAdapterManager เครองมอตวนท าหนาทเปนตวกลางในการ SELECT, INSERT, DELETE, UPDATE ขอมลทมการใชงานหลายตารางทมความสมพนธกนภายใน From เดยวเพอใหงายในการเขยนค าสงจากการใชค าสงหลาย TableAdapter มาใชเพยงค าสงท TableAdapterManager บรรทดเดยวระบบจะท าใหทกตารางทมการเปลยนแปลง
5.30 จากการเขยนโปรแกรมคนหาขอมลน ใหนกศกษาท าการปรบแต FormBooks.vb ดงน
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 44
บทท 6 ADO.NET Programming Part 1
(SQL Selection)
ในการเขยนโปรแกรมตดตอฐานขอมลดวย VB.NET นนมวธการการเขยนโปรแกรมทนยมกน 2 แบบ คอ (1) การเขยนในรปโดยใชเครองมอชวยในการเชอมโยง และ (2) การเขยนโปรแกรมโดยระบ Source Code เพอสงการโดยตรง ซงในบทนจะเปนพนฐานการเขยนโปรแกรมในรปแบบท 2 ดวยเหตผลทวาในบางครงการใชเครองมอทมมาใหในการเขยนโปรแกรมแบบท 1 นนยงมขอจ ากดในการใชงานบางอยาง
ในบทนใหนกศกษาท าการเพม Form ใหมแลวท าการตงชอ FormExampleVbCode.vb จากนนก าหนดคาตางๆ ตามรป
ในการเขยนโปรแกรมเพอตดตอฐานขอมล Microsoft Access โดยการตดตอกบฐานขอมลในรปแบบ OLEDB โดยการระบ Code เพอสงงานในรปแบบของ ADO.NET นนมขนตอนดงตอไปน
1) ท าการสรางตวแปร DataSet 2) ท าการเชอมตอกบฐานขอมล 3) การใชค าสง SQL จาก DataAdapter Control มาเกบขอมลไวทหนวยความจ า 4) การน าขอมลจากการใชค าสง SQL มาเกบไวท DataSet 5) น าขอมลจาก DataSet มาใชกบ DataSource ผกกบคอนโทรลตางๆ 6) ท าการปดการใชงานฐานขอมล
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 45
6.1 ท FormExampleVbCode.vb ท าการ 2 Click ท Button1 เพอท าการเขยน Code เพอท าการสรางตวแปรเปนออบเจก DataSet
Public Class FormExampleVbCode
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
Dim TypeDataSet As New DataSet
End Sub
End Class
6.2 จากนนท าการสรางออบเจกชอ Conn โดยใชเครองมอทเปน NameSpace.Data.OleDb ชอ OleDbConnection ในการตดตอกบฐานขอมล
รปแบบ
Dim ConnectionString As New System.Data.OleDb.OleDbConnection(ขอความตดตอ)
การตดตอฐานขอมลรปแบบนจะใช Provider=Microsoft.Jet.OLEDB.4.0 ส าหรบ MS Access 2003เพยงอยางเดยวดงรปแบบ
Provider=Microsoft.Jet.OLEDB.4.0;Data Source='ทอยฐานขอมล';
ท าการเขยน Code Program เพอท าการตดตอฐานขอมลดงตอไปน Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim TypeDataSet As New DataSet
Dim ConnectionString As New System.Data.OleDb.OleDbConnection _ ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='|DataDirectory|\Books.mdb';")
ConnectionString.Open()
End Sub
ค าอธบาย |DataDirectory|\Books.mdb โดยค าวา DataDirectory หมายถงปกต VB.NET เมอท า
การรนโปรแกรมจะใชฐานขอมล MS Access ทอยใน Directory \bin\Debug ของ Folder โปรแกรมโดยอตโนมตไมวา Folder โปรเจกของเราจะอยทไหนกตาม
จากนนเมอท าการเชอมตอเสรจแลวตอมากจะท าการเปดการใชงานฐานขอมลดวย ค าสง
ConnectionString.Open()
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 46
6.3 จากนนท าการสรางออบเจก DataAdapter โดยใชเครองมอ NameSpace.Data.OleDb ชอ OleDbDataAdapter เพอใชในการประมวลผลดวยค าสง SQL
รปแบบ
Dim DataAdapter As New System.Data.OleDb.OleDbDataAdapter("SQLText", ConnectionObject)
ซงในการใชภาษา SQL ในค าสงนจะเปนการดงขอมลจากตาราง Types ทอยในฐานขอมล MS
Access มาใชงานโดยมาตราฐานรปแบบค าสงในการดงขอมลมาใชงานเรยกค าสงวา SELECT ดงรปแบบดงตอไปน
SQL SELECT Syntax
SELECT column_name1, column_name2, … FROM Table_name
หรอ
SELECT * FROM Table_name
หมายเหต * หมายถงทก Columns ในตาราง เมอเขาใจรปแบบการใชค าสงแลวตอไปเปนก าหนด DataAdapter ชอ TypeDataAdapter เพอใช
ค าสง SQL เพอดงตาราง Types จาก MS Access เกบไวทหนวยความจ าดงน
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim TypeDataSet As New DataSet
Dim ConnectionString As New System.Data.OleDb.OleDbConnection _ ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='|DataDirectory|\Books.mdb';")
ConnectionString.Open()
Dim TypeDataAdapter As New System.Data.OleDb.OleDbDataAdapter _ ("SELECT * FROM Types", ConnectionString)
TypeDataAdapter.Fill(TypeDataSet, "Types")
End Sub
6.4 ท าการน าขอมลทประมวลผลโดย DataAdapter มาเกบไวท DataSet
รปแบบ
DataAdapterName.Fill(DataSet, "TableName")
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 47
6.5 จากนนท าน าขอมลใน DataSet มาเกบไวท DataSource และท าการเชอมตอ DataSource กบ Control ทใชแสดงขอมลตางๆ ในทนคอ DataGriveView1 ในรปแบบ
รปแบบ
ToolboxControl.DataSource = DataSetName.Tables("TableName")
6.6 ท าการปดการใชงานฐานขอมล
รปแบบ
ConnectionOject.Close()
จากหวขอทงหมดสามารถเขยน Code เพอท าการแสดงผลตาราง Types ใน DataGridView1 ได
ดงตอไปนน
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
Dim TypeDataSet As New DataSet
Dim ConnectionString As New System.Data.OleDb.OleDbConnection _
("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='|DataDirectory|\Books.mdb';")
ConnectionString.Open()
Dim TypeDataAdapter As New System.Data.OleDb.OleDbDataAdapter _
("SELECT * FROM Types", ConnectionString)
TypeDataAdapter.Fill(TypeDataSet, "Types")
DataGridView1.DataSource = TypeDataSet.Tables("Types")
ConnectionString.Close()
End Sub
ท าการรนโปรแกรมจากนนกดปม Button1 เพอท าการแสดงผลขอมลจากตาราง Types 6.7 การใชภาษา SQL เพอท าการคนหาขอมลดวยค าสง Select เบองตน
6.7.1 จากรปแบบค าสงในการคนหาขอมลในหวขอทแลวในหวขอนใหนกศกษาท าการใชค าสง SQL เพอประมวลผลดงน แลท าการรนโปรแกรมเพอทดสอบและดความเปลยนแปลง
SELECT TypeName FROM Types
และ
SELECT TypeID, TypeName FROM Types
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 48
6.7.2 การคนหาขอมลแบบมเงอนไข โดยใชพารามเตอร WHERE ในรปแบบ SELECT column_name1, column_name2, … FROM Table_name WHERE เงอนไข
ในการท าหนดเงอนไขโดยมการใช Operator ในการก าหนดเงอนไขค าสง >, <, >=, <=, =, <> ตวอยาง ตอไปนใหท าการทดสอบการแสดงผลในโปรแกรม
SELECT TypeID, TypeName FROM Types WHERE TypeID=1
และ SELECT TypeID, TypeName FROM Types WHERE TypeName='ระบบเครอขาย'
และ
SELECT * FROM Types WHERE TypeID<>3
หมายเหต : ในการคนหาดวยภาษา SQL ในการใชเงอนไข WHERE ถามาการระบการคนหาทเปนตวอกษรขอความจะตองอยภายใตเครองหมายSingle Quotes ( ' ) ถงจะสามารถท าการคนหาขอมลได
6.7.3 การคนหาขอมลแบบเปดโอกาศใหท าการคนหาทมขอความบางขอความในตารางได โดยใชค าสง LIKE ซงหมายความวา ท าการคนหาขอมลท Column TypeName ทมค าขนตนวา การ จากนนตามดวยค าอะไรกได
SELECT * FROM Types WHERE TypeName LIKE 'การ'+'%'
6.7.4 การใชตรรกศาสตร ในการก าหนดเงอนไขจากนพจ ถา P ถา Q AND (และ) True True True True False False False True False False False False
ตวอยางในการใชเงอนไขทางตรรกศาสตร SELECT * FROM Types WHERE TypeID=4 AND TypeName='การประมวล'
เมอรนโปรแกรมแลวจะไมปรากฏขอมลเน องจากเงอนไขเปนเทจ เพราะ TypeNane ไมตรงกบเงอนไข (False) ใหนกศกษาทดสอบในกรณเปนจรงทกประการดงน
SELECT * FROM Types WHERE TypeID=4 AND TypeName='การประมวลผลค า'
เมอท าการรนโปรแกรมจะเหนวามกรณเดยวทจะแสดงขอมลออกมาได การเขยนโปรแกรมเพอดงขอมลออกมาเฉพาะแบบน
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 49
6.7.5 การปอนขอมลจาก Textbox เพอใหภาษา SQL ท าการคนหาขอมลและแสดงผลขอมลออกมา นนจะตองมการใชตวแปรในการรบสงขอมลระหวาง Textbox กบภาษา SQL นนกคอ Parameters โดยในภาษา SQL จะมการก าหนดคาตวแปรทเปน Parameter โดยใชเครองหมาย @ น าหนาชอตวแปรทเปนเงอนไขในการคนหาขอมล ดงน
SELECT * FROM Types WHERE TypeID = @TypeID
ตวแปรทเปน Parameter ในการรบขอมลมาตรวจสอบในทนกคอ @TypeID จากนนเราตองท าการสรางตวแปรทเปน Parameter โดยมรปแบบดงตอไปน
DataAdapterName.SelectCommand.Parameters.Add("ชอพารามเตอร", ชนดของตวแปร)
จากนนท าการรบคาจากขอมลจาก Textbox มาเกบไวทตวแปรพารามเตอรในรปแบบดงน
DataAdapterName.SelectCommand.Parameters("ชอพารามเตอร").Value = Toolbox
ตวอยางตอไปนเปนการรบขอมลจาก Textbox1 มาใหพารามเตอรชอ @Type น าไปคนหาขอมลท
ภาษา SQL เพอใชในการประมวลผล
………
Dim TypeDataAdapter As New System.Data.OleDb.OleDbDataAdapter _
("SELECT * FROM Types WHERE TypeID = @TypeID", ConnectionString)
TypeDataAdapter.SelectCommand.Parameters.Add("@TypeID", OleDb.OleDbType.Integer)
TypeDataAdapter.SelectCommand.Parameters("@TypeID").Value = TextBox1.Text
TypeDataAdapter.Fill(TypeDataSet, "Types")
DataGridView1.DataSource = TypeDataSet.Tables("Types") ……..
ท าการรนโปรแกรมแลวใสตวเลขท Textbox แลวกด Button ท าการคนหาขอมล TypeID และเมอท า
ความเขาใจไดแลวใหเปลยนภาษา SQL กลบมาในรปแบบเดมและลบบรรทดพารามเตอรออกเพอปองการการ Error จากหวขอถดไป
SELECT * FROM Types
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 50
6.8 การใชค าสงในการปรบแตงรปแบบการแสดงผลของ DataGridView1 เชนการระบหว Column Column การก าหนดความกวางของ Column การซอน Colums โดยเพมค าสงดงตอไปนลงใน Code Program
………..
DataGridView1.DataSource = TypeDataSet.Tables("Types")
DataGridView1.Columns(0).Visible = False
DataGridView1.Columns(1).HeaderText = "ชอประเภทสนคา" DataGridView1.Columns(1).Width = "200"
ConnectionString.Close()
6.9 การผกขอมลตาราง Types ใน TypeDataSet เขากบ DataGridView1 และ Textbox เพอทจะใหเมอมการคลกเลอกขอมลในตาราง DataGridView1 ขอมลจะแสดงใน Textbox ทงสองซงมรปแบบการเขยนโปรแกรมดงน
รปแบบ
TextBoxName.DataBindings.Add _
(New Binding("ชนดขอมล", DataSetName.Table("ชอตาราง"), "ColumnName"))
จากรปแบบการผกขอมลดวย Object ดวย DataBinding ใหนกศกษท าการเพมค าสงลงไปใน
โปรแกรมแลวท าการรนโปรแกรมเพอทดสอบ
DataGridView1.Columns(0).Visible = False DataGridView1.Columns(1).HeaderText = "ชอประเภทสนคา"
DataGridView1.Columns(1).Width = "200"
TextBox1.DataBindings.Add(New Binding("text", TypeDataSet.Tables("Types"), "TypeID")) TextBox2.DataBindings.Add(New Binding("text", TypeDataSet.Tables("Types"), "TypeName"))
ConnectionString.Close()
เมอท าการรนโปรแกรมแลวสงเกตไดวาเมอน า Mouse เลอกขอมลใน DataGridView ขอมลใน
Textbox จะมการแสดงขนมาตามความสมพนธของ Mouse
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 51
6.10 การนบจ านวนขอมลในตารางสามารถท าไดโดยใชรปแบบค าสง รปแบบ
DataSetName.Tables("TableName").Rows.Count
ตวอยาง การนบจ านวนขอมลของตาราง Type วาทงหมดกแถว
………..
TextBox1.DataBindings.Add(New Binding("text", TypeDataSet.Tables("Types"), "TypeID")) TextBox2.DataBindings.Add(New Binding("text", TypeDataSet.Tables("Types"), "TypeName"))
Me.Label1.Text = TypeDataSet.Tables("Types").Rows.Count
ConnectionString.Close()
ซงในการนบจ านวนแถวนสามารถน าไปใชกบการแสดงผลไดหลายรปแบบ อกสวนหนงทนยมใช
ควบคกบภาษา SQL คอการตรวจสอบ Username และ Password วาท าการ Login ถกตองหรอไมโดยใชตรรกศาสตร AND ในภาษา SQL โดยถา Username และ Password ถกการนบจ านวนแถวจะไดออกมา 1 แถวเทานนโดยใช เงอนไข IF ในการตรวจสอบ
ตวอยาง รปแบบการตรวจสอบเงอนไข Login
If TypeDataSet.Tables("Types").Rows.Count <> 0 Then
' เงอนไขเปนจรง
Else
' เงอนไขเปนเทจ
End If
6.11 การลดการอางถง NameSpace.Data.OleDb โดยการประกาศไวทบน Class โปรแกรมดงน
Imports System.Data.OleDb
Public Class FormExampleVbCode ………………
End Class
จากนนท าการลบ บรรทดทมการอางอง NameSpace ออกจากโปรแกรมจะไดโปรแกรมดงน
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 52
ตวอยาง โปรแกรมทมการปรบแกไขการอางอง NameSpace ทมความยาว
Imports System.Data.OleDb
Public Class FormExampleVbCode
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button1.Click
Dim TypeDataSet As New DataSet
Dim ConnectionString As New OleDbConnection _
("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='|DataDirectory|\Books.mdb';")
ConnectionString.Open()
Dim TypeDataAdapter As New OleDbDataAdapter("SELECT * FROM Types", ConnectionString)
TypeDataAdapter.Fill(TypeDataSet, "Types")
DataGridView1.DataSource = TypeDataSet.Tables("Types")
DataGridView1.Columns(0).Visible = False DataGridView1.Columns(1).HeaderText = "ชอประเภทสนคา"
DataGridView1.Columns(1).Width = "200"
TextBox1.DataBindings.Add(New Binding("text", TypeDataSet.Tables("Types"), "TypeID"))
TextBox2.DataBindings.Add(New Binding("text", TypeDataSet.Tables("Types"), "TypeName"))
Me.Label1.Text = TypeDataSet.Tables("Types").Rows.Count
ConnectionString.Close()
End Sub
End Class
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 53
บทท 7 ADO.NET Programming Part 2
(SQL Insert, Update, Delete)
7.1 ในบทนจะเปนการการเขยนโปรแกรมดวยการ Code ตอจากบททแลว โดยการเพมขอมลลงไปในฐานขอมลจาก FormExampleVbCode.vb จากครงทแลวท Button1 ท าการแสดงขอมล
7.2 ท Button2 ท าการ 2Click เพอเขยนโปรแกรมดงน
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button2.Click
TextBox1.DataBindings.Clear()
TextBox2.DataBindings.Clear()
TextBox1.Clear() TextBox2.Clear()
TextBox1.Focus()
End Sub
จากตวอยาง ในปม Button2 นจะท าหนาทหลกๆ คอ การยกเลกการผกขอมลจาก Button1 เมอมการ Click ดขอมลเพราะถาไมยกเลกการผกตดขอมลเวลาท าการเพมขอมลลงตารางจะม Error ปรากฏขนมา ซงรปแบบการยกเลกการผกขอมลคอ ระบชอ Toolbox ทผไวในหวขอแรกแลวตามดวย DataBindings.Clear() จากนนท าการรนโปรแกรมเพอทดสอบและตรวจ Error
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 54
7.3 ท Button3 ท าการ 2Click เพอเขยนโปรแกรมเพมขอมล โดยการเพม ลบ แกไข ขอมลในฐานขอมลโดยมขนตอนดงน
7.3.1 ตดตอฐานขอมลและเปดใชงานฐานขอมล โดยใช NameSpace ชอ OleDbConnection และท าการเปดการตดตอฐานขอมลดงน
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim ConnectionString As New OleDbConnection _ ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='|DataDirectory|\Books.mdb';")
ConnectionString.Open()
End Sub
7.3.2 เขยนค าสง SQL ใน NameSpace ทชอ OleDbCommand ซงท าหนาทเชอมโยงกบ
ฐานขอมลโดยตรงโดยไมมการบนทกขอมลใดๆ ไวทหนวยความจ ากอนเหมอนกบ DataTable ใน DataAdapter
Dim AddCommand As New OleDbCommand _ ("INSERT INTO Type(TypeName) VALUES(@TypeName)", ConnectionString)
รปแบบภาษา SQL ทใชในการเพมขอมลดงน
INSERT INTO TableName(Column1, Coiumn2, …) VALUES(@Parameter1, @Parameter2, …)
7.3.3 สรางและเชอม Parameter ระหวาง Toolbox กบ ภาษา SQL โดยจะใช Parameter จาก OleDbcommand ดงตวอยาง
AddCommand.Parameters.Add("@TypeName", OleDbType.Char)
AddCommand.Parameters("@TypeName").Value = TextBox2.Text
7.3.4 ประมวลผล โดยใชค าสง AddCommand จาก NameSpace OleDbCommand จากค าสง ExecuteQuery() ซงมากถงการประมวลผลขอมลกบฐานขอมลโดยตรง ไมประมวลทหนวยความจ า
AddCommand.ExecuteNonQuery()
7.3.4 ปดฐานขอมล
ConnectionString.Close()
เมอเสรจแลวใหนกศกษาท าการรนโปรแกรมเพอทดสอบการท างาน
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 55
7.4 ท Button4 ท าการ 2Click เพอเขยนโปรแกรม Clear DataBindings เนองจากในการแกไขขอมลนนเวลาเราท าการเลอกขอมลนนจะมการผกขอมลอย เราตองยกเลกการผขอมลกอน
TextBox1.DataBindings.Clear()
TextBox2.DataBindings.Clear()
TextBox1.Focus()
7.5 ท Button5 ท าการ 2Click เพอเขยนโปรแกรมแกไข โดยการแกไขขอมลในฐานจะมขนตอนและวธเดยวกบการเพมขอมลแตจะแตกตางกนทภาษา SQL
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
Dim ConnectionString As New OleDbConnection _
("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='|DataDirectory|\Books.mdb';")
ConnectionString.Open()
Dim AddCommand As New OleDbCommand _ ("UPDATE Types SET TypeName=@TypeName WHERE TypeID=@TypeID", ConnectionString)
AddCommand.Parameters.Add("@TypeName", OleDbType.Char)
AddCommand.Parameters("@TypeName").Value = TextBox2.Text
AddCommand.Parameters.Add("@TypeID", OleDbType.Integer) AddCommand.Parameters("@TypeID").Value = TextBox1.Text
AddCommand.ExecuteNonQuery()
ConnectionString.Close()
End Sub
รปแบบค าสงในการ Update ขอมลในภาษา SQL
UPDATE TableName
SET Column1=@Parameter1, Column2=@Parameter2, … WHERE ColumnPrimaryKey=@Parameter
ในการพมพค าสงใหเวน 1 เคะ เชน UPDATE_Types_SET_TypeName=@TypeName_WHERE_TypeID=@TypeID
และในการ Add Parameter ใหเรยงล าดบจากค าสง SQL จากซายไปขวาใหเปนระเบยบ
ไมเชนนนจะท าการ Update ไมไดครบ
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 56
7.6 ท Button6 ท าการ 2Click เพอเขยนโปรแกรมลบขอมล
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
TextBox1.DataBindings.Clear() TextBox2.DataBindings.Clear()
Dim ConnectionString As New OleDbConnection _
("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='|DataDirectory|\Books.mdb';")
ConnectionString.Open()
Dim AddCommand As New OleDbCommand _
("DELETE FROM Types WHERE TypeID=@TypeID", ConnectionString)
AddCommand.Parameters.Add("@TypeID", OleDbType.Integer)
AddCommand.Parameters("@TypeID").Value = TextBox1.Text
AddCommand.ExecuteNonQuery()
ConnectionString.Close()
End Sub
จะเหนวารปแบบการเขยนโปรแกรมเหมอนเดมแตตางท SQL โดยมาตราฐานค าสง DELETE ม
รปแบบดงน
DELETE FROM TableName WHERE ColumnPrimaryKey=@Parameter
ท าการทดสอบโปรแกรม
7.7 จากโปรแกรมสงเกตวามการเขยนโปรแกรมทซ าๆ กนหลายๆ บรรทดเราสามารถลดความซ าซอนไดโดยการน าบรรทด Connection String มาวางไวตอจาก Class เพราะ Sub Program ทก Sub อยภายใต Class สามารถเรยกใชงานไดทกทดงภาพ
Imports System
Imports System.Data
Imports System.Data.OleDb
Public Class FormExampleVbCode
Dim ConnectionString As New OleDbConnection _ ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='|DataDirectory|\Books.mdb';")
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 57
7.8 ประยกตเพอท าใหโปรแกรมมความสามารถมากขน 7.8.1 หาพนทวางแลวท าการ Sub Program
Private Sub ShowData()
End Sub
7.8.2 จากนนท าการยาย Source Code จากปม Button1 มาไวท Sub Program
Private Sub ShowData()
Dim TypeDataSet As New DataSet
ConnectionString.Open()
Dim TypeDataAdapter As New OleDbDataAdapter _ ("SELECT * FROM Types", ConnectionString)
TypeDataAdapter.Fill(TypeDataSet, "Types")
DataGridView1.DataSource = TypeDataSet.Tables("Types")
DataGridView1.Columns(0).Visible = False
DataGridView1.Columns(1).HeaderText = "ชอประเภทสนคา" DataGridView1.Columns(1).Width = "200"
TextBox1.DataBindings.Add(New Binding("text", TypeDataSet.Tables("Types"), "TypeID"))
TextBox2.DataBindings.Add(New Binding("text", TypeDataSet.Tables("Types"), "TypeName"))
Me.Label1.Text = TypeDataSet.Tables("Types").Rows.Count
ConnectionString.Close()
End Sub
7.8.3 จากนนลบ Sub Program Button1_Click ในตารางดงตอไปนทง Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
End Sub
7.8.4 กลบไปท Form แลวหาบรเวณทวางของฟอรมจากนน 2Click เพอเขาส Sub Program From Load จากนนท าการเขยนโปรแกรมเรยกใชงาน Sub Program ShowData ดงตอไปน
Private Sub FormExampleVbCode_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Call ShowData()
End Sub
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 58
7.8.5 รนโปรแกรมเพอดความเปลยนแปลงจะเหนวาเมอรนโปรแกรมขอมลตาราง Type จะแสดงออกมาทนท ในทนปม Button1 ไมไดใชแลวจงลบทง จากนนเปลยน Text ของปมดงภาพ
7.9 ท าการเรยกใชงาน Sub Program ShowData ทปมบนทกเพม ปมบนทกแกไข และปมลบ เพอใหเวลา Click ทงสามปมน ขอมลจะแสดงการเปลยนแปลงโดยทนท โดยใหนกศกษาท าการปรบแตเองจากนนท าการปรบแกไขโดยลดปม บนทกเพม และ บนทกแกไข มาเปนปมเดยวกนคอปมบนทกดงภาพ
การประยกตการเขยนโปรแกรมในรปแบบนจะตองประกาศตวแปรไวท Class โปรแกรม จากนนเมอมการคลกทปมเพมใหก าหนดตวแปรทประกาศไวมคาเปนอยางไดอยางหนง และปมแกไขกท าแบบเดยวเชนกน จากนน เมอคลกทปมบนทก ใหเอาคาทก าหนดไวใน 2 ปมมาท าการตรวจสอบเงอนไขวาเปนเหตการณทมาจากปมใด แลวตามเหตการณนน (ใช IF)
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 59
บทท 8 การเขยนโปรแกรมระบบการซอสนคา
ในบทนจะเปนการเขยนโปรแกรมเพอสรางระบบการซอสนคาโดยใหนกศกษาท าการเพม Form ขนมาใหมโดยตงชอวา FormOrder.vb จากนนท าการท าหนดรปแบบฟอรมดงตอไปน
ในการสงซอสนคาของฟอรมนไดถกออกแบบโดยใหท าดงขนตอนดตอไปน
1) เมอลกคาเลอกซอสนคาแลวท าการช าระเงน เจาหนาทจะท าน าหมายเลข ISBN หรอรหสหนงสอปอนลงในชองรหสสนคาแลวกด Enter ระบบจะท าการคนหาหนงสอ เมอพบแลวจะแสดงชอสนคา ราคาตอหนวยออกมาทาง Textbox จากนน Curser จะมารอรบจ านวนทสงซอ
2) เมอปอนจ านวนทสงซอ และท าการกด Enter ระบบจะท าการน าขอมลมาเกบไวทตาราง ListViewOrder พรอมค านวณราคาให จากนนระบบจะท าการลางขอมลท Textbox ทงหมดและรอรบขอมลใหม แบบนไปเลอยๆ
3) เมอลกคาช าระเงนโดยเจาหนาทปอนในชองช าระเงน แลวกดปมบนทก ระบบจะท าการบนทกการซอสนคาและค านวณเงนทอน
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 60
8.1. เมอสรางฟอรมเรยบรอยแลว ขนแรกเราตองท าระบบโดยการปอนขอมลรหสหนงสอท Textbox จากนนกด Enter ระบบจะท าการคนหาและแสดงชอหนงสอ และราคาหนงสอ ออกมา จากนนให Curser ไปรอทจ านวนทซอ
8.1.1. ขนแรกท าการสราง DataSet ชอ OrderDataSet ขนมา
8.1.2. จากนนท าการเขาไปท DataTable เพอท าการเขยนค าสง Query เพอท าการคนหาขอมลหนงสอจากรหสหนงสอ
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 61
8.1.3. หนาตาง Query Builder ท าการระบตวแปรทท าการคนหา ในทนตงชอวา BID โดยใชเครองหมาย = เปนตวตรวจสอบเงอนไข เนองจากตองใหรหสสนคาทกครบถวน เพอจะดงสนคามาเพยง 1 รายการในการคนหา
8.1.4. ท าการตงชอ Fill a DataTable วา FillByBookID
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 62
8.1.5. ท าการสราง Parameter ชอ BID ลงให FillBookID,GetDataBy()
8.1.6. ท าการทดสอบการคนหาขอมล โดยการคลกขวาท FillBookID,GetDataBy(BID)
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 63
8.1.7. เมอท าการ Query ตาราง Books ท DataSet ชอ OrderBookDataSet จากนนท าการเชอมเขากบ Form
8.1.8. กลบมาทหนาจอออกแบบ แลวท าการเชอม Textbox ชอหนงสอ(TextBoxName) และ ราคาตอหนวย (TextBoxPrice) โดยการท าการ Click เลอก Textbox ชอหนงสอ ทหนาตาง Properties ท าการเปด DataBinding ทเครองหมายบวก ท าการเลอกหวขอ Text เลอก OrderBookDataSet Books Name
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 64
8.1.9. นองจากระบบไดท าการสราง BindingSource ชอ BookBindingSource ใหอตโนมต ดงนนท TextBoxUnitPrice (ราคาตอหนวย) จงไมตองเลอก DataSet อกสามารถเลอก BookBindingSource และเลอก Filed UnitPrice ไดเลยดงภาพ
8.1.10. เมอท าการรนโปรแกรมจะมขอมลชอหนงสอปรากฏขนมา อนเนองจากโปรแกรมไดท าการเขยน Code แสดงผลท Form Load ในขนตอนตอไปน จะท าการก าหนดคาวา เมอมการปอนรหสหนงสอแลว Enter ระบบจะท าการคนหาขอมลหนงสอดวยการ View Code ของ FormOrder.vb ขนมาจากนนท Object TextBoxBookID เลอก Event เปน KeyDown
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 65
8.1.11. ท าการยาย Code ของมาวางไวท Private Sub TextBoxBookID_KeyDown แลวท าการแกให DataAdapter สามารถคนหาขอมลในตาราง Books ไดดงตอไปน
Public Class FormOrder
Private Sub FormOrder_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Me.TextBoxBookID.Select()
End Sub
Private Sub TextBoxBookID_KeyDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles TextBoxBookID.KeyDown
Me.BooksTableAdapter.FillByBookID(Me.OrderBooksDataSet.Books, TextBoxBookID.Text)
End Sub
End Class
เมอเสรจแลวท าการรนโปรแกรมแลวท าสอบโดยการปอนขอมลรหสลงไป แลว Enter วามชอสนคาและราคาตอหนวยปรากฏมาหรอไม
8.1.12 เมอไดแลวอนดบถดไปเปนการยาย Curser ไปทต าแหนง จ านวนทสงซอ แตถาปอนรหสผดใหหยดรอทชองรหสหนงสอ
Private Sub TextBoxBookID_KeyDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles TextBoxBookID.KeyDown
Me.BooksTableAdapter.FillByBookID(Me.OrderBooksDataSet.Books, TextBoxBookID.Text)
If OrderBooksDataSet.Books.Rows.Count = 1 Then
Me.TextBoxQuantity.Focus()
Else Me.TextBoxBookID.SelectAll()
End If
End Sub
ท าการทดสอบโปรแกรม
8.2 ขนตอนท 2 เมอมการปอนจ านวนทซอ แลวกด Enter ใหระบบท าการเพมขอมลหนงสอลงในตาราง ListViewOrder พรอมกบท าการค านวณราคาไดดวยดงน
8.2.1 ท าการก าหนด Event ของ TextBoxQuantity เปน KeyDown ดงภาพ
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 66
8.2.2 ท าการเขยน Code เพอท าการตรวจสอบวามการ กด Enter ท Keyboard หรอไมซงเปนการตรวจสอบโดยใช IF ตรวจจบ Event ชอ e
Private Sub TextBoxQuantity_KeyDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles TextBoxQuantity.KeyDown
If e.KeyCode = Keys.Enter Then
End If
End Sub
8.2.3 จากนนภายใตค าสง IF ทมการตรวจจบ Enter ใหท าการใชค าสงเพอท าการเพมขอมลหนงสอลงตาราง ListViewOrder โดยเรมจากการสราง Array เปน Set ของขอมลแลวท าการเพมขอมลลงไปพรอมกบหาจ านวนเงนของสนคาในแตละรายการไปดวยกน
If e.KeyCode = Keys.Enter Then
Dim OrderArray(4) As String OrderArray(0) = TextBoxBookID.Text
OrderArray(1) = TextBoxName.Text OrderArray(2) = TextBoxUntiPrice.Text
OrderArray(3) = TextBoxQuantity.Text
Dim Total As Double = 0
Total = TextBoxUntiPrice.Text * TextBoxQuantity.Text
OrderArray(4) = Total.ToString("#,##0.00")
Dim Liv As New ListViewItem(OrderArray)
ListViewOrder.Items.Add(Liv)
End If 8.2.4 จากนนท าการค านวณจ านวนเงนทงหมดออกทาง LabelNetTotal โดยการดงขอมล
Column จ านวนเงนใน ListViewOrder มารวมกนแลวแสดงออกทาง Label โดยเพมค าสงตอจาก ListViewOrder.Items.Add(Liv) จาก Code ทแลว
Dim NetTotal As Double = 0
For i = 0 To ListViewOrder.Items.Count - 1
NetTotal += ListViewOrder.Items(i).SubItems(4).Text
Next
LabelNetTotal.Text = NetTotal.ToString("#,##.00")
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 67
8.2.5 สดทายคอเมอบนทกขอมลลงตารางแลว ระบบจะไปท าการลางขอมลท Textbox และรอรบรหสหนงสอใหม
TextBoxBookID.Clear()
TextBoxName.Clear()
TextBoxUntiPrice.Clear() TextBoxQuantity.Clear()
TextBoxBookID.Select()
8.3 ขนตอนสดทาย การบนทกขอมลลงฐานขอมลทปม Button บนทกโดยการ 2Click แลวท าการเขยนโปรแกรมดงตอไปน
8.3.1 ท าการตรวจสอบกอนวาทชองช าระเงนมการปอนขอมลหรอไม ถามระบบถงจะบนทกขอมลใหตอไป
Private Sub ButtonSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles ButtonSave.Click
If TextBoxPayCash.Text = "" Then
Else
End If
End Sub
8.3.2 ภายใตเงอนไขเปนจรงอนเนองมาจากขอมลในชองช าระเงนวาง ใหนกศกษาใช
MessageBox แจงเตอนแลวให Curser รอรบคาในชองช าระเงน 8.3.3 ในกรณทมการปอนขอมลทชองช าระเงนแลว ระบบจะท าการค านวณเงนทอน และจะ
บนทกขอมลในตาราง Orders กอนเพอทจะน าเอาหมายเลข OrderID มาใชบนทกในตาราง OrderDetail ตออกครง
ภายใตเงอนไขนอาจจะมการตรวจสอบอกกไดวาจ านวนเงนทช าระมมากกวาจ านวนเงนทขายจรงหรอไมเพอปองกนการปอนขอมลผดพลาด
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 68
8.3.4 ภายใตเงอนไขเปนเทจจะท าการค านวณหาเงนทอนโดย Code ดงตอไปน
Dim NetTotal As Double
NetTotal = TextBoxPayCash.Text - LabelNetTotal.Text
LabelNetTotal.Text = NetTotal.ToString("#,##.00")
8.3.5 ตอมาเปนการบนทกขอมลลงตาราง Orders ในครงนจะตองท าการ Code Program โดยขน
แรกจะตองไปท าการ Imports System.Data.OleDb บน Class โปรแกรมกอน จากนนทเงอนไขเปนเทจตอจากการค านวณเงนทอนท าการบนทกตาราง Orders ดงน
Dim ConnectionString As New OleDbConnection _
("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='|DataDirectory|\Books.mdb';")
ConnectionString.Open()
Dim SaveOrderCommand As New OleDb.OleDbCommand _ ("INSERT INTO Orders(OrderDate) VALUES(@OrderDate)", ConnectionString)
SaveOrderCommand.Parameters.Add("@OrderDate", OleDbType.Date) SaveOrderCommand.Parameters("@OrderDate").Value = Date.Today
SaveOrderCommand.ExecuteNonQuery()
ConnectionString.Close()
8.3.6 เมอท าการบนทกขอมลในตาราง Orders แลว ตอไปจะตองเอาหมายเลขใบเสรจ
(OrderID) จากตารางมาเกบไวทตวแปร เพอทจะน าเอาหมายเลข OrderID ไปบนทกรายการสนคาทตาราง OrderDetail อกครง การคนหาหมายเลข OrderID ใหมท าไดหลายวธ แตวธการนจะใชเครองมอBiningSource จาก Toolbox โดยลากมาแลวปลอยไวท Form จากนนท าการเปลยนชอเปน TopOrderBindingSource ดงภาพ
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 69
8.3.7 จากนนเขาส Edit Queries in DataSet Designer… เพอท าการเพม Query ดงรป
ท าการปรบแตงค าสง SQL ตามภาพโดยค าสงนเปนการดงขอมล OrderID ทคาสงสด
ขนมา 1 คา เมอเสรจแลว ท าการตงชอ Fill a Data Table ชอ FillByTopOrder
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 70
8.3.8 จากนนไปท Code โดยท Private Sub FormOrder_Load ใหน า Code ทระบบเขยนใหมาท าการตอทาย Source Code ทท าการบนทกขอมลตาราง Orders แลท าการแกการ Query และเรยกขอมลOrderID มาเกบไวทตวแปร TopOrder ดงน
Me.OrdersTableAdapter.FillByTopOrder(Me.OrderBooksDataSet.Orders)
Dim TopOrder As Integer = 0
TopOrder = Me.OrderBooksDataSet.Tables("Orders").Rows(0).Item("OrderID")
ท าการทดสอบการแสดงผลโดยใหตวแปร TopOrder แสดงท Textbox หรอ Label และ
ตรวจสอบทฐานขอมลดวยวา มการเพม OrderID ใหมจรงหรอไมเมอกดปมบนทก
8.3.9 จากนนจะท าการน าขอมลในตาราง ListViewOrder ไปท าการบนทกลงตาราง OrderDetails ซงในกรณนขอมลจะอยในรปแบบตารางดงนนเราตองเขยนโปรแกรมสราง Loop เพอ แถว ในตารางทละแถวมาท าการ INSERT ทละแถวจนหมด ดง Source Code ดงน
ConnectionString.Open()
For i = 0 To ListViewOrder.Items.Count - 1
Next
ConnectionString.Close()
จาก Code โปรแกรมจะเหนวามการใช Loop FOR ในการวนรอบโดยมการนบ Row
(Items) กอนวามทงหมดกแถวจะเหนวาม -1 ตอทายเนองจากตารางอยในรปแบบ Array แตการใชค าสง Count จะนบเปนเรมท 1
โปรแกรมนบ ListView เกบจรง
OrderID BookID
1 0 55 9786162040160
2 1 55 9789742430108
ดงนนจงมการลบออก 1 และจะเหนวามการ Open และ Codes การตดตอฐานขอมล
เนองจากตอไปจะมการเขยนค าสง INSERT ชอมลลงทตาราง OrderDetails
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 71
8.3.10 ขนตอนตอไปจะเปนการเขยนโปรแกรมเพอท าการ INSERT ขอมลลงตาราง OrderDetails ทละแถว โดยสนคาใน ListView จะตองไมซ ากน
Dim SqlText As String
SqlText = "INSERT INTO OrderDetails(OrderID, BookID, UnitPrice, Quantity) "
SqlText &= "VALUES(@OrderID, @BookID, @UnitPrice, @Quantity)"
Dim SaveOrderDetailCommand As New OleDb.OleDbCommand(SqlText, ConnectionString)
SaveOrderDetailCommand.Parameters.Add("@OrderID", OleDbType.Integer) SaveOrderDetailCommand.Parameters("@OrderID").Value = TopOrder
SaveOrderDetailCommand.Parameters.Add("@BookID", OleDbType.VarChar) SaveOrderDetailCommand.Parameters("@BookID").Value = _
ListViewOrder.Items(i).SubItems(0).Text
SaveOrderDetailCommand.Parameters.Add("@UnitPrice", OleDbType.Integer)
SaveOrderDetailCommand.Parameters("@UnitPrice").Value = _ ListViewOrder.Items(i).SubItems(2).Text
SaveOrderDetailCommand.Parameters.Add("@Quantity", OleDbType.Double)
SaveOrderDetailCommand.Parameters("@Quantity").Value = _
ListViewOrder.Items(i).SubItems(3).Text
SaveOrderDetailCommand.ExecuteNonQuery()
ท าการทดสอบโปรแกรม
8.3.11 จากนนท าการลางขอมลใน ListView และ Textbox ตางๆ โดยใชค าสง
ListViewOrder.Clear()
TextBoxPayCash.Clear() TextBoxBookID.Select()
เนองจากเวลาปอนสนคาลงในรายการสนคาเวลาปอนรายการสนคาซ ากนสามารถท าได แตเวลา
บนทกขอมลจะไมสามารถท าได เนองจาก OrderID และ BookID ในตาราง OrderDetails เปน PK ดงนนใหนกศกษาท าการปรบปรง Code ใหเวลาปอนรหสหนงสอซ าใหแสดง Messagebox ขนมาบอกวาสนคาซ า หรอ ท าการ Update จ านวนทสงซอใหอตโนมต
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 72
บทท 9 การสรางรายงานดวย Crystal Report (Part 1)
ในบทนจะเปนการสรางรายงานโดยใช Crystal Report ซงจะมมาพรอมกบ Visual Studio.Net ใน Version Professional Edition ในขนตอนการลงโปรแกรมจะมใหเลอกวาจะท าการลง Crystal Report Basic และ Ms SQL2005 Express กจะได Crystal Report ทสามารถมาใชงานรวมกบ VB2008 ได จากนนเราจะท าการสราง Report ของโปรเจกดงน
9.1 ท าการ Add New Item โดยเลอกในหวขอ Reporting และเลอกชนดรายงานเปน Crystal Report และท าการตงชอวา CrystalReportBookAll.rpt
9.2 จากนนเลอก As a Blank Report แลวท าการ OK
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 73
9.3 จากนนจะไดหนาจอการออกแบบรายงานดงน
9.4 ท าการเชอมตอฐานขอมลมาใชในรายงานโดยทหนาตาง Field Explorer ท าการเลอก Database Fields แลวท าการ Click ขวา เลอก Database Expert…
9.5 ทหนาตางท าการเลอก Database Files ตามภาพ
หวเรอง
หวขอรายงาน รายระเอยดรายงาน
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 74
9.6 ท าการเลอกไฟลจาก C:\MyTraining\MyTraining\bin\Debug ชอ Book.mdb เมอเสรจแลวจะไดเสนทางการเลอกไฟลพรอมตารางในฐาน ในทนเราจะท าการแสดงรายงานขอมลหนงสอทงหมด โดยใหนกศกษาเลอก Table ชอ Books หรอ อาจจะเลอกตาราง Type และ Publishers มาดวยกไดเพราะเปนขอมลหนงสอทมความสมพนธกน จากนนท าการยายขอมลตารางไปทางขวาแลวกด OK ดงรป
9.7 ระบบจะท าการแลดงขอมลตารางทเราเลอกมาแสดงใน Field Explorer จากนนน า Field ของตารางBooks มาแสดง ใน Details
9.8 ท าการแสดผลและปรบแตงตวอกษร ดงรป
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 75
9.9 ทดานลางของหนาตางการออกแบบรายงาน จะม Tab อย 2 Tab คอ Main Report กบ Main Report Preview ใหท าการเลอก Main Report Preview เพอดรปแบบการแสดงผล ดงรป
9.10 เมอไดรายงานตามตองการแลวใหท าการปดหนาตางรายงาน จากนนใหท าการสรางฟอรมใหมเพ อท จะแสดงรายงานในโปรแกรมโดยใชฟอรมเปนตวกลางในการเช อมตอระหวางไฟล CrystalReportBookAll.rpt ทอยใน Solution Explorer โดยตงชอวา ReportBookAllForm.vb
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 76
9.11 ทหนาตาง Toolbox ท าการลากเครองมอชอ CrystalReportView มาวางไวท Form
9.12 จากนนเลอกการแสดงผลในหวขอ Choose a Crystal Report…
9.13 ท าการเลอกไฟลทจะแสดงผลดงรป
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 77
9.14 เมอท าการชนด Report แลวขอมลจะแสดงผลดงตวอยาง ซงไขอมลทแสดงจะดแลวเหมอนจะไมถกตองแตเมอเวลารนโปรแกรมขอมลจะออกมาในรปแบบทถกตอง
9.15 ในหวขอนจะเปนการแสดงรายงานหนงสอโดยแยกตามประเภทของหนงสอโดยใหนกศกษาท าการสรางรายงานชอ CrystalReportBookType.rpt จากนนในหนาตางการออกแบบรายงานใหเลอกตาราง Books และ Types ดงรป
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 78
9.16 จากนนท าการคลกขวาในสวน Section2 (Page Header) เพอท าการ Group ดงรป
9.17 ท าการ Group TypeID ดงรป
9.18 ท าการแสดงผลดงรปแบบตอไปน และทดสอบการแสดงผลจรงพรอมปรบรปแบบใหดน
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 79
บทท 10 การสรางรายงานดวย Crystal Report (Part 2)
ในบทนจะเปนการสรางรายงานแบบมเงอนไขการออกรายงานเขามาเกยวของ เชน ออกใบเสรจเพยง 1 ใบ หรอการออกรายงานในรปแบบยอดขายรายวน เดอน ป ซงการออกรายงานแบบนจะมการใช View หรอ Query เขามาเกยวของ ตอไปนจะเปนการสรางรายงานแบบตางๆ ดงน
10.1 การสรางรายงานเพอออกใบเสรจ 10.1.1 ท าการสราง Query ทฐานขอมล Access ทเกบไวท File bin\Debug ของตวโปรเจก
แลวท าการตงชอ Query วา Receipt
10.1.2 จากนนท าการสรางรายงานชอ CrystalReportReceipt.rpt โดยก าหนดรปแบบเปนแบบ Blank Report และท าการเลอกตารางจากฐานขอมลในหวขอชอวา Add Command
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 80
10.1.3 ท าการใชค าสง SQL เพอเรยก Query Receipt ดงรป
10.1.4 จากนนท าการสราง Parameter ชอ OrderID ชนดเปน Number
10.1.5 ระบบจะใหใสคาทจะสงไปกบ Parameter โดยใหปอนหมายเลขใบ OrderID ลงไปเมอเสรจแลวจะกลบมาทหนาจอเดมดงรปใหท าการ OK
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 81
10.1.6 ท าการออกแบบใบเสรจดงรปโดยการเปลยน Parameter ดวยการกดปม Refresh
10.1.7 ท าการหาราคารวมของสนคาแตละรายการโดย Click ขวาท Formula Fields เลอก New
10.1.8 ตงชอ Fields ชอวา Sum จากนนเลอก Use Expert
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 82
10.1.9 ทตวแปร Sum เลอกเครองหมายดงรป
10.1.10 ท าการดง Field ชอ UintPrice มาวางไวทพนทดานลางแลวใหเครองหมายคณและตามดวย Quantity ดงรป แลวท าการ Save Close
10.1.11 เมอเสรจแลวท าการน าเอา Field ชอ Sum จากหวขอ Parameter มาวางไวตอจากจ านวนทซอ แลวท าการดตวอยางผลการรน จากนนท าการรวมราคาทซอทงหมดโดยท าการคลกขวาทสวนของ Report Footer เลอกหวขอ Insert และเลอกหวขอ Summary… ดงรป
เลอก
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 83
10.1.12 ทหนาตางใหเลอกชอ Field ผลรวมในชองแรก และระบบการค านวณชอ Sum ดงรป
10.1.13 ท าการปรบแตง Report ดงภาพ และเมอเสรจแลวท าการ Save
10.1.14 ท าการ Add Form ขนมาใหมชอ ReportReceiptForm.vb จากนนน า CrystalReportViewer มาวางและท าการเชอมกบ CrystalReportReceipt และเมอท าการรนโปรแกรมแลวระบบจะถามหมายเลข OrderID ดงรป
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 84
10.1.15 ในการทจะใหระบบออกในเสรจโดยอตโนมตจะตองท าการเขยนโปรแกรมระบการสงคา Parameter จากฟอรม Order มาทฟอรม ReportReceiptForm.vb โดยท าการ View Code ท ReportReceiptForm.vb และท าการเขยน Code Imports คา NameSpace
Imports CrystalDecisions.CrystalReports.Engine Imports CrystalDecisions.Shared
Public Class ReportReceiptForm
Friend OrderID As String = " "
End Class
จากบรรทด Friend OrderID As String = " " เปนการก าหนดตวแปรชอ OrderID
เปนตวแปรทสามารถใชงานไดทกทในโปรแกรม
10.1.16 จากนนท าการเขยน Code เพอท าการสงคาใหกบ Crystal Report ดงน
mports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Public Class ReportReceiptForm
Friend OrderID As String = " "
Private Sub ReportReceiptForm_Load() Handles MyBase.Load
Dim paramValue As New ParameterDiscreteValue paramValue.Value = OrderID
Dim paramfld As New ParameterField
paramfld.ParameterFieldName = "OrderID"
paramfld.CurrentValues.Add(paramValue)
Dim paramfields As New ParameterFields paramfields.Add(paramfld)
CrystalReportViewer1.ParameterFieldInfo = paramfields
CrystalReportViewer1.ReportSource = New CrystalReportReceipt
End Sub
End Class
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 85
ท าการสรางตวแปรชอ paramValue เกบคาตวแปร OrderID
Dim paramValue As New ParameterDiscreteValue
paramValue.Value = OrderID
ท าการสรางตวแปรชอ paramfld เปนตวแปร parameter จากนนระบวาตวแปรนมชอเปน OrderID และสงใหเกบคาจากตวแปร paramValue
Dim paramfld As New ParameterField
paramfld.ParameterFieldName = "OrderID"
paramfld.CurrentValues.Add(paramValue)
จาก Code ทผานมาเปนการสรางและก าหนดตวแปร ชอตวแปรในการสงคา 1 คาจากนนเราตองท าการน าตวแปรทก าหนดไวไปท าการสงคาผานตวแปรชอ Paramfields ซงเปนตวแปรทท าหนาทสงคาให Crystal Report
Dim paramfields As New ParameterFields
paramfields.Add(paramfld)
ตอมา Code นเปนการสงคา Parameter ใหกบ Crystal Report โดย CrystalReportViewer1 คอชอของเครองมอในการเชอมระหวาง File CrystalReportReceipt.rpt กบ ReportReceiptForm.vb โดยสามารถดชอไดท Properties
CrystalReportViewer1.ParameterFieldInfo = paramfields
CrystalReportViewer1.ReportSource = New CrystalReportReceipt
ในบรรทดท 2 เปนการก าหนดวาตว Report ชอวาอะไรในทนชอ
CrystalReportReceipt ซงชอนจะปรากฏทดานลางฟอรม Design ReportReceiptForm
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 86
10.1.17 จากนนท าการเปดฟอรม Order แลวท าการสรางปม ออกแบบใบเสรจ โดยตงชอปมวา ButtonReceipt
10.1.18 จากนนท าการ 2Click เขาไปทปม ButtonReceipt เพอท าการเขยน Code โดยจะใหการดงคาตวแปร OrderID ทมคาสงสดจากตาราง Orders มาแสดงซงในทนจะม Code อยตอนเขยนปมบนทก ดงน
Private Sub ButtonReceipt_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ButtonReceipt.Click
Me.OrdersTableAdapter.FillByTopOrder(Me.OrderBooksDataSet.Orders)
Dim TopOrder As Integer = 0 TopOrder = Me.OrderBooksDataSet.Tables("Orders").Rows(0).Item("OrderID")
Dim Receipt As New ReportReceiptForm Receipt.OrderID = TopOrder
Receipt.Show()
End Sub
10.1.19 ท าการรนโปรแกรมเพอทดสอบการแสดงผลของ Report ใบเสรจโดยจะสามารถออกได
เฉพาะใบ OrderID ทายสดเทานน
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 87
10.2 การสรางรายงานแสดงยอดขายประจ าวน 10.2.1 เนองจาก Crystal Report Basic for Visual Basic 2008 Pro ทมมาใหนนจะมปญหา
เกยวกบวนทและเวลาในการสงคา Parameter เพอใหงายในการเขยนโปรแกรมท Query Receipt ในทนจะท าการ Convert การเกบวนทจาก Date/Time เปน Varchar ใน Field ใหมโดยทตอจาก Field Quantity ท าการคลกขวาแลวเลอกตามภาพ
10.2.2 ทหนาตางท าการเลอก Function Conversion ชอ CVar ตามรป
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 88
10.2.3 ตอไปท าการน า Mouse เลอกค าวา <expr> ในชองดานบน จากนนเลอก Query Field ทชอวา OrderDate เพอท าการ Convert ใหเปน VarChar ดงรป
10.2.4 ท าการเปลยนค าวา Expr1 เปนชอ COrderDate ดงรป บนทกและออกจากโปรแกรม
10.2.5 จาก Query Receipt น ามาสราง Report รายงานการขายสนคาประจ าวนโดยท าการสราง Crystal Report ชอ CrystalReportAllOrderDate.rpt แลวท าการ Add Command ดงน
ภาษา SQL ทใช
SELECT_*_FROM_Receipt_WHERE_COrderDate='{?COrderDate}'
ก าหนดชอ Parameter OrderDate มชนดเปน String และเมอกด OK ระบบจะใหปอนขอมลวนทในทน 27/5/2554
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 89
10.2.6 ท าการสรางรายงานการขายสนคาประจ าวนดงรป
10.2.7 ตวอยางผลรายงานขอมลการขายสนคาประจ าวน
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 90
10.3 การสรางรายงานการขายสนคาประจ าเดอน 10.3.1 กลบมาทโปรแกรม VB2008 เพอท าการสรางรายงานการขายสนคาประจ าเดอน โดย
ใชวธการเดยวกบการสรางรายงานการขายสนคาประจ าวน แตรปแบบการใชค าสง SQL จะเปนอกรปแบบหนงโดยใชเงอนไขทเรยกวา SELECT BETWEEN โดยจะอธบายในหวขอถดไปซงในหวขอนใหท าการสราง Crystal Report ชอ CrystalReportAllOrderMonth.rpt และท าการ Add Command
ภาษา SQL
SELECT * FROM Receipt WHERE OrderDate BETWEEN '{?SDate}' AND '{?EDate}'
ค าสง BETWEEN เปนค าสงทเรยกวาระหวางวนทเรมตน (SDate) ถง (AND) วนทสดทาย (EDate) ทตองการคนหา และสงเกตวาตวแปรจะใชเครองหมาย '…' โดยเครองหมายนจะใชคนหาขอมลชนด String แตถาขอมลในตารางฐานขอมลเปนตวเลขจะไมใชเครองหมายน
10.3.2 ท าการสรางรายงานดงภาพ
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 91
10.3.3 ผลการรนโปรแกรมโดยปอนขอมล SDate = 26/5/2554 และ EDate = 26/5/2554
10.3.4 นองจากเราจะใหรายงานออกมาในรปแบบเดอนทหนาจอออกแบบรายงาน ท าการ
Insert Group เลอกชนด Command.OrderDate และ for each month แลวท าการ OK
การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 92
10.3.5 ท าการปรบแตงรายงานใหมดงรป
10.3.6 ตวอยางผล Report