92
การพัฒนาระบบฐานข้อมูลด้วย 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

Book

Embed Size (px)

Citation preview

Page 1: Book

การพฒนาระบบฐานขอมลดวย 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

Page 2: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 2

1.5 น า Mouse คลกเลอกชนดเมนทเปน Button ตามรป

1.6 น า Mouse เลอกทรปภาพแลวท าการคลกขวา เลอก DisplayStyle ชนดเปน ImageAndText

1.7 ท Properties ในหวขอ Text ใหพมพค าวา ขอมลหนงสอตามภาพ

1.8 จากนนท าการน ารปภาพเขาโดย Click เลอกทขอมลหนงสอแลวท าการ Click ขวา เลอก Set Image…

Page 3: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 3

1.9 ท าการเลอกทหวขอ Project resource file เพอจะใหน าภาพทเราตองการมาไวท Project เราแลวกดปม Import…

1.10 เลอกรปหนงสอทอยใน Folder แลว ท าการ OK

1.11 จะไดรปหนงสอเปนรปเลกๆ ตามภาพ

1.12 จากนนท าการปรบแตใหรปมขนาดตามปกต โดยคลกเลอกทตวเมน จากนนก าหนด Properties เมนดานขวาโดยเลอกค าวา ImagesScaling เปน None

Page 4: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 4

1.13 รปภาพทท าการ Import เขาไปจะมขนาดเทารปจรงดงภาพ

1.14 ท าการเพมเสนแบงขอความปมโดยเลอกทรปแบบเมนถดไป แลวเลอกเสนแบงขอความเมนเปน Separator ดงภาพ

1.15 จะไดเลนแบงตามภาพ โดยเสนแบงนจะท าใหเมนดดและแบงแยกกนไดดขน ดดและมระดบ

1.16 ท ToolBox การเพม StatusStrip เพอใหเมนหลกดดขน โดยท าการลากเครองมอนมาไวท FormMenu

Page 5: Book

การพฒนาระบบฐานขอมลดวย 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 ตารางประกอบดวย

Page 6: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 6

1.21 ดงนนในการเขยนโปรแกรมเพมขอมลหนงสอ จะตองท าการเพมขอมล 3 สวนคอ (1) ขอมลประเภทหนงสอ (2) ขอมลส านกพมพ กอนถงจะท าในสวนท (3) ขอมลหนงสอ ดงนนในสวนของขอมลหนงสอจะตองท าการปรบเปลยนเมนมาเปนแบบ Drop Down Menu แทนดวยวธการคลกเลอกเมนขอมลหนงสอ แลวคลกขวา ท าการ Convert To DropDownButton

1.22 ท าการเพมขอมลหนงสอดงตอไปน

1.23 ท าการใสขอมลรปภาพแบบเดยวกบทเคยท าเมนทผานมา

Page 7: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 7

1.24 ในหวขอนใหนกศกษาท าเมนเพมโดยมรปแบบดงตอไปน

\

Page 8: Book

การพฒนาระบบฐานขอมลดวย 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

Page 9: Book

การพฒนาระบบฐานขอมลดวย 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

Page 10: Book

การพฒนาระบบฐานขอมลดวย 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 วามคาวาหรอไมเองครบ

Page 11: Book

การพฒนาระบบฐานขอมลดวย 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

Page 12: Book

การพฒนาระบบฐานขอมลดวย 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…

Page 13: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 13

3.5 ทหนาจอ Add Connection ท าการเลอกสถานทตดตอไฟล โดยคลกทปม Change…

3.6 ตอมาท าการเลอกชนดของฐานขอมล ในทนฐานขอมลเราจะเปน Microsoft Access Database File แลวท าการเลอก OK

3.7 จากนนโปรแกรมจะใหเราเลอกทเกบไฟลของฐานขอมล Microsoft Access โดย Browse… ไปหาทเกบไฟล

Page 14: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 14

3.8 โปรแกรมจะแสดงใหเราทราบวาในขณะนสามารถท าการเชอมตอฐานขอมลไดเรยบรอยแลวใหท าการกดปม Next

3.9 ระบบจะรายงานวาจ าท าการ Copy database ไวท Project ในขนตอนนใหตอบ No

Page 15: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 15

3.10 ระบบจะท าการเขยนค าสงในการเชอมตอฐานขอมลโดยเปดโอกาศใหเราตงชอไฟลทจะใชเชอมตอฐานขอมล ในทนใหตงชอวา DatabaseConnectionString แลวท าการ Next

3.11 ตอมาระบบจะท าการสราง DataSet เพอท าการเลอกตารางตางๆ ทเราตองการใชงานมาเกบไวในหนวยความจ าในทนเลอกTable ชอ Types และในชอง DataSet name ใหตงชอวา BookTypeDataSet แลวท าการ Finish

Page 16: Book

การพฒนาระบบฐานขอมลดวย 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 ดงภาพ

Page 17: Book

การพฒนาระบบฐานขอมลดวย 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 ดงรป

Page 18: Book

การพฒนาระบบฐานขอมลดวย 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

Page 19: Book

การพฒนาระบบฐานขอมลดวย 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 เทานนยงไมไดเปนการท างานกบฐานขอมลโดยตรง ดงนนตอไปนจะเปนการเขยนโปรแกรมทปม บนทก เพอท าการบนทกขอมลจากหนวยความจ าลบฐานขอมล

Page 20: Book

การพฒนาระบบฐานขอมลดวย 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) เมอคลกปม ลบ ปมเพมจะหายไปแลวปม บนทก ปรากฏขนมาใหสามารถใชงานได สวน

ปม แกไข และ ลบ ไมสามารถใชงานได หมายเหต : ใหนกศกษาใชความรเดมทเรยนมาเขยนโปรแกรมค าสงบงคบปมเอง

Page 21: Book

การพฒนาระบบฐานขอมลดวย 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

Page 22: Book

การพฒนาระบบฐานขอมลดวย 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…

Page 23: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 23

3.32 ท าการปรบแตง Columns โดยไปลบ Columns ของ TypeID ออกเนองจากเปนการรนแบบอตโนมต จากนนท Columns TypeName ท าการเปลยนหวขอตารางเปน ชนดหนงสอดงภาพ

และก าหนดให AutoSizeMode เปน Fill

3.33 นอกก าหนด Columns ของ DataGrid แลว เรายงสามารถตงคาของตารางใหสามารถแสดงผลแบบตางๆ ไดโดยการคลก Mouse ท DataGrid แลวท าการปรบแตงท Properties เชนก าหนดหวขอ AlternatingRowDefaultCellStyle โดยเลอกรปแบบของส BackColor ตามใจชอบครบ

Page 24: Book

การพฒนาระบบฐานขอมลดวย 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

Page 25: Book

การพฒนาระบบฐานขอมลดวย 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

Page 26: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 26

4.4 เลอกค าวา Database แลวท าการคลกปม Next สงเกตวาระบบจะน าขอมลการชอมตอทบนทกไวในระบบมาแสดงใหทราบ เพอเปนการรวดเรวในการท างาน โดยในขนตอนนใหเราคลกปม Next ตอไป

4.5 จากนนโปรแกรมจะใหเลอกตารางทจะใชงานใน FormBooks.vb โดยใหเลอกตามภาพและท าการตงชอ DataSet ชอ BooksDataSet แลวท าการ Finish

Page 27: Book

การพฒนาระบบฐานขอมลดวย 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

Page 28: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 28

4.10 เมอเสรจแลวท าการลากชอ Columns จากตารางหนงสอมาวางไวท Form

4.11 เมอไดตามรปแบบนแลวท าการ ท าสอบโดยการรนโปรแกรม

4.12 ท าการปรบแตง Form ท าการเพมปม เพม ลบ แกไข และบนทกไวตอจากขอมลหนงสอดงรป

Page 29: Book

การพฒนาระบบฐานขอมลดวย 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 ดงภาพ

Page 30: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 30

4.16 เมอท าการรนโปรแกรมสงเกตวา เมอเราเลอกขอมลท DataGrid ขอมลประเภทหนงสอยงคงไมเปลยนแปลตามมความสมพนธของตารางเนองจากโปรแกรมยงไมผกความส าพนธระหวางตาราง Books กบ Type

4.17 วธการผกความสมพนธโดย Click ท Combobox ทลกศรทางขวามอท าการ คลกเลอก ตามภาพ

4.18 แลวท าการรนโปรแกรมอกครง และทดสอบเลอกขอมลท DataGrid ดวาขอมลมการเปลยนแปลงหรอไม ถาไดในสวนของส านกพมพ ใหนกศกษาท าเชนเดยวกน (ท าเองนะครบ)

Page 31: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 31

4.19 ท าการปรบแตง DataGrid ขอมลหนงสอดงภาพ

4.20 ในการรนโปรแกรมใหนกศกษาสงเกตวาใน DataGrid ท Column ชอส านกพมพทแสดงเปนรหสส านกพมพ ซงเราสามารถเปลยนใหรหสส านกพมพเปนชอส านกพมพไดเชนกน โดยท าการคลกขวาท DataGrid แลวเลอก Edit Columns

4.21 ท าการเลอก Column ชอส านกพมพ จากนนท ColumnType เลอก DataGridViewComboBoxColumn

Page 32: Book

การพฒนาระบบฐานขอมลดวย 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

Page 33: Book

การพฒนาระบบฐานขอมลดวย 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

Page 34: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 34

5.5 ท าการรนโปรแกรมเพอทดสอบการแสดงผล

5.6 กอนทจะท าการเขยน Query ทเปนภาษา SQL เบองตนใหนกศกษาท าความเขาใจกบเครองมอ 3 ชนทมความสมพนธกนเมอน าตารางจาก DataSet มาแสดงบน Form

5.7 ตวแรกเรยกวา DataSet ในทนชอ BookTypeDataSet ท าหนาทเกบตารางฐานขอมลจากฐานขอมลมาไวทหนวยความจ าใน DataSet แตละ DataSet จะประกอบดวยตารางทเราเลอกใชงานจากฐานขอมล การดโครงสรา และความสมพนธของตารางใน DataSet สามารถท าไดโดยการคลกขวา แลวท าการเลอก Edit in DataSetDesigner… ตามภาพ

Page 35: Book

การพฒนาระบบฐานขอมลดวย 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

Page 36: Book

การพฒนาระบบฐานขอมลดวย 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

Page 37: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 37

5.13 จากนนระบบจะเขยนค าสงภาษา SQL ใหดงภาพ แตในทนเราตองการใชเงอนไขในการแสดง

ขอมลโดยการปรบแตงแกไข Query ทปม ดานลาง

5.14 ทหนาตาง Query Builder ในชองทเราตองการคนหาในทนคอชอง TypeName ใน Column Fiter ท าการเพมค าสงดงภาพแลวกดปม OK

ค าสง LIKE เปนค าสงใหคนหาขอมล สวน SName เปนชอตวแปรทเราตงขนแลวตามดวยเครองหมายบากเปอรเซนทอยภายใตเครองหมายขด ซงเครองหมายเปอรเซนหมายถงอะไรกได รวมค าพดแลวหมายถง ค าทพมพคนหาในตวแปร SName แลวตามดวยค าอะไรกได

LIKE SName+'%'

Page 38: Book

การพฒนาระบบฐานขอมลดวย 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 ตามภาพ

Page 39: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 39

5.19 ในขนตอนตอไปเราตองท าการสรางตวแปร เรยกอกอยางวา Parameters เพอท าหนาทรบสงขอมลระหวาง Form กบ TableAdapter ใน DataSet โดยน า Mouse คลกเลอก FillBySName, GetDataBy() จากนนทหนาตาง Properties เลอก Parameters

5.20 ท าการเพม Parameters และก าหนดชอ SName ตามภาพแลวท าการ OK

5.21 สงเกตวาท Query จะมชอตวแปรตามมา

เลอก

Page 40: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 40

5.22 จากนนท าการทดสอบ Query ทสรางขนโดยคลกขวา Preview Data

5.23 ท าการทดสอบการคนหาดงภาพ ถาไมม Error อะไรแสดงวาทกอยางถกตอง

5.24 กอนทจะท าการเขยนโปรแกรมคนหา ยงมเครองมออกหนงตวคอ TypeBindingSource ทเราตองรจกในภาษา VB เรยกวา BinfingSource เปนเครองมอทท าหนาทเชอมและผกขอมลระหวางตาราง(DataTable) ใน DataSet กบ FormControls ซงในขณะนกคอ DataGridView

Page 41: Book

การพฒนาระบบฐานขอมลดวย 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 ดงภาพ

Page 42: Book

การพฒนาระบบฐานขอมลดวย 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 ท าการรนโปรแกรมและทดสอบการคนหาขอมลดงภาพ

Page 43: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 43

5.29 ในการท างานของเครองมอ Control ทง 3 ทมความสมพนธกนระหวางเครองมอ BindingSource ทท าหนาทผขอมลระหวางตารางใน DataTable ทใชค าสงตางๆ ใน TableAdater ในการจดการประมวลผลขอมลจากฐานขอมลจรง มาไวทหนวยความจ าในรปแบบ DataSet นอกจากนแลวในการท างานบางครงระบบยงมการน าเครองมออกชนดหนงใสเพมเตมให นนกคอ TableAdapterManager เครองมอตวนท าหนาทเปนตวกลางในการ SELECT, INSERT, DELETE, UPDATE ขอมลทมการใชงานหลายตารางทมความสมพนธกนภายใน From เดยวเพอใหงายในการเขยนค าสงจากการใชค าสงหลาย TableAdapter มาใชเพยงค าสงท TableAdapterManager บรรทดเดยวระบบจะท าใหทกตารางทมการเปลยนแปลง

5.30 จากการเขยนโปรแกรมคนหาขอมลน ใหนกศกษาท าการปรบแต FormBooks.vb ดงน

Page 44: Book

การพฒนาระบบฐานขอมลดวย 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) ท าการปดการใชงานฐานขอมล

Page 45: Book

การพฒนาระบบฐานขอมลดวย 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()

Page 46: Book

การพฒนาระบบฐานขอมลดวย 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")

Page 47: Book

การพฒนาระบบฐานขอมลดวย 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

Page 48: Book

การพฒนาระบบฐานขอมลดวย 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='การประมวลผลค า'

เมอท าการรนโปรแกรมจะเหนวามกรณเดยวทจะแสดงขอมลออกมาได การเขยนโปรแกรมเพอดงขอมลออกมาเฉพาะแบบน

Page 49: Book

การพฒนาระบบฐานขอมลดวย 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

Page 50: Book

การพฒนาระบบฐานขอมลดวย 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

Page 51: Book

การพฒนาระบบฐานขอมลดวย 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 ออกจากโปรแกรมจะไดโปรแกรมดงน

Page 52: Book

การพฒนาระบบฐานขอมลดวย 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

Page 53: Book

การพฒนาระบบฐานขอมลดวย 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

Page 54: Book

การพฒนาระบบฐานขอมลดวย 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()

เมอเสรจแลวใหนกศกษาท าการรนโปรแกรมเพอทดสอบการท างาน

Page 55: Book

การพฒนาระบบฐานขอมลดวย 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 ไมไดครบ

Page 56: Book

การพฒนาระบบฐานขอมลดวย 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';")

Page 57: Book

การพฒนาระบบฐานขอมลดวย 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

Page 58: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 58

7.8.5 รนโปรแกรมเพอดความเปลยนแปลงจะเหนวาเมอรนโปรแกรมขอมลตาราง Type จะแสดงออกมาทนท ในทนปม Button1 ไมไดใชแลวจงลบทง จากนนเปลยน Text ของปมดงภาพ

7.9 ท าการเรยกใชงาน Sub Program ShowData ทปมบนทกเพม ปมบนทกแกไข และปมลบ เพอใหเวลา Click ทงสามปมน ขอมลจะแสดงการเปลยนแปลงโดยทนท โดยใหนกศกษาท าการปรบแตเองจากนนท าการปรบแกไขโดยลดปม บนทกเพม และ บนทกแกไข มาเปนปมเดยวกนคอปมบนทกดงภาพ

การประยกตการเขยนโปรแกรมในรปแบบนจะตองประกาศตวแปรไวท Class โปรแกรม จากนนเมอมการคลกทปมเพมใหก าหนดตวแปรทประกาศไวมคาเปนอยางไดอยางหนง และปมแกไขกท าแบบเดยวเชนกน จากนน เมอคลกทปมบนทก ใหเอาคาทก าหนดไวใน 2 ปมมาท าการตรวจสอบเงอนไขวาเปนเหตการณทมาจากปมใด แลวตามเหตการณนน (ใช IF)

Page 59: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 59

บทท 8 การเขยนโปรแกรมระบบการซอสนคา

ในบทนจะเปนการเขยนโปรแกรมเพอสรางระบบการซอสนคาโดยใหนกศกษาท าการเพม Form ขนมาใหมโดยตงชอวา FormOrder.vb จากนนท าการท าหนดรปแบบฟอรมดงตอไปน

ในการสงซอสนคาของฟอรมนไดถกออกแบบโดยใหท าดงขนตอนดตอไปน

1) เมอลกคาเลอกซอสนคาแลวท าการช าระเงน เจาหนาทจะท าน าหมายเลข ISBN หรอรหสหนงสอปอนลงในชองรหสสนคาแลวกด Enter ระบบจะท าการคนหาหนงสอ เมอพบแลวจะแสดงชอสนคา ราคาตอหนวยออกมาทาง Textbox จากนน Curser จะมารอรบจ านวนทสงซอ

2) เมอปอนจ านวนทสงซอ และท าการกด Enter ระบบจะท าการน าขอมลมาเกบไวทตาราง ListViewOrder พรอมค านวณราคาให จากนนระบบจะท าการลางขอมลท Textbox ทงหมดและรอรบขอมลใหม แบบนไปเลอยๆ

3) เมอลกคาช าระเงนโดยเจาหนาทปอนในชองช าระเงน แลวกดปมบนทก ระบบจะท าการบนทกการซอสนคาและค านวณเงนทอน

Page 60: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 60

8.1. เมอสรางฟอรมเรยบรอยแลว ขนแรกเราตองท าระบบโดยการปอนขอมลรหสหนงสอท Textbox จากนนกด Enter ระบบจะท าการคนหาและแสดงชอหนงสอ และราคาหนงสอ ออกมา จากนนให Curser ไปรอทจ านวนทซอ

8.1.1. ขนแรกท าการสราง DataSet ชอ OrderDataSet ขนมา

8.1.2. จากนนท าการเขาไปท DataTable เพอท าการเขยนค าสง Query เพอท าการคนหาขอมลหนงสอจากรหสหนงสอ

Page 61: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 61

8.1.3. หนาตาง Query Builder ท าการระบตวแปรทท าการคนหา ในทนตงชอวา BID โดยใชเครองหมาย = เปนตวตรวจสอบเงอนไข เนองจากตองใหรหสสนคาทกครบถวน เพอจะดงสนคามาเพยง 1 รายการในการคนหา

8.1.4. ท าการตงชอ Fill a DataTable วา FillByBookID

Page 62: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 62

8.1.5. ท าการสราง Parameter ชอ BID ลงให FillBookID,GetDataBy()

8.1.6. ท าการทดสอบการคนหาขอมล โดยการคลกขวาท FillBookID,GetDataBy(BID)

Page 63: Book

การพฒนาระบบฐานขอมลดวย 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

Page 64: Book

การพฒนาระบบฐานขอมลดวย 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

Page 65: Book

การพฒนาระบบฐานขอมลดวย 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 ดงภาพ

Page 66: Book

การพฒนาระบบฐานขอมลดวย 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")

Page 67: Book

การพฒนาระบบฐานขอมลดวย 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 ตออกครง

ภายใตเงอนไขนอาจจะมการตรวจสอบอกกไดวาจ านวนเงนทช าระมมากกวาจ านวนเงนทขายจรงหรอไมเพอปองกนการปอนขอมลผดพลาด

Page 68: Book

การพฒนาระบบฐานขอมลดวย 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 ดงภาพ

Page 69: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 69

8.3.7 จากนนเขาส Edit Queries in DataSet Designer… เพอท าการเพม Query ดงรป

ท าการปรบแตงค าสง SQL ตามภาพโดยค าสงนเปนการดงขอมล OrderID ทคาสงสด

ขนมา 1 คา เมอเสรจแลว ท าการตงชอ Fill a Data Table ชอ FillByTopOrder

Page 70: Book

การพฒนาระบบฐานขอมลดวย 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

Page 71: Book

การพฒนาระบบฐานขอมลดวย 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 จ านวนทสงซอใหอตโนมต

Page 72: Book

การพฒนาระบบฐานขอมลดวย 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

Page 73: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 73

9.3 จากนนจะไดหนาจอการออกแบบรายงานดงน

9.4 ท าการเชอมตอฐานขอมลมาใชในรายงานโดยทหนาตาง Field Explorer ท าการเลอก Database Fields แลวท าการ Click ขวา เลอก Database Expert…

9.5 ทหนาตางท าการเลอก Database Files ตามภาพ

หวเรอง

หวขอรายงาน รายระเอยดรายงาน

Page 74: Book

การพฒนาระบบฐานขอมลดวย 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 ท าการแสดผลและปรบแตงตวอกษร ดงรป

Page 75: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 75

9.9 ทดานลางของหนาตางการออกแบบรายงาน จะม Tab อย 2 Tab คอ Main Report กบ Main Report Preview ใหท าการเลอก Main Report Preview เพอดรปแบบการแสดงผล ดงรป

9.10 เมอไดรายงานตามตองการแลวใหท าการปดหนาตางรายงาน จากนนใหท าการสรางฟอรมใหมเพ อท จะแสดงรายงานในโปรแกรมโดยใชฟอรมเปนตวกลางในการเช อมตอระหวางไฟล CrystalReportBookAll.rpt ทอยใน Solution Explorer โดยตงชอวา ReportBookAllForm.vb

Page 76: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 76

9.11 ทหนาตาง Toolbox ท าการลากเครองมอชอ CrystalReportView มาวางไวท Form

9.12 จากนนเลอกการแสดงผลในหวขอ Choose a Crystal Report…

9.13 ท าการเลอกไฟลทจะแสดงผลดงรป

Page 77: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 77

9.14 เมอท าการชนด Report แลวขอมลจะแสดงผลดงตวอยาง ซงไขอมลทแสดงจะดแลวเหมอนจะไมถกตองแตเมอเวลารนโปรแกรมขอมลจะออกมาในรปแบบทถกตอง

9.15 ในหวขอนจะเปนการแสดงรายงานหนงสอโดยแยกตามประเภทของหนงสอโดยใหนกศกษาท าการสรางรายงานชอ CrystalReportBookType.rpt จากนนในหนาตางการออกแบบรายงานใหเลอกตาราง Books และ Types ดงรป

Page 78: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 78

9.16 จากนนท าการคลกขวาในสวน Section2 (Page Header) เพอท าการ Group ดงรป

9.17 ท าการ Group TypeID ดงรป

9.18 ท าการแสดงผลดงรปแบบตอไปน และทดสอบการแสดงผลจรงพรอมปรบรปแบบใหดน

Page 79: Book

การพฒนาระบบฐานขอมลดวย 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

Page 80: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 80

10.1.3 ท าการใชค าสง SQL เพอเรยก Query Receipt ดงรป

10.1.4 จากนนท าการสราง Parameter ชอ OrderID ชนดเปน Number

10.1.5 ระบบจะใหใสคาทจะสงไปกบ Parameter โดยใหปอนหมายเลขใบ OrderID ลงไปเมอเสรจแลวจะกลบมาทหนาจอเดมดงรปใหท าการ OK

Page 81: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 81

10.1.6 ท าการออกแบบใบเสรจดงรปโดยการเปลยน Parameter ดวยการกดปม Refresh

10.1.7 ท าการหาราคารวมของสนคาแตละรายการโดย Click ขวาท Formula Fields เลอก New

10.1.8 ตงชอ Fields ชอวา Sum จากนนเลอก Use Expert

Page 82: Book

การพฒนาระบบฐานขอมลดวย 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… ดงรป

เลอก

Page 83: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 83

10.1.12 ทหนาตางใหเลอกชอ Field ผลรวมในชองแรก และระบบการค านวณชอ Sum ดงรป

10.1.13 ท าการปรบแตง Report ดงภาพ และเมอเสรจแลวท าการ Save

10.1.14 ท าการ Add Form ขนมาใหมชอ ReportReceiptForm.vb จากนนน า CrystalReportViewer มาวางและท าการเชอมกบ CrystalReportReceipt และเมอท าการรนโปรแกรมแลวระบบจะถามหมายเลข OrderID ดงรป

Page 84: Book

การพฒนาระบบฐานขอมลดวย 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

Page 85: Book

การพฒนาระบบฐานขอมลดวย 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

Page 86: Book

การพฒนาระบบฐานขอมลดวย 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 ทายสดเทานน

Page 87: Book

การพฒนาระบบฐานขอมลดวย 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 ตามรป

Page 88: Book

การพฒนาระบบฐานขอมลดวย 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

Page 89: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 89

10.2.6 ท าการสรางรายงานการขายสนคาประจ าวนดงรป

10.2.7 ตวอยางผลรายงานขอมลการขายสนคาประจ าวน

Page 90: Book

การพฒนาระบบฐานขอมลดวย 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 ท าการสรางรายงานดงภาพ

Page 91: Book

การพฒนาระบบฐานขอมลดวย 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

Page 92: Book

การพฒนาระบบฐานขอมลดวย VB2008.NET |สงวนสทธโดย นายอ านาจ แกวภผา 92

10.3.5 ท าการปรบแตงรายงานใหมดงรป

10.3.6 ตวอยางผล Report