thongkorn โพสต์ 2017-10-23 16:32:18

[VB6] พื้นฐานการนำข้อมูลจาก DataBase มาแสดงผลบนตารางกริด (ADODC)

วันนี้แอดมินจะพาย้อนเวลาถอยหลังกลับไปเมื่อ 20 ปีที่แล้ว กับการเริ่มต้นฝึกฝนเขียนโปรแกรมด้วย Visual Basic 4.0 รุ่น 32 บิท ในยุคที่ข้อมูลข่าวสารทางอินเทอร์เน็ตยังไม่ได้รุ่งเรืองเหมือนในปัจจุบันนี้ ตอนที่ไมโครซอฟท์ออก VB4 มาใหม่ๆ เรียกได้ว่าตื่นตะลึงกันทั้งวงการ เพราะการเชื่อมต่อฐานข้อมูล มันทำในลักษณะแบบ Visual Style ซึ่งทำได้ง่ายดายมากด้วยการลากคอนโทรลมาวางแปะ (นี่คือจุดเริ่มต้นที่ VB ถูกค่อนแคะว่าเขียนโปรแกรมแบบไม่ต้องใช้สมอง) แต่ทว่าด้วยวิธีการนี้มันกลับไม่สามารถตอบโจทย์ของแอดมินหรือคนอื่นๆได้เลย เพราะการพัฒนามันยุ่งยาก ขาดความยืดหยุ่น ผู้ใช้งานก็ใช้ยากอีกนั่นแหละ ...

แอดมินภูมิใจนำเสนอ "รากเหง้า" ของการพัฒนาโปรแกรมติดต่อฐานข้อมูลด้วย Visual Basic 6.0 (SP6) ซึ่งอยากให้ทุกๆท่านได้ลองเปรียบเทียบกันดูซิว่า VB6 มันเหมือนหรือแตกต่างไปจาก VB.Net ที่แอดมินได้เผยแพร่ออกไปเมื่อไม่กี่วันที่ผ่านมา ด้วยวิธีการ Bound Data ในแบบ Run Time ซึ่งจะไม่ใช่การจับลากมาวางแปะแล้วจบ ...http://www.g2gnet.com/webboard/images/vb6/BoundDataRun.png
หน้าจอโปรแกรม ... วิธีการนี้เราเรียกว่า การค้นคืนข้อมูล หรือ Retrieve Data อันเป็นจุดเริ่มต้นของทุกๆงาน


http://www.g2gnet.com/webboard/images/vb6/BoundDataReference.png
การอ้างอิงถึง ADO (Microsoft ActiveX Data Object) เพื่อพูดคุยติดต่อกับฐานข้อมูล

http://www.g2gnet.com/webboard/images/vb6/BoundDataComponent.png
เลือก Component มาใช้งาน

http://www.g2gnet.com/webboard/images/vb6/BoundDataDesign.png
หน้าจอการออกแบบ โดยจะไม่มีการผูกข้อมูล (Bound Data) ให้กับ ADODC (ADO Data Control) เปรียบเทียบได้กับ Data Source บน VB.Net นั่นเอง

http://www.g2gnet.com/webboard/images/vb6/BoundDataQuery.png
แอดมินขอแนะนำให้ลองฝึกใช้เครื่องมือง่ายๆอย่าง MS Access ก่อนครับ ... เป็นตัวอย่างการเชื่อมความสัมพันธ์ของตารางข้อมูลแบบ One To One

http://www.g2gnet.com/webboard/images/vb6/BoundDataAccess.png
ทดสอบ Query จาก MS Access
' / --------------------------------------------------------------------------------
'// Load data into DataGridView.
Sub BindDataGrid(ByVal Sql As String)
    ' Data Control กับกำหนดการเชื่อมต่อไฟล์ฐานข้อมูลแบบ @Run Time
    With Adodc1
      .CursorLocation = adUseClient
      '// ให้อ่าน SQL Statement (Query)
      .CommandType = adCmdText
      '// แสดงผลข้อมูลอย่างเดียว ใช้ LockType แบบ Read Only
      .LockType = adLockReadOnly
      '// กำหนด RecordSource ด้วย Query
      .RecordSource = Sql
      '// สั่งให้ประมวลผลเพื่อกำหนด RecordSource ที่มาจาก SQL Statement
      .Refresh
    End With
   
    '// Bound Data between Adodc1 and DataGrid Control
    Set DataGrid1.DataSource = Adodc1

End Subการ Bound Data แบบ Run Time ... สังเกตครับว่าเหมือนใน VB.Net หรือไม่???

มาดูโค้ดฉบับเต็ม ...
' / --------------------------------------------------------------------------------
' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
' / eMail : thongkorn@hotmail.com
' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
' / Facebook: https://www.facebook.com/g2gnet (For Thailand)
' / Facebook: https://www.facebook.com/commonindy (Worldwide)
' /
' / Purpose: Simple procedure to binding data into DataGrid @Run Time. (ADODC)
' / Microsoft Visual Basic 6 (SP6) + MS Access 2007+
' /
' / This is open source code under @Copyleft by Thongkorn Tubtimkrob.
' / You can modify and/or distribute without to inform the developer.
' / --------------------------------------------------------------------------------
Option Explicit

' / --------------------------------------------------------------------------------
Private Sub cmdExecute_Click()
    '// Trap Error
    If Trim(txtSQL.Text) = "" Or Len(Trim$(txtSQL.Text)) = 0 Then Exit Sub
    '// Binding Data into DataGrid
    Call BindDataGrid(txtSQL.Text)
End Sub

' / --------------------------------------------------------------------------------
Private Sub cmdOpenDB_Click()
    On Error Resume Next
    '// เลือกไฟล์ MS Access เข้ามา
    dlgOpenDB.FileName = ""
    dlgOpenDB.InitDir = App.Path
    dlgOpenDB.DialogTitle = "Select Microsoft Access " '// Set the Common Dialog Title
    dlgOpenDB.Filter = "Microsoft Access Files |*.accdb;*.mdb" '// Display only mdb files
    dlgOpenDB.CancelError = True '// Cancel all errors
    dlgOpenDB.ShowOpen
    dlgOpenDB.DefaultExt = "*.accdb" '// Set the default extension
   
    If dlgOpenDB.FileName = "" Then Exit Sub
    '// Get filename.
    txtLocateDB.Text = dlgOpenDB.FileName
    '// Trap Error
    If Len(txtLocateDB.Text) = 0 Or Trim(txtLocateDB.Text) = "" Then Exit Sub
   
    '// Connect the database by filename of your choice.
    If OpenDataBase(Adodc1, txtLocateDB.Text) Then
      lblStatus.Caption = "Connection successful ..."
      lblStatus.ForeColor = &H8000&
    Else
      lblStatus.Caption = "Disconnection ..."
      lblStatus.ForeColor = vbRed
    End If
End Sub

' / --------------------------------------------------------------------------------
'// รับค่า ADODC และชื่อไฟล์, คืนค่าเป็น True หากทำการติดต่อฐานข้อมูลสำเร็จ
Private Function OpenDataBase(AdoControl As Adodc, DBFile As String) As Boolean
    On Error GoTo ErrHandler
    '// Provider=Microsoft.Jet.OLEDB.4.0 --> For MS Access 2003
    With AdoControl
      .ConnectionString = _
            " Provider=Microsoft.ACE.OLEDB.12.0; " & _
            " Data Source=" & DBFile & ";" & _
            " Persist Security Info=False;"
    End With
    OpenDataBase = True
   
ExitProc:
    Exit Function
   
ErrHandler:
      MsgBox "Open Database Error : " & vbCrLf & Err.Number & " " & Err.Description
      'ConnectDataBase = False
      'Resume ExitProc
      End
End Function

' / --------------------------------------------------------------------------------
Private Sub Form_Load()
    '// Turn off visibility
    Adodc1.Visible = False
    txtLocateDB.Text = ""
    lblStatus.Caption = "Status"
    'txtSQL.Text = ""
    '// ตัวอย่าง SQL Statement
    'txtSQL.Text = "SELECT ContactPK, Fullname, NickName, Phone FROM tblContact ORDER BY ContactPK"
    txtSQL.Text = _
      "SELECT tblContact.ContactPK, tblContact.Fullname, " & _
      "tblPosition.PositionName, tblDepartment.DepartmentName " & _
      "FROM tblDepartment INNER JOIN (tblContact INNER JOIN tblPosition ON " & _
      "tblContact.PositionFK = tblPosition.PositionPK) ON tblDepartment.DepartmentPK = tblContact.DepartmentFK "
End Sub

' / --------------------------------------------------------------------------------
'// Load data into DataGridView.
Sub BindDataGrid(ByVal Sql As String)
    ' Data Control กับกำหนดการเชื่อมต่อไฟล์ฐานข้อมูลแบบ @Run Time
    With Adodc1
      .CursorLocation = adUseClient
      '// ให้อ่าน SQL Statement (Query)
      .CommandType = adCmdText
      '// แสดงผลข้อมูลอย่างเดียว ใช้ LockType แบบ Read Only
      .LockType = adLockReadOnly
      '// กำหนด RecordSource ด้วย Query
      .RecordSource = Sql
      '// สั่งให้ประมวลผลเพื่อกำหนด RecordSource ที่มาจาก SQL Statement
      .Refresh
    End With
   
    '// Bound Data between Adodc1 and DataGrid Control
    Set DataGrid1.DataSource = Adodc1

End Sub

' / --------------------------------------------------------------------------------
Private Sub Form_Unload(Cancel As Integer)
    Set frmBoundData = Nothing
End Sub

' / --------------------------------------------------------------------------------
Private Sub txtLocateDB_KeyPress(KeyAscii As Integer)
    '// Lock key
    KeyAscii = 0
End SubConclusion: จะเห็นได้อย่างชัดเจนเลยว่า หลักการวิธีคิดที่มาจาก VB6 สามารถนำมาใช้ได้กับ VB.Net ได้เหมือนกันเป๊ะๆเลย ... นี่แหละที่เราเรียกกันว่า "พื้นฐาน"
ดาวน์โหลดโค้ดต้นฉบับ VB6 ได้ที่นี่

หน้า: [1]
ดูในรูปแบบกติ: [VB6] พื้นฐานการนำข้อมูลจาก DataBase มาแสดงผลบนตารางกริด (ADODC)