แสดงกระทู้

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 - Supanida

หน้า: [1] 2
1
ทำได้ครับ ใช้คิวรีธรรมดาๆ ก็ได้แล้ว
จากรูปนี้มีตาราง (1) แล้วนำมาสร้างคิวรี โดยกำหนด Criteria แบบ OR (2)

เราก็จะได้ข้อมูลที่เลือกด้วย 3 ตัวเลือก (3)

โพสต์นี้ได้รับคำขอบคุณจาก: Supanida

2
ห้อง MS Access / : Modul not found
« เมื่อ: 07 พ.ค. 62 , 08:38:54 »
พอดีเปิด 64bit ไม่ได้ แต่พอแปลงเป็น 32bit ลองเปิดดูเปิดได้ปกติ
โพสต์นี้ได้รับคำขอบคุณจาก: Supanida

3
ปัญหาเกิดจาก คุณไปกำหนด frm_search ที่เป็น subform ให้คุณสมบัติของฟอร์มห้ามแก้ไขคับ


แก้เป็น ใช่ แล้วจะสามารถติ๊กได้คับ
 :grin: :grin:
โพสต์นี้ได้รับคำขอบคุณจาก: Supanida

4
เกิดได้จากหลายสาเหตุมาก (พอๆ กับตัวเลขที่หมอแปลกบอกมา) ส่งไฟล์ไว้ในนี้ก็ดีครับ คนที่นี่จะได้ช่วยได้ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Supanida

5
ตามที่ผมตอบในคำตอบแรกเลย
อ้างถึง
พอกดปุ่ม [ทำการเบิก] ก็ให้เขียนทุกเรคอร์ดในเทเบิล T ที่ฟิลด์ S มีค่าเป็น True ลงในเทเบิลการเบิกจ่ายและเทเบิลรายการเบิกจ่าย (RI)   แล้วค่อยเปิดฟอร์มเบิก/จ่ายตามเอกสารที่เพิ่งสร้างอีกที

การเขียนเรคอร์ด ก็คือสร้าง Append Query
ส่วนเปิดฟอร์มก็บอกไปแล้วเหมือนกัน คือ DoCmd.OpenForm
เปิดแล้วก็กำหนด .RecordSource ของฟอร์มเบิก/จ่าย เป็นเอกสารเลขที่ที่เพิ่งสร้าง
โพสต์นี้ได้รับคำขอบคุณจาก: Supanida

6
ก็ตรวจสอบโดยดับเบิลคลิกที่คิวรี่ A และ B ที่ละตัวตามลำดับสิครับ รันแต่ละตัวแล้วก็มาเปิดดูค่าในเทเบิลว่าเปลี่ยนแปลงไปตามการทำงานของคิวรี่หรือไม่ อันไหนไม่ ก็แปลว่าคิวรี่ตัวนั้นผิด ก็เอามาแก้ไข คุณต้องมีตรรกกะในการหาวิธีตีวงของปัญหาให้แคบลง หาจุดที่ผิดเอง ลองดูครับ

ถ้าหาที่ผิด (เรียกว่าการ debug โปรแกรม) อย่างมืออาชีพหน่อย ก็ใช้วิธีให้โค้ดทำงานทีละคำสั่งทีเราเรียกว่า การ trace การทำงานของโค้ดแบบ step by step แล้วตรวจดูค่าในเทเบิลเช่นกัน
โพสต์นี้ได้รับคำขอบคุณจาก: Supanida

7
ไม่ใช่เกณฑ์ (Criteria) แต่เป็นบรรทัดที่เขียนว่า Update To (ไม่รู้ภาษาไทยเขาใช้คำว่าอะไร) ของคอลัมน์ฟิลด์ Yes/No ซึ่งบรรทัดนี้จะมีใน Update Query เท่านั้น โดยใส่เป็นคำว่า True ไปตรงๆเลย
โพสต์นี้ได้รับคำขอบคุณจาก: Supanida

8
แน่นอนครับ คิวรี่ B ต้องกำหนดค่าของฟิลด์ Yes/No เป็น True
โพสต์นี้ได้รับคำขอบคุณจาก: Supanida

9
ใน Update Query (B) ก็จะมีลักษณะเงื่อนไขเป็นตามรูปข้างล่างนี้ (ไปเติมอีกเงื่อนไขเองนะครับ) เห็นไหมครับว่าเงื่อนไขก็เหมือนกับที่คุณทำ


ทีนี้ ต้องมีอีก Update Query (A) ที่ไม่ต้องมีเงื่อนไขใดๆ แต่ให้แก้ไขค่าฟิลด์ Yes/No เป็น False ให้หมดก่อนเพื่อเคลียร์การทำเครื่องหมายที่มีมาก่อน แล้วก่อนที่จะรันโค้ด 3 บรรทัดของคุณใน SearchCombo ก็ให้โปรแกรมก็เรียกคิว A ตัวนี้ทำงานเสียก่อน

ต่อไปก็เรียกคิวรี่ B ทำงานเพื่อทำเครื่องหมายให้ฟิลด์ Yes/No

แล้วค่อยต่อท้ายด้วยโค้ด 3 บรรทัดเดิมของคุณ เพื่อแสดงผลการค้นออกมาบนฟอร์ม

ทีนี้ถ้าอยากให้ดูกระชับ ใช้โค้ดเพียงอย่างเดียวโดยไม่ต้องสร้าง Update Query ก็ให้ใช้คำสั่ง DoCmd.RunSQL "คำสั่ง SQL UPDATE statement" แทนก็ได้ อันนี้ไปศึกษาเองครับ ไม่ได้ยากอะไร
โพสต์นี้ได้รับคำขอบคุณจาก: Supanida

10
"กำหนดเงื่อนไขโดยการเขียนโค้ดเป็นตัวกำหนดค่ะ"  ก็เงื่อนไขอันเดียวกันนั้นแหล่ะครับ เหมือนๆกัน 100% เลย

ลองเอาคิวรี่และโค้ดส่วนนี้มาแสดงให้ดูหน่อยครับ ถ้าแสดงเป็นรูปง่ายกว่าเขียนอธิบาย ก็เอารูปมาให้ดูประกอบด้วยก็ได้
โพสต์นี้ได้รับคำขอบคุณจาก: Supanida

11
อย่างที่บอกแหล่ะครับ การแก้ไขเรคอร์ดในเทเบิล ก็ใช้ Update Query    โดยในมุมมองแบบ Design View   ที่บรรทัด Update To ก็กำหนดค่าสำหรับฟิลด์ Yes/No นั้นเป็นคำว่า True และในบรรทัด Criteria ของคอลัมน์ของทุกฟิลด์ที่ใช้เป็นเงื่อนไข ก็ใส่เงื่อนไขสำหรับการดึงเรคอร์ดเหล่านั้นมาแก้ไข
โพสต์นี้ได้รับคำขอบคุณจาก: Supanida

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

13
ถ้าระบบมีผู้ใช้คนเดียว เอาง่ายก็คือเพิ่ม S ลงในเทเบิลที่เป็นแหล่งข้อมูลที่แสดงส่วนของ [ผลลัพธ์การค้น] (R) หาไปเลยก็ได้

ส่วนที่เลือกไม่ได้ ให้ทดสอบว่าสามารถแก้ค่าในคอนโทรลอื่นๆใน R ได้ด้วยหรือไม่ ถ้าไม่ได้เหมือนกัน อาจเกิดจากคิวรี่(ถ้ามี)ที่เป็นแหล่งข้อมูลของผลการค้นหามีการเชื่อมเทเบิลและเข้าเงื่อนไขให้คิวรี่นั้นแก้ไขไม่ได้ แก้ไขโดยเลือก Property ของคิวรี่ให้เป็น Inconsistant Update แต่ต้องไปล็อคทุกคอนโทรลบน R ยกเว้นคอนโทรลของ S เพื่อไม่ให้ผู้ใช้เผลอแก้ไขไปด้วยครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Supanida

14
เขียนเรคอร์ดลงเทเบิล สร้าง Append Query
แก้ไขเรคอร์ดในเทเบิล สร้าง Update Query
ลบเรคอร์ดในเทเบิล สร้าง Delete Query

ใช้แมโครเรียกคิวรี่มาทำงาน ใช้ Action ชื่อ OpenQuery
ใช้โค้ดสั่งคิวรี่มาทำงาน ใช้ DoCmd.OpenQuery "ชื่อคิวรี่"

ใช้แมโครเปิดฟอร์ม ใช้ Action ชื่อ OpenForm
ใช้โค้ดสั่งเปิดฟอร์ม ใช้ DoCmd.OpenForm "ชื่อฟอร์ม"

ใช้แมโครปิดฟอร์ม ใช้ Action ชื่อ Close
ใช้โค้ดสั่งปิดฟอร์ม ใช้ DoCmd.Close acForm, "ชื่อฟอร์ม"

อ้างอิงชื่อคอนโทรล (เท็กซ์บ็อกซ์, คอมโบบ็อกซ์, ...) บนฟอร์ม ใช้ Forms![ชื่อฟอร์ม]![ชื่อคอนโทรล]
โพสต์นี้ได้รับคำขอบคุณจาก: Supanida

15
ผมให้ไปแค่แนวคิดครับ ส่วนจะใช้วิธีเขียนโค้ด เขียนแมโคร หรือจะสร้างคิวรี่ ไม่ว่าจะเป็น Append Query หรือ Update Query ก็อยู่ที่รายละเอียดปลีกย่อยของระบบที่คุณได้ออกแบบไว้ครับ ถ้าไม่ถนัดเขียนโค้ดก็ต้องลองทำโดยแมโครดูก่อนครับ ถ้าไม่ได้ค่อยแก้ปัญหาบางส่วนโดยการเขียนโค้ด
โพสต์นี้ได้รับคำขอบคุณจาก: Supanida

16
แนวคิดก็คือ เมื่อรู้ว่าเรคอร์ดไหนบ้างที่เป็นผลลัพธ์ที่ค้นหาได้ ก็ให้เขียนเรคอร์ดเหล่านั้นลงในเทเบิลชั่วคราวอีกเทเบิลนึง (T) ซึ่งมีฟิลด์ต่างๆตามที่ต้องการแสดงในหน้า [การค้นหา] แต่ให้เพิ่มอีกหนึ่งฟิลด์ (S) ที่มี data type เป็น yes/no ซึ่งให้นำไปทำเป็น check box บนแต่ละบรรทัดในฟอร์ม [การค้นหา] ดังนั้นผู้ใช้ก็จะสามารถเลือก/ไม่เลือกทำเครื่องหมายสำหรับแต่ละบรรทัดได้ พอกดปุ่ม [ทำการเบิก] ก็ให้เขียนทุกเรคอร์ดในเทเบิล T ที่ฟิลด์ S มีค่าเป็น True ลงในเทเบิลการเบิกจ่ายและเทเบิลรายการเบิกจ่าย (RI)   แล้วค่อยเปิดฟอร์มเบิก/จ่ายตามเอกสารที่เพิ่งสร้างอีกที

ส่วนการเพิ่มหรือตัดสต็อก ง่ายๆก็สร้าง Update Query ที่โยงระหว่างเทเบิลสต็อก กับ เทเบิล RI โดยอ้างตามรหัสใบเบิกจ่ายวัตถุดิบบนหน้าจอ [การเบิกจ่ายวัตถุดิบ]  แล้วในปุ่ม [บันทึก] ก็ให้เรียก Update Query ตัวนี้มาทำงานครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Supanida

17
ถ้าต้องการทำการเบิกแบบเลือกหลายรายการเพื่อให้ลิ้งค์ไปยังฟอร์มการเบิกสามารถทำได้ยังไงค่ะ ในโปรแกรม access
ออกแบบหน้าตาฟอร์มไว้แบบไหนครับ ถ้าเลือกหลายๆรายการ คุณอาจจะสร้างListbox เพื่อทำการเลือกรายการ(Multi Select) ได้คับ

การล็อคอินเข้าaccess ให้ผลต่างกันเช่น ยูสเซอร์แอดมินสามารถเข้าได้ทุกฟอร์ม ส่วนยูเซอร์ที่ไม่ใช่แอดมิน เข้าได้แค่ฟอร์มการค้นหาและฟอร์มการเบิกค่ะ

คุณอาจจะสร้าง ตาราง User ขึ่นมา และมี Field พวก UserName , Password , Permisions
ตรงส่วนของ Permisions นั้น เราจะกำหนดสิทธิ์ในการเข้าถึงฟอร์มต่างๆ คอนโทรล ต่างๆ ได้คับ
เช่น กำหนด สิทธิ์ไว้ 2 แบบ Admin และ User โดยกำหนด ให้หลังล๊อกอิน แล้วให้มีการเช็คสิทธิ์ของ User
โดย ถ้าไม่มีสิทธิ์ปุ่มเปิดฟอร์มนั้นจะไม่สามารถกดได้ หรือถ้าอยากซ่อนไว้ก็ใส่ Botton.visible = false แทน Botton.Enabled = false นะครับ
ส่วนตัวอย่างคำสั่ง การเช็คสิทธิ์
สมมุติ textbox ที่กรอก Username ชื่อ UserBox
       Table Field UserName , Password , Permissions
       กำหนดตัวแปลเก็บค่า ชื่อ ChkPermissions

Dim ChkPermissions as String
ChkPermissions = DLookup("[Permissions]", "User", "[UserName]='" & Me.UserBox & "'")
Select Case ChkPermissions
Case "Admin"
   BtnSearch.enabled = true
   BtnWithdraw.Enabled = true
   BtnEtc.Enabled = true
   Btn บลาๆๆๆ.Enabled = true
Case "User"
   BtnSearch.enabled = true
   BtnWithdraw.Enabled = true
   BtnEtc.Enabled = False
   Btn บลาๆๆๆ.Enabled = False
End Select

ถ้าคุณสร้างฟอร์มไว้แล้ว แต่ยังไม่สามารถเพิ่มโค้ดเองได้ ก็ส่งตัวอย่างฟอร์มมาได้คับ
โพสต์นี้ได้รับคำขอบคุณจาก: Supanida

18
โพสต์นี้ได้รับคำขอบคุณจาก: Supanida

หน้า: [1] 2