แสดงกระทู้

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.


Messages - Tatchawin

หน้า: [1] 2 3 4 5
1
ลองดูครับ

ทำได้แล้วครับ เมื่อคืนงมเองตั้งนาน  :cry: ยังไงก็ขอบคุณมากๆนะครับ  :love: 

2
ใช้​ BeforeUpdate event หลัง​ texbox อันที่2 ดีกว่าครับ

 If (not isnull(me. textbox_id) or me.textbox_id<>""​)​ and (not isnull(textbox_disease) or me. textbox_disease<>""​) then
        If dcount("*", "table_name", "id=forms! Formname!textbox_id and   disease =forms! Formname!textbox_disease" ) >0
       then
       Msgbox "ข้อมูลซ้ำ"
       Cancel=true
       End if
Else
Msgbox "ใส่ข้อมูลไม่ครบ"
End if
ลองประยุกต์ดูครับ

ลองแล้ว ไม่ได้เลยครับ TT ดูเหมือนไม่มีอะไร แต่ไปต่อไม่ถูกเลย

3
ลองกับไฟล์ตัวเองแล้วไม่ได้เลยครับ

งั้นผมขอส่งไฟล์จริงมาให้ เพื่อโปรดูให้ผมทีนะครับ โดยความหมายของผมคือ ที่ frmqryTransactions2 หากบนหน้า Form ตรงส่วน "กรอกข้อมูลผู้ป่วยจากการซักประวัติ" ซึ่งมี
- textbox PersonID 5 อัน (Control Source Reference มาจาก textbox ตัวอื่น ห้ามไม่ให้ Enable และ Lock ไว้ ให้ Insert ลงตาราง tblCongDiseaseDetails ด้วยค่านี้)
- ComboBox CongDisease 5 อัน (ต้องกรอกเข้าไปเอง) >> หลังจากกรอก Combo Box เสร็จให้เช็ค After Update ทันทีว่า "PersonID" และ "CongDiseaseID" ซ้ำกับ Record บนตาราง tblCongDiseaseDetails หรือไม่ เช่น ถ้าผู้ป่วยที่มี PersonID: 00000001 หากกรอกว่าป่วยด้วยโรคประจำตัว "Hypertension" และ "กระดูกทับเส้นประสาท" อีก จะซ้ำกับข้อมูลบนตาราง ห้ามไม่ให้กรอกซ้ำอีก ให้ PopUp เด้งเตือน อะไรประมาณนี้ครับ

ไม่แน่ใจว่าผมอธิบายงงหรือเปล่า 555555 ถ้างงตรงไหนถามกลับได้นะครับ รบกวนทีนะครับ

ขอบคุณล่วงหน้ามากๆเลยครับ ใกล้สำเร็จแล้วครับผม




[ไฟล์แนบถูกลบโดยผู้ดำเนินการ]

4
สวัสดีครับ

สอบถามหน่อยครับ พอดีผมต้องการเขียนโค้ด 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

5
ลองดูครับ
อุตส่าห์อธิบายโจทย์ขนาดนี้พยายามทำให้ละกัน  :cool:

ขอสอบถามเพิ่มได้ไหมครับ

หากผมต้องการให้ตรงส่วน "กรอกข้อมูลผู้ป่วยจากการซักประวัติ" มีการเช็คก่อน INSERT ลงตาราง tblDiseaseEmp
ว่าข้อมูลที่กรอกทั้งจาก textbox txtEmployeeID ทั้งสาม และทั้งจาก textbox txtDisease ทั้งสาม นั้นซ้ำกับข้อมูลในตาราง tblDiseaseEmp ที่มีอยู่ก่อนแล้วหรือไม่
(หากซ้ำทั้งคู่ไม่ให้ INSERT แต่หากไม่ซ้ำทั้งคู่หรือซ้ำแค่ฝั่งใดฝั่งหนึ่งสามารถ INSERT ลงไปได้ เพราะตารางใช้ Composite Key)

ผมลองหาโค้ดในยูทูปมาแล้ว มีเจอบ้างแต่ไม่รู้จะ Adapt กับกรณีนี้อย่างไร เพราะมันต้องเช็คทั้งสองค่าน่ะครับ


รบกวนอีกครั้งนึงนะครับ

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

6
ลองดูครับ
อุตส่าห์อธิบายโจทย์ขนาดนี้พยายามทำให้ละกัน  :cool:

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

แต่ทุกครั้งก็จะพยายามเขียนเองให้ได้ก่อนจะปรึกษาใครครับ ได้บ้างไม่ได้บ้าง เกรงใจผู้อื่นอยู่เวลาต้องถามเขา

ยังไงก็ขอบคุณอีกครั้งนะครับ ช่วยได้เยอะเลยครับ จะลองไปต่อยอดเองต่อไปครับ  :love:

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

ผมต้องการทำฟอร์มขึ้นมาอันนึง โดยเป็น 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




8
ขอบคุณมากๆเลยครับคุณ PNR ผมทำได้แล้วครับ ขอบคุณสำหรับความช่วยเหลือทุกคำถามนะครับ :D

9
ขอบคุณครับท่าน ขออีกนิดครับ ที่ lstSection กดซ้ำหลายๆที ไม่มี Error ครับ แต่ที่ lstDepartment กดทีเดียวไม่เปนไร
แต่ถ้ากดซ้ำ2-3 ครั้งก็จะมี Error = Runtime Error '5': ขึ้นมา ตรงนี้แก้อย่างไร ครับ

เหลือตรงนี้จุดเดียว ผมคิดว่าไม่น่ามีไรเพิ่มเติมแล้วครับ
รบกวนอีกสักรอบครับ
ขอบคุณเป็นอย่างยิ่งเลยครับ  :miao:

10
ขอบคุณมากๆครับท่าน ขออภัยที่มาตอบช้านะครับ พอดีหมุนไปทำงานอีกอย่าง
น่าจะเกือบได้แล้วครับ ขอรบกวนอีกสักนิดได้ไหมครับ คือ พอเปิด Form มาผมลองกดไปที่ lstDepartment กับ lstSection เลย ปรากฎว่าเกิด Error ตามภาพ
จะต้องแก้ตัวไหนครับ ผมลองแก้เองแล้วไม่ได้ครับ

รบกวนอีกสักนิดนะครับ ขอบคุณมากๆเลยครับ

11
ขอบคุณมากครับคุณ PNR ผมทำได้แล้วครับ เจ๋งมากๆเลยครับ แต่อยากจะสอบถามเพิ่มเติมครับ พอดีเจอโจทย์เพิ่มจากเจ้านายครับ
คำถามคือ ตัว Listbox แต่ละตัวนี่เราสามารถทำให้ Row Source มันกรองเปลี่ยนตามกันได้ไหมครับ กล่าวคือ

1. ที่ lstPlant ถ้าเรากดเลือกไปที่่โรงงานใดโรงงานหนึ่ง Row Source lstDepartment จะกรองเฉพาะข้อมูลที่สัมพันธ์กับ lstPlant ให้เลือก
2. ส่วนถ้าเลือก lstPlant และ lstDepartment ที่ lstPlant ก็จะกรองเฉพาะข้อมูลที่เกี่ยวข้องมาให้เลือก
สรุปคือ เป็นเสมือน Dropdown ไล่เป็นชั้นๆลงไปครับ ซึ่งผมแบบนี้ได้ ใน combo box แต่ผมนำหลักการแบบที่ทำใน combo box มาทำไม่สำเร็จ

รบกวนคุณ PNR อีกสักรอบได้ไหมครับ ขอบคุณมากๆครับผม
ปล. ผมแนบไฟล์ที่แก้โค้ดตามที่คุณ PNR แนะนำ พร้อมกับใส่ tblOrg ที่เป็นตารางแสดงความสัมพันธ์ของ Plant, Department และ Section มาให้ครับ

12


ขอบคุณมากๆเลยครับ แต่ผมมีคำถามเพิ่มเติม หลังจากที่ได้ทดลองครับ
1. ผมลองกดเลือก filter ที่ปี 2020 แล้วก็กดที่ปี 2020 ซ้ำอีกทีเป็นการ Unfilter ปรากฎว่าขึ้น Popup Runtime Error แบบนี้ครับ
(ที่จริงกด filter ที่ตรงไหนก็ได้ แล้วกดซ้ำอีกทีก็ขึ้น Error runtime เหมือนกัน) ผมอยากแก้ไขตรงนี้
คือ ไม่ให้ขึ้น runtime Error เลย แล้วเมื่อกดซ้ำ Unfilterให้โชว์ Record เหมือนตอนที่เปิด Form frmManpower1 ขึ้นมาครับ
(เข้าใจว่าจะโชว์เฉพาะเดือนปัจจุบันกับเดือนหน้าอีก 1 เดือน)

2. จากภาพ ที่หมายเลข 2 อยากทำปุ่ม Unfilter ครับ เวลาเราเลือก filter หลายๆอัน แล้วอยาก Unfilter ให้โชว์ Record
เหมือนตอนที่เปิด Form frmManpower1 ขึ้นมาครับ

3. อยากทำปุ่ม Select All คือให้ Show Record ทั้งหมด ทุกๆปี ทุกเดือน ทุก WorkGroup ทุกDepartment ทุกSection เลยครับ

รบกวนขอไอเดีย หรือช่วยแก้ไขให้ผมหน่อยนะครับ ผมเองก็งงๆ ที่พัฒนามาได้ในตอนต้นก็ดูจาก youtube มาแบบไม่เข้าใจเท่าไหร่ครับ
ขอบคุณมากๆครับผม

13
Ok ครับ เดี๋ยวรอนะครับ อิอิ

14
ขอแนบไฟล์ส่งมาตามนี้นะครับผม ไหนๆก็ไหนๆแล้ว ผมอยากให้ Sort ได้ทั้ง lstYearSort, lstMonthSort, lstWorkGroup, lstDepartment และ lstSection

ยังไง ถ้าท่านแก้ให้ filter ได้หมดนี้ ก็ดีนะครับ อิอิ

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

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

16
สวัสดีครับทุกท่าน ผมต้องการทำ 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

หน้า: [1] 2 3 4 5