Sub SaveData()
Dim CountRec As Long
Set RS = New ADODB.Recordset
' ตัวอย่างนี้ผมไม่ได้ทำปุ่มเพิ่มข้อมูลเอาไว้ ... ส่วนนี้ก็ผ่านไปเลยครับ ให้พิจารณาการแก้ไขข้อมูลอย่างเดียว
If blnNewData Then
' หาค่า Primary Key (CustomerPK) ก่อน ... อย่าลืมต้องจัดเรียงด้วย CustomerPK
Statement = "SELECT * FROM tblCustomer ORDER BY CustomerPK "
RS.CursorLocation = adUseClient
RS.Open Statement, ConnDB, adOpenForwardOnly, adLockReadOnly, adCmdText
' เงื่อนไขแรกแสดงว่ายังไม่มีข้อมูล
If RS.BOF Or RS.EOF Then
CountRec = 1
Else
RS.MoveLast
CountRec = RS("CustomerID") + 1
End If
RS.Close
Set RS = New ADODB.Recordset
Statement = "SELECT tblCustomer.*, tblProvince.* " & _
" FROM tblCustomer INNER JOIN tblProvince ON tblCustomer.ProvinceFK = tblProvince.ProvincePK " & _
" ORDER BY [CustomerPK] "
RS.Open Statement, ConnDB, adOpenKeyset, adLockOptimistic, adCmdText
' นี่คือการ INSERT น่ะครับ
RS.AddNew
RS("CustomerPK") = CountRec
' ส่วนนี้ไม่มีอะไรมาก ผมอยากจัดรูปแบบของ CustomerID เช่น CUS0000001
RS("CustomerID") = "CUS" & Right$("0000000" & CountRec, 7)
' Edit/แก้ไขข้อมูล
Else
Statement = "SELECT tblCustomer.*, tblProvince.* " & _
" FROM tblCustomer INNER JOIN tblProvince ON tblCustomer.ProvinceFK = tblProvince.ProvincePK " & _
" WHERE [CustomerPK] = " & CusPK
RS.Open Statement, ConnDB, adOpenKeyset, adLockOptimistic, adCmdText
End If
' Save Data/บันทึกข้อมูล
' ผมว่าผมเขียนโค้ดแบบดั้งเดิมเนี่ย มันอ่านง่าย แก้ไข หาจุดบกพร่องได้ง่ายง่ายกว่า INSERT, UPDATE เป็นไหนๆ
RS("Firstname") = "" & Trim(txtFirstname.Text)
RS("Lastname") = "" & Trim(txtLastname.Text)
RS("Address") = "" & Trim(txtAddress.Text)
RS("Amphur") = "" & Trim(txtAmphur.Text)
' ส่วนนี้ต้องระวังให้ดีน่ะครับ เป็นการนำค่าใน ComboBox ไปตรวจสอบหาค่า Primary Key ของรายชื่อจังหวัด
' กรณีของตัวเลข ไม่ต้องมาใส่เครื่องหมาย "" ข้างหน้าน่ะครับ
RS("ProvinceFK") = CheckProvinceName(cmbProvince.Text)
'
RS("PostCode") = "" & Trim(txtPostCode.Text)
RS("Telephone") = "" & Trim(txtTelephone.Text)
RS("Facsimile") = "" & Trim(txtFacsimile.Text)
' เก็บข้อมูลตำแหน่ง และ ชื่อไฟล์ภาพไว้จากค่าตัวแปร
RS("CustomerPicture") = "" & PicturePath
RS.Update
' บอกฟอร์มหลักว่าเกิดการเปลี่ยนแปลงข้อมูล
FormUpdate = True
MsgBox "บันทึกข้อมูลเรียบร้อย", vbOKOnly + vbInformation, "รายงานสถานะ"
RS.Close: Set RS = Nothing
Set frmCustomer = Nothing
Unload Me
End Sub
' ส่งค่าชื่อตาราง กับ ชื่อของ Combo Box
' การตรวจสอบชื่อจังหวัดจาก ComboBox เพื่อค้นหาค่า ProvincePK แล้วส่งค่าคืนกลับไป
Function CheckProvinceName(ComboText As String) As Integer
Set DS = New ADODB.Recordset
' เปรียบเทียบค่า Text ใน ComboBox ... แต่ต้องการผลที่ได้เป็น ProvincePK เพื่อนำไปบันทึกข้อมูล
Statement = "SELECT * FROM tblProvince " & " WHERE [ProvinceName] = " & "'" & ComboText & "'"
DS.Open Statement, ConnDB, adOpenForwardOnly, adLockReadOnly, adCmdText
If DS.BOF And DS.EOF Then
' หากไม่พบให้ Return ค่ากลับเป็น 0
' จากตารางข้อมูลค่า ProvincePK = 0 คือ ไม่ระบุ น่ะครับ ... พี่น้อง
' ดังนั้นในตารางข้อมูลคุณต้องกำหนดค่าเป็น 0 ไว้รอไว้ด้วย
CheckProvinceName = 0
Else
' ส่งค่า ProvincePK กลับไปเก็บลงฐานข้อมูล
CheckProvinceName = DS("ProvincePK")
End If
DS.Close: Set DS = Nothing
End Function
|