ผู้เขียน หัวข้อ: เปลี่ยนแปลงสถานะ checkbox ผ่านค่า seclectข้อมูลจากฐานข้อมูล  (อ่าน 206 ครั้ง)

ออฟไลน์ janthoeun

  • Newbie
  • *
  • กระทู้: 6
มือใหม่หัดเขียนโปรแกรมครับ อยากจะสอบถามเรื่อง checkbox หน่อย

อยากให้checkboxหลายๆอัน เปลี่ยนสถาน True หรือ Faleโดยอ้างอิงจากค่าในฐานข้อมูลอะครับ
พูดง่ายๆคือ ดึงข้อมูลจากฐานข้อมูลใส่ค่าให้checkboxหลายๆอัน ??

ขอความรู้จากอาจารย์หรือพี่ๆทุกท่านด้วยนะขอรับ
หากอ่านแล้วงง ต้องขออภัย555555

บันทึกการเข้า

ออฟไลน์ ทองก้อน ทับทิมกรอบ

  • Administrator
  • *****
  • กระทู้: 245
  • เพศ: ชาย
  • Webmaster G2GNet
โค้ดนี้จะเป็นการจำลองว่าคุณโหลดค่ามาจากฐานข้อมูล (แบบ Boolean หรือเลขจำนวนเต็มก็ได้) ตรง Form_Load ทีนี้พอลองรันและเลือกปรับค่า Check/Uncheck ก็จะจำลองสถานะการณ์ต่อว่าการจะเก็บข้อมูลลงไปใน DataBase จะต้องเก็บยังไงครับ ...



จากฟอร์มประกอบด้วยปุ่ม CommandButton 1 ตัว และ CheckBox Control 3 ตัว ชื่อ Check1 กำหนดคุณสมบัติให้เป็นแบบ Array (เลือก Index ตัวแรก = 0 ตัวต่อไปก็ 1 และ 2)


Private Sub Command1_Click()
    ' ทดสอบค่าการเลือก Check Box
    MsgBox "Check Box 1 Value = " & Check1(0).Value & vbCrLf & _
        "Check Box 2 Value = " & Check1(1).Value & vbCrLf & _
        "Check Box 3 Value = " & Check1(2).Value
    ' ตอนจะเก็บลงฐานข้อมูล
    If Check1(0).Value = 1 Then ' vbChecked
        ' มีค่าเป็นจริง เราก็กำหนดค่าฟิลด์ข้อมูลมีค่า = -1 หรือ True
        ' อย่างงและสับสนกับค่าของ CheckBox น่ะครับ
    Else
        ' มีค่าเป็นเท็จ เราก็กำหนดค่าฟิลด์ข้อมูลมีค่า = 0 หรือ False
    End If
End Sub

Private Sub Form_Load()
    ' จำลองค่าจากฐานข้อมูล ด้วยการประกาศค่าตัวแปร Array แบบ Boolean
    Dim iCheck(3) As Boolean
    iCheck(0) = -1 ' สำหรับ VB6 True = -1 น่ะครับ
    iCheck(1) = 0  ' หรือ False
    iCheck(2) = False
    ' หากค่าเป็นจริง
    If iCheck(0) Then
        ' การใช้ค่าตัวแปร vbChecked
        Check1(0).Value = vbChecked
    Else
        Check1(0).Value = vbUnchecked
    End If
    '
    If iCheck(1) Then
        ' การใช้ค่าตัวเลข
        Check1(1).Value = 1
    Else
        Check1(1).Value = 0
    End If
    '
    If iCheck(2) Then
        Check1(2).Value = 1
    Else
        Check1(2).Value = 0
    End If
End Sub

บันทึกการเข้า
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

ออฟไลน์ janthoeun

  • Newbie
  • *
  • กระทู้: 6
ขอบคุณมากครับโผม  ;D

บันทึกการเข้า

ออฟไลน์ ทองก้อน ทับทิมกรอบ

  • Administrator
  • *****
  • กระทู้: 245
  • เพศ: ชาย
  • Webmaster G2GNet


มาให้แบบเต็มๆครับ ... ก่อนที่เราจะเขียนโปรแกรมเพื่อติดต่อกับระบบฐานข้อมูล (DataBase) เราก็ควรที่จะควบคุมพวกบรรดาเหล่า Control ให้ได้เสียก่อนครับ ทีนี้ลองมาดูโค้ดตัวอย่างแบบอ่านจากตารางข้อมูล แล้วก็ลองเปลี่ยนค่า CheckBox เพื่อทำการ Save ... ให้สังเกตว่าโครงสร้างการเขียนจากที่ตอบไปก่อน มันไม่ได้เปลี่ยนไปแต่อย่างใดเลย

โค๊ด: [Select]
' / ------------------------------------------------------------------------------------------
' / Developer : Mr.Surapon Yodsanga (Thongkorn)
' / eMail : thongkorn@hotmail.com
' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
' / Facebook: www.facebook.com/g2gnet
' / Purpose:  VB6 with CheckBox control + MS Access DataBase
' / Microsoft Visual Basic 6.0 Service Pack 6
' / ------------------------------------------------------------------------------------------
Option Explicit
Dim ConnDB As New ADODB.Connection
Dim RS As New ADODB.Recordset
Dim Statement As String

' / ------------------------------------------------------------------------------------------
' / บันทึกข้อมูล
Private Sub Command1_Click()
' / ------------------------------------------------------------------------------------------
    ' หากลืมปิดการเชื่อมต่อฐานข้อมูล หากประกาศแบบนี้ จะเป็นการสั่งตัดการเชื่อมตอของเดิมทิ้งไปเลย
    Set RS = New ADODB.Recordset
    Set RS = New ADODB.Recordset
    Statement = "SELECT * FROM Table1 WHERE PK = 1 "
    RS.CursorLocation = adUseClient
    RS.Open Statement, ConnDB, adOpenKeyset, adLockOptimistic, adCmdText
    ' / ------------------------------------------------------------------------------------------
    ' ตอนจะเก็บลงฐานข้อมูล ผมชอบเขียนสไตล์นี้แทนการสั่ง Update แบบเรียงกันไปครับ
    ' / มันตรวจเช็คค่าได้ง่ายกว่า ทำให้ลดโอกาสเกิดข้อผิดพลาดได้ดี
    If Check1(0).Value = 1 Then ' vbChecked
        ' มีค่าเป็นจริง เราก็กำหนดค่าฟิลด์ข้อมูลมีค่า = -1 หรือ True ... อย่างงและสับสนกับค่าของ CheckBox น่ะครับ
        RS("Check1") = -1   ' True
    Else
        ' มีค่าเป็นเท็จ เราก็กำหนดค่าฟิลด์ข้อมูลมีค่า = 0 หรือ False
        RS("Check1") = 0 ' False
    End If
    '
    If Check1(1).Value = 1 Then
        RS("Check2") = True
    Else
        RS("Check2") = False
    End If
    '
    If Check1(2).Value = 1 Then
        RS("Check3") = True
    Else
        RS("Check3") = False
    End If
    ' หากทุกอย่างถูกต้อง เราค่อยมาสั่ง Update ที่นี่ ... ล่างสุดเลย
    RS.Update
    MsgBox "บันทึกข้อมูลเรียบร้อย.", vbOKOnly + vbInformation, "รายงานสถานะ"
    ' / ------------------------------------------------------------------------------------------
    RS.Close: Set RS = Nothing
   
End Sub

' / ------------------------------------------------------------------------------------------
Private Sub Form_Load()
' / ------------------------------------------------------------------------------------------
    ' / เปิดฐานข้อมูล จะทำครั้งแรกและครั้งเดียวพอ
    Call OpenDataBase
   
    ' หากลืมปิดการเชื่อมต่อฐานข้อมูล หากประกาศแบบนี้ จะเป็นการสั่งตัดการเชื่อมต่อของเดิมทิ้งไปเลย
    Set RS = New ADODB.Recordset
    ' ผมเลือกรายการแรกมาเป็นตัวอย่าง
    Statement = "SELECT * FROM Table1 WHERE PK = 1 "
    RS.CursorLocation = adUseClient
    ' อ่านค่าจากฐานข้อมูล
    RS.Open Statement, ConnDB, adOpenForwardOnly, adLockReadOnly, adCmdText
   
    ' หาก CheckBox มีค่าเป็นจริง
    If RS("Check1") Then
        ' การใช้ค่าตัวแปร vbChecked
        Check1(0).Value = vbChecked
    Else
        Check1(0).Value = vbUnchecked
    End If
    '
    If RS("Check2") Then
        ' การใช้ค่าตัวเลข
        Check1(1).Value = 1
    Else
        Check1(1).Value = 0
    End If
    '
    If RS("Check3") Then
        Check1(2).Value = 1
    Else
        Check1(2).Value = 0
    End If
   
    ' ปิดการเชื่อมต่อตารางข้อมูลทุกครั้ง
    RS.Close: Set RS = Nothing
End Sub

Private Sub Form_Unload(Cancel As Integer)
    ' ปิดการเชื่อมต่อข้อมูลฐานข้อมูล
    Call CloseDataBase
    End
End Sub

' / ------------------------------------------------------------------------------------------
' / ฟังค์ชั่นในการเชื่อมต่อเข้ากับฐานข้อมูล จะต่อกับ DB ตัวไหนก็เปลี่ยนแค่ Provider เท่านั้น
Public Sub OpenDataBase()
' / ------------------------------------------------------------------------------------------
On Error GoTo Err_Handler
    Dim DB_File As String
    Dim CnStr As String
    DB_File = App.Path
    If Right$(DB_File, 1) <> "\" Then DB_File = DB_File & "\"
    DB_File = DB_File & "db1.MDB"
    ' Open a connection.
    Set ConnDB = New ADODB.Connection
    ConnDB.ConnectionString = _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & DB_File & ";" & _
        "Persist Security Info=False"
        ' หากมี Password
        '" Jet OLEDB:Database Password=" & "password" & ";" '& _
        '" Engine Type=5;"
    ConnDB.Open
    Exit Sub
Err_Handler:
    MsgBox "Open Database Error : " & vbCrLf & Err.Number & " " & Err.Description
    End
End Sub

Public Sub CloseDataBase()
    ' ตรวจสอบว่ามีการเชื่อมโยง - Connect ข้อมูลหรือไม่
    If ConnDB.State = adStateOpen Then
        ConnDB.Close
        Set ConnDB = Nothing
    End If
End Sub

ดาวน์โหลดโค้ดต้นฉบับ VB6 ที่นี่

บันทึกการเข้า
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด