แสดงกระทู้

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 ... 6
1
สอบถามครับทุกท่าน ผมใช้ ODBC Connect MS Access กับ Query ที่ Admin เขาเขียนไว้ที่ View บน Azure ได้
แต่พอผมจะ Connect กับ Table กลับทำไม่ได้ เป็นเพราะอะไรครับ มันขึ้นแบบนี้เลย

วานผู้รู้ดูให้สักนิดครับ ขอบคุณครับ


2
ใช่ครับ แต่ทั้งนี้คุณต้องแยกชื่อพนง.เป็นอีกตารางด้วย โดย 1 คนต้องมี 1 ชื่อล่าสุด ในระบบเท่านั้น

ยกเว้นแต่ว่าคุณสนใจเรื่องการเปลี่ยนชื่อ ก็ต้องมีตารางเก็บข้อมูลการเปลี่ยนชื่อด้วย

การแยกตาราง ทำตามภาพนี้ ผมเข้าใจถูกต้องไหมครับ ถ้าจะอัพเดทชื่อพนง.ต้องอัพที่ tblพนักงาน ซึ่งเป็นตาราง Master ส่วน tblCheckup กับ tblเปลี่ยนชื่อพนักงาน เป็น ตาราง Transaction

ถ้าผมเข้าใจผิด และท่านสะดวก รบกวนทำใน MS Access ให้ดูเป็นตัวอย่างด้วยได้ไหมครับ

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

3
คิวรีที่สร้างให้ มันคือ Total Query

คุณต้องไปเอาไปสร้าง Select Query ต่อ โดยเชื่อมกับตารางข้อมูลแล้วดึงข้อมูลอื่นๆ มาแสดงครับ

สำหรับการเปลี่ยนชื่อนามสกุล คุณต้องแยกข้อมูลชื่อออกมาเป็นอีกตารางครับ

คือในระบบฐานข้อมูลเกี่ยวกับชื่อคนนั้น 1 คน ต้องมี 1 เรคอร์ดล่าสุดเท่านั้น ถ้าต้องการบันทึกชื่อเดิมกับชื่อใหม่ ต้องแยกเป็นอีก 1 ตารางครับ

อ่อ ผมเข้าใจถูกไหมครับ ต้องเอา Query1(ที่สร้างใหม่) มาจอยกับตาราง tblCheckUp (ที่มีอยู่เดิม) อีกที เกิดเปิด Query ใหม่(Query 2) แบบนี้ไหมครับ

4
ขอบคุณสำหรับคำตอบครับ คุณ OddyWriter

ผมลองดูไฟล์ที่คุณ OddyWriter ส่งมาแล้วครับ ผมลองลาก Field อื่นๆเพื่อให้ได้ผลลัพธ์ตามภาพด้านล่าง ปรากฎว่ามันไม่ได้ผลลัพธ์ตามต้องการเลย
โดยผมลองแล้วทั้งเลือกเป็น Last หรือ Max ใน Field อื่นๆ ตอนทำ Query ครับ น่าจะต้องเขียน Criteria การกรองด้วยรึเปล่าไม่แน่ใจ
ทั้งนี้ ให้สังเกตุที่พนง. PersonID = 900017 นะครับ เนื่องจากมีการเปลี่ยนชื่อและนามสกุล ผลลัพธ์ที่ต้องการคือชื่อ-สกุลล่าสุดของเขาที่เปลี่ยนมา คือ "สินทวีชัย หทัยรัตนกุล" ซึ่งถูกบันทึก Record ในวันที่ 01/10/2020 (วันสุดท้ายที่มี Record ของพนง.ท่านนี้)

หมายเหตุ: ผมขอแนบไฟล์ DataSource ที่เป็น .rar มาใหม่นะครับ เนื่องจากที่ DataSource ของ พนง. บางคน PersonID ผิดครับ โปรดใช้ไฟล์นี้ทดแทนครับ


5
สวัสดีครับ ต้องการปรึกษาทุกท่านเรื่องการเขียน Query ครับ ผมมีข้อมูลดังนี้ (ดูรายละเอียดได้จากไฟล์ .rar ที่ผมแนบมานะครับ)

Background ข้อมูล
  • เป็นข้อมูลตรวจสุขภาพพนง.ย้อนหลัง ปี 2018-2020
  • พนง.บางคนมีการตรวจครั้งเดียว บางคนมีการตรวจหลายครั้ง
  • ระหว่างปี 2018-2020 จะมีพนง.บางคนมีการเปลี่ยนชื่อ

ความต้องการ
  • ต้องการสร้าง Master Table โดยการ Calculate Table หรือเขียน Query ขึ้นมาใหม่ เอาข้อมูลเฉพาะคอลัมน์ RecordID, PersonID(PrimaryKey), Prefix, Name, Surname, Year, Note(Highlight สีฟ้าในตาราง Sheet2)
  • ให้ Query Filter เอาเฉพาะข้อมูลปีล่าสุดของพนง.แต่ละคนที่มีข้อมูลเสมอ แม้มีการรีเฟรชข้อมูลเข้า Data Model มาใหม่(เพราะข้อมูลปีก่อนๆ พนง.บางคนยังใช้ชื่อเดิม)

ผลลัพธ์ที่ได้จะเป็นไปตามภาพด้านล่างนี้ครับ ซึ่งผมลองเขียน Query เองแล้วไม่ประสบความสำเร็จเลย จึงอยากรบกวนทุกท่านช่วยแสดงให้ดูหน่อยนะครับ

สงสัยตรงไหนถามได้นะครับผม ขอบคุณล่วงหน้าทุกท่านครับผม


6
ลองดูครับ

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

7
ใช้​ 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 ดูเหมือนไม่มีอะไร แต่ไปต่อไม่ถูกเลย

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

งั้นผมขอส่งไฟล์จริงมาให้ เพื่อโปรดูให้ผมทีนะครับ โดยความหมายของผมคือ ที่ 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 ถ้างงตรงไหนถามกลับได้นะครับ รบกวนทีนะครับ

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




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

9
สวัสดีครับ

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

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

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

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

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


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

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

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

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

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

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

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

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




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

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

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

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

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

16
ขอบคุณมากครับคุณ 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 มาให้ครับ

หน้า: [1] 2 3 4 ... 6