แสดงกระทู้

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - Tatchawin

หน้า: [1] 2
1
สวัสดีครับ

สอบถามหน่อยครับ พอดีผมต้องการเขียนโค้ด VBA AfterUpdate Combobox บน Unbound ครับ โดยหลังจาก Update ให้เช็ค Row ในตาราง หากค่า CongDiseaseID(Datatype Number) และ PersonID(Datatype Text) ในตาราง tblCongDiseaseDetails ตรงกับที่กรอกบน Form
แล้วอยู่ใน Row เดียวกันทั้งสองค่า ให้ฟ้องขึ้นมาว่าค่าซ้ำ ไม่สามารถกรอกได้

เช่น

บนตารางกรอก PersonID(Text) = 000001, CongDiseaseID(Number)= 1

PersonID          CongDiseaseID
000001                     1
567891                     10
654521                     9

Record แรกตรงกับที่กรอกบนตาราง ต้องการให้ PopUp เด้งฟ้องทันทีว่าซ้ำครับ

ผมลองเขียนแล้ว ได้ประมาณด้านล่างนี้ครับ แต่ไม่สำเร็จสักที

รบกวนช่วยดูให้หน่อยนะครับ ผมเช็คชื่อคอนโทรลต่างๆก็ถูกหมดแล้ว น่าจะตกโอเปอร์เตอร์หรือเขียนอย่างอื่นผิด
ขอบคุณครับ

Private Sub txtCongDiseaseID1_AfterUpdate()
Dim intSearch As Integer
intSearch = Me.txtCongDiseaseID1.Value
    If DLookup("[CongDiseaseID]", "tblCongDiseaseDetails", "PersonID='" & Me.txtPersonID1 & "'") = intSearch Then
       MsgBox "ไม่อนุญาตให้กรอกข้อมูลซ้ำ, กรุณาลองใหม่", vbInformation, "ข้อมูลซ้ำกับข้อมูลเดิม"
    End If
End Sub

2
สวัสดีครับ ขออนุญาตเรียนปรึกษาทุกท่านครับ

ผมต้องการทำฟอร์มขึ้นมาอันนึง โดยเป็น Unbound Form ฟอร์มประกอบด้วยส่วน(โหลดไฟล์มาดูได้นะครับ)
1. กรอกข้อมูลผู้ป่วย(INSERT INTO ลงตาราง tblEmployee)
2. กรอกยาที่จ่าย(INSERT INTO ลงตาราง tblTransactions)
3. กรอกข้อมูลผู้ป่วยจากการซักประวัติ(INSERT INTO ลงตาราง tblDiseaseEmp)

โดยมีโค้ด VBA ด้านล่างนี้

สิ่งที่เกิดขึ้นคือ ในส่วนของ "กรอกยาที่จ่าย" กับ "กรอกข้อมูลผู้ป่วยจากการซักประวัติ" (ซึ่งเป็นตารางฝั่ง Many)
เมื่อเขียน INSERT INTO ปรากฎว่ามัน INSERT ลงตารางให้หมด แม้ช่องนั้นจะยังไม่ได้กรอกอะไรก็ตาม เป็นแค่ค่าว่าง

โดยที่ผมต้องการคือ
1. ในส่วนของ "กรอกยาที่จ่าย" กับ "กรอกข้อมูลผู้ป่วยจากการซักประวัติ" (ซึ่งเป็นตารางฝั่ง Many) ในส่วนบรรทัดที่ยังกรอกไม่ครบทุกช่องให้ซ่อนไว้ก่อน เมื่อครบแล้วแสดงบรรทัดต่อไปให้กรอก
2. ในส่วนของ "กรอกยาที่จ่าย" กับ "กรอกข้อมูลผู้ป่วยจากการซักประวัติ" (ซึ่งเป็นตารางฝั่ง Many) เมื่อ INSERT INTO ลงตาราง ให้ INSERT INTO เฉพาะ บรรทัดที่กรอกครบเท่านั้น(เพื่อป้องกันไม่ให้ INSERT ค่าว่างลงตารางแบบในภาพ)


จะมีวิธีการเขียนโค้ดอย่างไรครับ เพื่อที่จะให้ได้ตามที่ผมต้องการ
ขอบคุณล่วงหน้าสำหรับคำตอบนะครับผม

หมายเหตุ: ผมได้แนบไฟล์ไว้ด้านล่าง และนี่คือ Code ครับ

Private Sub cmdSave_Click()
    On Error Resume Next
    DoCmd.SetWarnings False
   
        DoCmd.RunSQL "INSERT INTO tblEmployee(EmployeeID,NamePrefix,FirstName,LastName,NickName,BloodType) Values ('" & Me.txtEmployeeID1 & "', '" & Me.txtNamePrefix & "', '" & Me.txtFirstName & "', '" & Me.txtLastName & "', '" & Me.txtNickName & "', '" & Me.txtBloodType & "');"
        DoCmd.RunSQL "INSERT INTO tblTransactions(EmployeeID,Unit,Qty,UnitPrice) Values ('" & txtEmployeeID2 & "' ,'" & Me.txtUnit2 & "', '" & Me.txtQty2 & "', '" & Me.txtUnitPrice2 & "');"
        DoCmd.RunSQL "INSERT INTO tblTransactions(EmployeeID,Unit,Qty,UnitPrice) Values ('" & txtEmployeeID3 & "' ,'" & Me.txtUnit3 & "', '" & Me.txtQty3 & "', '" & Me.txtUnitPrice3 & "');"
        DoCmd.RunSQL "INSERT INTO tblTransactions(EmployeeID,Unit,Qty,UnitPrice) Values ('" & txtEmployeeID4 & "' ,'" & Me.txtUnit4 & "', '" & Me.txtQty4 & "', '" & Me.txtUnitPrice4 & "');"
   
        Me.Requery
        DoCmd.Close

End Sub




3
สวัสดีครับทุกท่าน ผมต้องการทำ Multiple filter ด้วย Listbox หลายๆอันครับ ให้ Filter ได้ตามเงื่อนไขที่เลือกเลย
โดยผมเขียนโค้ดตามด้านล่างนี้ แล้วลอง filter ดู จากภาพ
1. ที่ Field MonthNum ผมต้องการเลือก Record ของเดือน 9 (September)
2. ที่ Field WorkGroup ผมต้องการเลือก “งานอื่นๆ”

แต่ผลลัพท์คือ ไปเอา “งานอื่นๆ” ของเดือนอื่นมา ซึ่งผมต้องการของเดือน 9 เท่านั้น(ซึ่งผลลัพธ์ที่ถูกต้อง จะต้องไม่มีของเดือน 9 โผล่มา เพราะไม่มี”งานอื่นๆ” ในเดือน 9) ผมจะต้องเพิ่มเติม Code อย่างไรให้ Filter ทำงานทั้งสองตัวครับ

ขอบคุณล่วงหน้าครับผม


Private Sub lstMonthSort_AfterUpdate()
    Call Search1
End Sub
--------------------------------------------------------------------------------------------------------
Sub Search1()
Dim varItem As Variant
Dim strsearch As String
Dim Task As String

Me.FilterOn = True
For Each varItem In Me!lstMonthSort.ItemsSelected
    strsearch = strsearch & "," & Me!lstMonthSort.ItemData(varItem)
Next varItem
'MsgBox (strSearch)
    If Len(strsearch) = 0 Then
        Task = "SELECT * FROM qryPerday"
        Forms!frmManpower1!frmqryPerDay.Form.RecordSource = Task
    Else
        strsearch = Right(strsearch, Len(strsearch) - 1)
        'MsgBox (strSearch)
        Task = "SELECT * FROM qryPerDay WHERE ([MonthNum] in (" & strsearch & "))"
        Forms!frmManpower1!frmqryPerDay.Form.RecordSource = Task
    End If
End Sub
--------------------------------------------------------------------------------------------------------
Private Sub lstWorkGroup_AfterUpdate()
    Call Search2
End Sub
--------------------------------------------------------------------------------------------------------
Sub Search2()
Dim varItem As Variant
Dim strsearch As String
Dim Task As String

Me.FilterOn = True
For Each varItem In Me!lstWorkGroup.ItemsSelected
    strsearch = strsearch & "," & Me!lstWorkGroup.ItemData(varItem)
Next varItem
'MsgBox (strSearch)
    If Len(strsearch) = 0 Then
        Task = "SELECT * FROM qryPerday"
        Forms!frmManpower1!frmqryPerDay.Form.RecordSource = Task
    Else
        strsearch = Right(strsearch, Len(strsearch) - 1)
        'MsgBox (strSearch)
        Task = "SELECT * FROM qryPerDay WHERE ([WorkGroup] in (" & strsearch & "))"
        Forms!frmManpower1!frmqryPerDay.Form.RecordSource = Task
    End If
End Sub

4
สวัสดีครับ

สอบถามปัญหาตามหัวข้อเลยครับ ผมต้องการให้ Combo box ใน Subform Requery หลังจากที่เราเปลี่ยนแปลงค่า Combo box ใน Mainform ครับ
พยายาม Reference ไปที่ combo box ใน Text Form เท่าไหร่ก็ไม่ได้สักที ยังไงช่วยแก้ให้หน่อยนะครับ

ขอบคุณครับ
ปล. โค้ดที่ผมเขียนอยู่ด้านล่างครับ ลอง reference หลายๆแบบ ก็ยังไม่ได้

Private Sub txtPlantID_AfterUpdate()
'    Me.Forms![frmqryCardDetail]![txtNationalID].requey
'    Forms![frmCreateCard]![frmqryCardDetail].Form![txtNationalID].Requery
'    Me.[frmSubEditWork3].[Form]![txtNationalID].Requery
'    Forms!frmqryCardDetail!txtNationalID.Requery
'    Me!frmqryCardDetail.Form.txtNationalID.Requery
'    Me!frmqryCardDetail.Form!txtNationalID.Requery
'    Forms![frmCreateCard]![frmqryCardDetail].Form![txtNationalID].Requery
'    Forms![frmCreateCard]![frmqryCardDetail]![txtNationalID].Requery

Form![frmqryCardDetail]![txtNationalID].requey
End Sub

5
สวัสดีครับ ขอสอบถามเรื่อง Code VBA ครับ

กำลังทำเรื่อง Form Login อยู่ ซึ่งจะต้องมีเรื่องการเปลี่ยน Password ด้วย ซึ่งผมต้องการทำให้หลังจากกดปุ่ม “เปลี่ยนรหัสผ่าน” แล้ว มีการแจ้งเตือน พร้อมส่ง Password ใหม่ไปที่ E-Mail ของแต่ละ User ครับ ผมลองหาวิธีการในยูทูปเพื่อที่จะประยุกต์แล้ว แต่ก็ไม่สามารถทำได้ ยังไงรบกวนช่วยดู Code ให้หน่อยนะครับ

Code ที่แนบมานี้เป็น Code การเปลี่ยน Password ล้วนๆครับ(Click ที่ปุ่ม “เปลี่ยนรหัสผ่าน”(cmdChange)) ไม่แน่ใจว่าจะต้องเขียนต่อจากนี้อย่างไร ผมเขียนๆลบๆอยู่นานเลย ไม่สำเร็จเสียที

รบกวนทุกท่านด้วยนะครับ
ขอบคุณล่วงหน้าครับ




Private Sub cmdChange_Click()
        If DLookup("Password", "tblUser", "UserLogin='" & Me.txtUserLogin & "'") = Me.txtOldPassword Then
            If Me.txtNewPassword & "" <> "" And Me.txtNewPassword <> Me.txtOldPassword Then
   nEmployee = DLookup("UserID", "tblUser", "UserLogin='" & Me.txtUserLogin & "'")
                Dim rs As DAO.Recordset
                Set rs = CurrentDb.OpenRecordset("tblUser", dbOpenDynaset)
                rs.FindFirst "[UserID]=" & nEmployee
                rs.Edit
                rs!Password = Me.txtNewPassword
                rs.Update
                rs.Close: Set rs = Nothing
                Me.txtUserLogin = ""
                Me.txtOldPassword = ""
                Me.txtNewPassword = ""
                MsgBox “เปลี่ยนรหัสผ่านเรียบร้อยแล้ว กรุณาใส่รหัสผ่านใหม่เมื่อ Login", , “เปลี่ยนรหัสผ่านแล้ว"
            Else
                MsgBox "กรุณาใส่รหัสผ่านใหม่ในช่องเปลี่ยนรหัสผ่าน", , “รหัสผิดพลาด"
            End If
        Else
            MsgBox “คุณอาจไม่ได้กรอก UserLogin, OldPassword, NewPassword หรือกรอกอย่างใดอย่างหนึ่งผิด โปรดตรวจสอบอีกครั้ง", , “เปลี่ยนรหัสผ่านไม่สำเร็จ"
        End If
End sub


6
ห้อง MS Access / การใช้งาน SQL Server กับ MS Access
« เมื่อ: 22 ก.ย. 63 , 18:50:41 »
สวัสดีครับ ผมมีคำถามเกี่ยวกับการใช้งาน SQL Server กับ MS Access ดังนี้

1. เราสามารถดึง Query ที่เราทำไว้บน SQL Server มาใช้บน MS Access ได้หรือไม่ (เหมือนกับที่เราต่อ ODBC ดึง Table บน SQL มาใช้บน MS Access)

2. ถ้าเราทำ Query ไว้บน MS Access แต่เราต้องการจะย้าย Query นี้ ให้ทำการ Query ให้จบบน SQL Server แล้วค่อยดึง Query มาดูบน MS Access
(ให้ SQL ทำเรื่อง BackEnd ให้จบ ส่วน MS Access เป็นแค่ FrontEnd ไว้ดูผลลัพธ์เท่านั้น) อยากทราบว่า เราจะสามารถ Copy Code SQL
ที่อยู่บนหน้า SQL View ตอนทำ Query บน MS Access ไปใส่บน SQL แล้วทำการ Query บนนั้นได้ไหมครับ
(Query ที่ผมทำบน SQL มี Calculate Field เช่น
คำนวนอายุตัว อายุงาน รวมทั้ง Concatenate Field ด้วย เช่น เอา Field บ้านเลขที่,ตำบล,อำเภอ,จังหวัด มารวมกับเป็น Fieldใหม่ คือ Address ด้วย)

แบบนี้จะทำได้ไหมครับ


ขอบคุณมากครับ


7
สวัสดีครับทุกท่าน ขอสอบถามปัญหาการเขียนโค้ด Event On Click ให้ Save แล้วมันดันเด้งวนไปที่ Event Before Update ครับ

คือผมทำฟอร์มขึ้นมา ชื่อ frmPunish ซึ่งก็จะมี Subform อยู่ด้านในอีก(สามารถดูได้จากไฟล์แนบครับ) พร้อมกับมีปุ่ม Save 2 ปุ่ม

1. Save New(cmdSave1): ไว้สำหรับเซฟ Record ใหม่ มีโค้ดดังนี้
Private Sub cmdSave1_Click()
    Me.Dirty = False
    DoCmd.SetWarnings False
    DoCmd.RunCommand acCmdSaveRecord
    Me.txtNationalID1 = Me.txtNationalID2
    Me.txtCreated = Now()
    Me.txtCreatedBy = GetUserName()
    MsgBox ("Your record has been successfully saved!")   
    DoCmd.SetWarnings True
    DoCmd.RefreshRecord
End Sub


2. Save New(cmdSave2): ไว้สำหรับเซฟการแก้ไขข้อมูลในแต่ละ Record มีโค้ดดังนี้
Private Sub cmdSave2_Click()
    Me.Dirty = False
    DoCmd.SetWarnings False
    Me.txtModified = Now()
    Me.txtModifiedBy = GetUserName()
    MsgBox ("Your record edited has been successfully saved!")
    DoCmd.SetWarnings True
    DoCmd.RefreshRecord
End Sub


ปัญหาคือ ไม่ว่าจะกดปุ่ม Save ใดก็ตาม มันจะวนมาที่ Event BeforeUpdate ทุกที ซึ่งผมเขียนโค้ดไว้เป็นเหมือนกับ prompt user saving
(ถ้ามีการเลื่อน Record หรือปิดหน้าต่างให้ถามก่อนว่าจะ Save Record นั้นหรือไม่ทุกครั้ง) ซึ่งผมต้องการแค่ว่าถ้ากดปุ่ม Save ใดๆก็ตาม
ให้มันจบแค่ Event On Click ไม่ต้องวนไปที่ Event BeforeUpdate (ซึ่งมันจะขึ้น Pop Up หลายๆครั้งมาก จนเกินไป)

จะมีวิธีใดแก้ปัญหาที่ผมเจอได้บ้าง หรือช่วยแก้โค้ดให้ผมได้ไหมครับ(ผมได้แนบไฟล์มา สามารถโหลดมาลองดูได้ เปิด frmPunish นะครับ)
ขอบคุณมากครับ

โค้ด Event BeforeUpdate
Private Sub Form_BeforeUpdate(Cancel As Integer)
   Dim ctl As Control
   Dim msg As String
   On Error GoTo Err_BeforeUpdate
   If Me.Dirty Then
        msg = (MsgBox("Are you sure you want to save change?", vbYesNo + vbQuestion, "Save Record"))
        If msg = vbNo Then
            Me.Undo
        End If
        If msg = vbYes Then
            If IsNull(Me.txtCreatedBy) And IsNull(Me.txtCreated) Then
                Me.txtNationalID1 = Me.txtNationalID2
                Me.txtCreated = Now()
                Me.txtCreatedBy = GetUserName()
                MsgBox ("Your record has been successfully saved!")
            Else
                txtModified = Now()
                txtModifiedBy = GetUserName()
                MsgBox ("Your record has been successfully saved!")
            End If
        End If
   End If
Exit_BeforeUpdate:
   Exit Sub
Err_BeforeUpdate:
   MsgBox Err.Number & " " & Err.Description
   Resume Exit_BeforeUpdate
End Sub

8
สวัสดีครับ สอบถามปัญหาการใช้ SQL กับ MS Access ครับ

ผมเป็นมือใหม่ เพิ่งหัดใช้ SQL นะครับ วันนี้ทดลอง Import ข้อมูลใน SQL(มีอยู่ 539 Record)กำหนดให้ฟิล์ด ID
เป็น Primary Key (Is Identity=Yes) ต่อ ODBC มาดูบน MS Access ด้วย Form ที่สร้างไว้
ผมทดลองเพิ่มข้อมูลผ่าน Form บน MS Access นั้น(เกิดเป็น ID ที่ 540,541,542...) ก็ทำได้อยู่ครับ
แต่พอผมจะกลับมาแก้ Record ID ที่ 540,541,542 กลับทำไม่ได้ เกิดมาข้อความ Write Conflict ขึ้นมาแทน

แต่พอผมไปแก้ข้อมูลของ ID 1,2,3...(ที่มาจาก SQL Server โดยตรง ที่ไม่ได้เพิ่มบนฟอร์ม)กลับทำได้ ไม่ขึ้น Write Conflict

อยากให้ท่านผู้รู้ช่วยอธิบายสาเหตุและแนวทางแก้ไขให้หน่อยครับ มือใหม่อย่างผมไม่ค่อยเข้าใจครับ เคยใช้แต่ Access มาตลอด

ขอบคุณมากครับ


9
สวัสดีครับ จะรบกวนทุกท่านเช็ค Code SQL ให้ผมหน่อยครับ ผมจะให้ INSERT เข้าไปที่ qryLean โดย SELECT ข้อมูลจาก qryHRDWH เมื่อ qryHRDWH.Selection = -1 แต่มันขึ้นว่า 'Run Time Error 3346': Number of query value and destination fields are not the same. ผมก็พยายามเชคว่ามันครบหรือเปล่า มันก็ครบนะครับ ก็เลยงงๆว่ามันผิดอะไรกันแน่ ยังไงช่วยแก้ให้ทีนะครับ

ขอบคุณครับ



Private Sub cmdRun_Click()
    Me.Requery
    If IsNull(Me.txtSCGEmployeeID) Then
        Me.txtSelection.Value = 0
    Else
        DoCmd.RunSQL "INSERT INTO qryLean([SCGEmployeeID],[NamePrefixThai],[FirstNameThai],[LastNameThai],[NamePrefixEng],[FirstNameEng],[LastNameEng]," & _
        "[NickName],[Position],[SubShift],[Shift],[SubSection],[Section],[SubDepartment],[Department],[SubDivision],[Division],[SubCompany],[Company],[Birthdate]," & _
        "[SCGHiringDate],[SystemDateTime],[ImagePath],[Selection])" & _
        "SELECT qryHRDWH.SCGEmployeeID, qryHRDWH.NamePrefixThai, qryHRDWH.FirstNameThai, qryHRDWH.LastNameThai, qryHRDWH.NamePrefixEng" _
        & "qryHRDWH.FirstNameEng, qryHRDWH.LastNameEng, qryHRDWH.NickName, qryHRDWH.Position, qryHRDWH.SubShift, qryHRDWH.Shift, qryHRDWH.SubSection" _
        & "qryHRDWH.Section, qryHRDWH.SubDepartment, qryHRDWH.Department, qryHRDWH.SubDivision, qryHRDWH.Division, qryHRDWH.SubCompany, qryHRDWH.Company" _
        & "qryHRDWH.Birthdate, qryHRDWH.SCGHiringDate, qryHRDWH.SystemDateTime, qryHRDWH.ImagePath, qryHRDWH.Selection" & _
        " FROM qryHRDWH Where qryHRDWH.Selection = -1"
       
'        DoCmd.RunSQL "Delete * from tblProductJan2020 where tblProductJan2020.Select=-1"
       
    End If
End Sub

10
สวัสดีครับ รบกวนปรึกษาครับ

ผมกำลังทำ Search by Combo box โดยให้ Combo box ค้นหาตามส่วน แผนก งาน ย่อยไปเรื่อยๆ ทีนี้ พวกค่าส่วน แผนก งาน ใน table ผมเก็บเป็น ID หมดแล้วใช้การ Lookup Value เอา เวลาทำ Combo box จะเสิร์ชผมก็มา Bound Column ที่ ID แล้วก็กำหนด Column Count และ Column Widths เอาค่าส่วน แผนก งานมาโชว์ครับ
ผมก็เขียนโค้ดได้ประมาณนี้

Private Sub SearchCombo()
    Dim sql As Integer
    sql = "SELECT * FROM tblWorkforceY2020 WHERE [DepartmentID] =  & Me.cbSearch1 & "
    Forms!frmWorkforce.RecordSource = sql
    Forms!frmWorkforce.Requery
End Sub

Private Sub cbSearch1_AfterUpdate()
    SearchCombo
End Sub


ผลปรากฎว่า มันขึ้น Pop Up แจ้งเตือนว่า
Run-Time error '13':
Type mismatch

ผมไม่รู้ว่าผิดตรงไหน ช่วยแก้ให้หน่อยนะครับ

ขอบคุณมากครับ

11
สวัสดีครับท่านครับ ขอรบกวนปรึกษาเรื่อง Combo Box ซ้อน Combo Box ครับ(ให้ Combo Box กรองข้อมูลย่อยๆลงไป เพื่ออัพเดตลงตาราง)

อาจดูไม่ยากเย็น แต่ไม่รู้ทำไมผมถึงแก้ไมไ่ด้

รบกวนท่านดูไฟล์นี้ให้ผมหน่อยนะครับ เปิดไปที่ frmSession ผมต้องการให้ txtSubjectID มันเปลี่ยนไปตามกรุ๊ปของ txtSubjectGroupID ครับ
ผมทำตามคลิปของฝรั่งด้านล่างนี้ ผลคือ มันเปลี่ยนไปตามกรุ๊ปก็จริง แต่พอเลื่อนกลับไปกลับมา ค่าใน txtSubjectID มันหายไปเฉยเลย ไม่ยอมเอาขึ้นมาโชว์(แต่มันบันทึกลง tbl ได้)

รบกวนช่วยดูหน่อยครับ ไม่เข้าใจจริงๆทำไมไม่ได้

ขอบคุณเป็นอย่างสูงครับ
ปล.ผมทำตามคลิปของฝรั่งคลิปนี้ครับ

12
สวัสดีครับ เนื่องด้วยผมกำลังจะโอนย้ายข้อมูลจาก MS Access ขึ้น SQL Server
แต่ตารางบน MS Access ที่เคยทำไว้ มี Field จำนวนหนึ่งที่เป็น Field ประเภท ID (Datatype Number)
แต่ Field เหล่านี้ Display เป็น Combo Box ซึ่งไป Lookup ค่าจากอีกตารางหนึ่งมาแสดงเป็น Text ตัวอย่างตามภาพ เช่น field ServiceID(Datatype Number) ของ tblTransactions ไป Lookup ค่า Service บน tblService แล้วมาโชว์เป็น Text เป็นต้น

อยากรู้ว่าเวลาเอาขึ้น SQL Server มันจะโชว์เป็น Number หรือ Text ครับ
ขอบคุณมากๆครับ

13
สวัสดีครับทุกท่าน ผมมี Code สองตัวนี้ครับ ต้องการที่จะรวมกัน ตามโจทย์ผมด้านล่างนี้ จะมีวิธีการรวมอย่างไรครับ
ตัวแรก: เป็น Code PromptUserSaving ก็คือถ้าหน้าฟอร์มมีการแก้ไข อัพเดต ลบ แล้วเราจะเลื่อนไปหน้าอื่น หรือกดปิดฟอร์ม ระบบก็จะฟ้องขึ้นมาว่าจะ Save หรือไม่
ตัวสอง: หลังจากที่เราตอบ Save จากข้อที่ 1 ให้บันทึกลงไปที่ Field เลยว่า Record นี้ถูกแก้ไข Update วันไหน กี่โมง

Code แรก:
Private Sub Form_BeforeUpdate(Cancel As Integer)

   ' This procedure checks to see if the data on the form has
   ' changed. If the data has changed, the procedure prompts the
   ' user to continue with the save operation or to cancel it. Then
   ' the action that triggered the BeforeUpdate event is completed.

   Dim ctl As Control

   On Error GoTo Err_BeforeUpdate

   ' The Dirty property is True if the record has been changed.
   If Me.Dirty Then
      ' Prompt to confirm the save operation.
      If MsgBox("Do you want to save?", vbYesNo + vbQuestion, _
              "Save Record") = vbNo Then
         Me.Undo
      End If
   End If

Exit_BeforeUpdate:
   Exit Sub

Err_BeforeUpdate:
   MsgBox Err.Number & " " & Err.Description
   Resume Exit_BeforeUpdate
End Sub

Code สอง:
'------------------------------------------------------------
' Form_BeforeUpdate
'
'------------------------------------------------------------
Private Sub Form_BeforeUpdate(Cancel As Integer)
On Error GoTo Form_BeforeUpdate_Err

    Modified = Now()
    ModifiedBy = CurrentUser()


Form_BeforeUpdate_Exit:
    Exit Sub

Form_BeforeUpdate_Err:
    MsgBox Error$
    Resume Form_BeforeUpdate_Exit

End Sub

ตามโจทย์ข้างต้น วอนท่านผู้รู้ ช่วยเขียน Code สองตัวนี้รวมกันหน่อยครับ ผมพยายามแล้ว ทำไม่ได้เลยครับ

ขอบคุณครับ

14
สวัสดีครับ ขอสอบถามทุกท่านตามหัวข้อเลยครับว่า หากย้าย Database จาก Access ไป SQL
พวก Coding ต่างๆที่เราเขียนไว้ เช่น Query,Module,Expression,Event และอื่นๆ จะหายไหมครับ
ถ้าหาย จะมีวิธีแก้อย่างไร ใครมีวิธีแก้รบกวนขอคำแนะนำด้วยนะครับ

ขอบคุณมากครับ

ปล.ถ้าใครมีวิธีการย้าย Database จาก Access ไป SQL โปรดโพสให้ด้วย จะขอบพระคุณยิ่งครับ  :love: :miao:

15
สวัสดีทุกท่านครับ

ขออนุญาตถามคำถามเกี่ยวกับการใช้งาน Database ร่วมกันครับ

หากผมมีโปรแกรมตัวนึงที่ต้องการแบ่งสิทธิ์ให้คนอื่นใช้ร่วมกัน โดยผมต้องการให้สิทธิ์กับเครื่อง Client กรอกข้อมูลที่ตนรับผิดชอบเข้ามา โดย

1. ตัวโปรแกรมจะอยู่ที่เครื่อง Server ที่ผมเป็นผู้รับผิดชอบ เป็น Admin มีสิทธิ์แก้ไขได้ทุกอย่าง
2. ตัวผู้กรอกข้อมูลจะมีเครื่อง Client ไว้กรอกข้อมูลเข้า แก้ไขข้อมูลผ่าน Form เท่านั้น ไม่มีสิทธิ์เข้าถึง Data Table และ Queries ด้านหลัง(เข้าถึงได้เฉพาะ Front End)


วิธีการแบบนี้เรียกว่าอะไร(Split Database ใช่หรือไม่) สามารถทำได้ไหม และมีวิธีการทำไหมครับ
(เข้าใจว่าต้องมีขั้นตอนเชื่อมต่อ ตั้งค่า กำหนดสิทธิ์อะไรสักอย่างบนคอมพิวเตอร์เรากับเครื่อง Client แน่ๆ)

รบกวนทุกท่านด้วยครับ หากส่งเป็นคลิปในยูทูปมาด้วยก็จะดีมากครับ

ขอบคุณมากๆครับผม

16
ขอปรึกษาและสอบถามท่านผู้รู้ครับ

ผมได้รับโจทย์จากทางนาย ให้เขียนโปรแกรมเพื่อเก็บข้อมูลพนง.รับเหมาในโรงงาน โดยเก็บข้อมูลดังนี้
1. ชื่อสกุลพนักงาน
2. ที่อยู่พนักงาน
3. สังกัด(ตำแหน่ง แผนก ส่วน ฝ่าย โรงงาน บริษัทต้นสังกัดของพนง.รับเหมา รูปแบบการจ้างเหมา ฯลฯ)
4. ประวัติการถูกลงโทษ
5. ประวัติการอบรม

โดยทั้งหมด ผมได้ออกแบบ Databased ตาม ER Diagram ตามภาพที่ 1 แบ่งเป็นฝั่งซ้ายและฝั่งขวา

ข้อ 1-4 ผมได้ออกแบบ Databsed เพื่อใช้เก็บข้อมูลในฝั่งซ้าย(ตารางพื้นที่สีเขียวเก็บข้อ 1-3 ส่วนตารางพื้นที่สีน้ำเงินเก็บข้อมูลข้อ 4)
ซึ่งผมทำ Databased ให้ออกมาเป็นรูปแบบที่ตั้งใจ นำไปออกแบบฟอร์มกรอกข้อมูลเพิ่มเข้าได้ ตามที่ตั้งใจไว้แล้วครับ
แต่ที่ติดปัญหาคือข้อ 5 คือ เรื่องประวัติการฝึกอบรมนั้น ซึ่ง Databased จะอยู่ทางขวามือ(ตารางพื้นที่สีแดง)ของ ER Diagram

โจทย์ในการจัดทำ
1. ต้องการทำฟอร์มบันทึกข้อมูลการฝึกอบรมให้ได้ตามแบบรูปภาพที่ 2 คือ มี Form ที่มี tblSession (เก็บข้อมูลSessionID, ชื่อหลักสูตร, Description, Objectiveหลักสูตร, ระยะเวลาการฝึกอบรม,
ผู้สอน, บริษัทที่มาสอน ฯลฯ)เป็น Record Source และมี Subform ที่บันทึกชื่อผู้เข้าอบรม ในแต่ละ SessionID (Dropdown เลือก NationalID หรือชื่อ-สกุลปุ๊บ ขึ้น WorkID, ตำแหน่ง, สังกัดพนง.ปั๊ปทันที)
2. Subform ในข้อ 1 นั้น ต้องบันทึกข้อมูลไว้ด้วยว่า พนง.ที่มาอบรมนั้น ขณะนั้น มีตำแหน่งอะไร สังกัดอะไร เพื่อจะนำข้อมูลไปใช้ต่อในข้อ 3
3. ต้องรู้ให้ได้ว่าตำแหน่งงานทั้งหมดใน Databased นั้น จะต้องอบรมอะไรบ้าง เพื่อให้เป็นไปตามที่กฎหมายกำหนด แล้วพนง.ที่อยู่ในตำแหน่งนั้น ๆ
ได้อบรมครบตามกฎหมายกำหนดแล้วหรือยัง


การแก้โจทย์
ข้อ 1-2: ผมจัดทำ
- Form ขึ้นมาโดยใช้ tblSession เป็น Record Source ได้
- Subform โดยให้เป็น Unbound SubForm ซึ่งผมเขียน Expression ที่ txtWorkID โดยเมื่อ Dropdown เลือก NationalID เมื่อไหร่ ระบบจะไปดึง Last WorkID ของพนง.คนนั้น ๆ มาจาก
tblWork(Transaction Table) มาโชว์ จากนั้น ก็เขียน VBA on click ที่ปุ่ม Save ให้ Save ข้อมูล Subform ลง tblTrainingRec
ข้อ 3: ผมยังไม่รู้แนวทางจะทำอย่างไรดี ทั้งการออกแบบ Databased, การทำแบบฟอร์มเพื่อคีย์หลักสูตรที่แต่ละตำแหน่งต้องอบรมให้ครบตามกฎหมาย, การทำ Report

ปัญหาที่เกิดขึ้น
ข้อ 1-2: เกิด Error ใน Subform ตามภาพที่ 2
ข้อ 3: ผมยังไม่รู้แนวทางจะไปต่ออย่างไรดี ทั้งการออกแบบ Databased, การทำแบบฟอร์มเพื่อคีย์หลักสูตรที่แต่ละตำแหน่งต้องอบรมให้ครบตามกฎหมาย, การทำ Report

คำถาม: เพื่อให้ได้ตามโจทย์ที่กำหนด
1. แนวทางการออกแบบ Databased ที่ผมทำมานี้ เหมาะสมแล้วหรือไม่? ถ้าไม่ ผมควรจะออกแบบอย่างไรเพื่อให้ได้ตามโจทย์ที่ผมต้องการ?
2. ถ้าผมออกแบบ Databased มาถูกทางแล้ว จะทำอย่างไรให้ Subform ไม่ Error ครับ? แล้วจะไปต่อกับเรื่องการกำหนดหลักสูตรที่แต่ละตำแหน่งต้องอบรมให้ครบตามกฎหมายอย่างไรดีครับ?

ยาวหน่อยนะครับ รบกวนขอไอเดียจากท่านผู้รู้ด้วยครับ ขอบคุณมากๆครับผม
หากท่านใดอ่านแล้วงงๆ สามารถถามเพิ่มได้นะครับ หรืออยากจะดูไฟล์ที่ทำ ก็พร้อมจะส่งให้ดูครับ





หน้า: [1] 2