ช่วยเขียน Code ตามเงือนไขนี้ให้ ที "ขอบคุณค่ะ"
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย

 1,730   18 ช่วยเขียน Code ตามเงือนไขนี้ให้ ที "ขอบคุณค่ะ"



ถ้าข้อมูล ในตาราง B_barcode ช้ำให้ตาราง B_n+1 สะเพาะชองทีช้ำ
แล้วลบบรรทัดทีช้ำออกไปดั่งรูป

1.


แล้วให้เป็นแบบนี้
2.


เวลาเพิ่มข้อมูล แล้วทำงานไปพ้อมๆ แบบนี้ เลียก้อยีงดี
ไฟล์ตัวอย่าง


                                    ขอบคุณเป็นอย่างสูง

18 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R23624
ดูคร่าวๆจากรูปนะครับ ถ้าตารางที่ 1 ทำจากคิวรี่ หากคุณต้องการให้ได้ผลลัพธ์แบบตารางที่ 2 ก็สามารถทำได้โดย ขั้นแรก คลิกเครื่องหมาย GroupBy ก่อน จากนั้น
- ที่ฟิวด์ B_N ให้ GroupBy : Count
- ที่ฟิวด์ Sum ให้ GroupBy : Sum
2 @R23629
อยากให้รวมตอน อัพเดทข้อมูล ในแต่ละบรรทัด
แบบว่า กรอกข้อมูลแล้วกด Enter มีข้อมูลช้ำก้อให้รวมเข้าทันที
แบบนี้ได้ไหม
3 @R23631
ถ้าข้อมูลในตาราง1 กับตาราง 2 ทำจากคิวรี่ การใช้ GroupBy ตามที่ได้แนะนำไปแล้วนั้น ผลลัพธ์มันจะเป็น Real Time หมายถึงว่า ไม่ว่าคุณจะบันทึกข้อมูลดิบเข้าไปซ้ำกี่ข้อมูลก็ตาม มันก็จะคำนวณ นับจำนวน B_N และหาผลรวมของ Sum ให้เสมอ แบบอัตโนมัติครับ

หมายเหตุ : คุณต้องแยกให้ชัดเจนก่อนว่า อันไหนคือฟอร์มที่ใช้บันทึกข้อมูลดิบ และอันไหนคือการแสดงผลลัพธ์ (ไม่ว่าจะเป็นในรูปแบบของ ตาราง Form หรือ Report ก็ได้ ตามที่อยากเห็น)
4 @R23632
ช่วยดูให้หน่อย อยากนำไปใช้ใน Form แต่ไม้อัพเดท
คือโจทย์ให้สร้างบน Form ค่ะ

https://drive.google.com/file/d/0B_1bLii2Kx9XcFJPdWY1clJFeUk/view?usp=sharing

ช่วยดูให้หน่อยค่ะ
                                  "ขอบคุณค่ะ"

5 @R23633
เหมือนอย่างคุณสมชายบอกครับ ผมขออนุญาตขยายความว่า คุณจันต้องแยกให้ชัดเจนว่าฟอร์มใหนใช้บันทึกข้อมูลดิบ และฟอร์มใหนใช้่แสดงข้อมูลครับ หมายถึงว่าคุณจันต้องมี2ฟอร์ม เชื่อมโยงไปยังคิวรี่คนละคึิวรี่กัน คิวรี่สำหรับฟอร์มที่ใช้บันทึกข้อมูลดิบ ต้องไม่Sum(เพราะถ้าSumมันจะบันทึกข้อมูลไม่ได้) ส่วนคิวที่ตัวที่Sumแล้ว ให้ใช้สำหรับแสดงข้อมูลอย่างเดียวครับ

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

http://thai-access.com/yeadram_view.php?topic_id=5488
6 @R23637
ขอถามอีกนิดนะค่ะ
อยากเพี่มลายการแบบนีต้อง ทำอย่างไรค่ะ

https://drive.google.com/open?id=0B_1bLii2Kx9XQ19oRGxYdU1jNnM

                                  "ขอบคุณค่ะ"
7 @R23638
สมมุติว่าTextboxทั้ง2ฟอร์มชื่อ Item

ให้ใส่[Event Procedure] ตอนดับเบิ้ลคลิกที่Textboxชื่อItemของฟอร์มแรกดังนี้
DoCmd.OpenForm "ชื่อฟอร์มที่ผุดขึ้น"

ให้ใส่[Event Procedure] ตอนดับเบิ้ลคลิกที่Textboxชื่อItemของฟอร์มที่ผุดขึ้นดังนี้
DoCmd.RunCommand acCmdSaveRecord
Forms("ชื่อฟอร์มที่1").ฟอร์มย่อย.Form.Item = Me.Item
DoCmd.Close

ลองดูครับ
8 @R23639
ลองดูแล้ว ยังไม่ได้ค่ะ
เราลองเปลี่ยนเป็น
Forms("Form2").bill.Form.B_barcode = Me.P_code
ไฟล์ทีเราแก้ค่ะ
https://drive.google.com/open?id=0B_1bLii2Kx9XV0dHa0UzdHZJTTQ
ช่วยดูให้ทีนะค่ะ ขอบคุณค่ะ
9 @R23640
ผมใช้รุ่น2003 ไม่สามารถเปิดได้ครับ ยังไงลองดูให้แน่ใจอีกทีครับ
1.bill คือชื่อฟอร์มย่อยถูกต้องใช่หรือไม่
2.B_barcode คือชื่อของTextboxในฟอร์มชื่อForm2 ใช่หรือไม่ ถ้าใช่แต่ยังไม่ได้ให้เปลี่ยนชื่อใหม่เป็น Bbarcode(เอาขีดล่างออก)
3.P_code คือชื่อของTextboxในฟอร์มที่ผุดขึ้นมาใช่หรือไม่ ถ้าใช่แต่ยังไม่ได้ให้เปลี่ยนชื่อใหม่เป็น Pcode(เอาขีดล่างออก)
4.ถ้ามีการแก้ไขชื่อTextboxแล้วต้องแก้ชื่อในVBด้วยนะครับ
5.โค้ดที่ผมให้ไปต้องใส่ให้หมดนะครับ เพราะโค้ดแรกต้องทำการบันทึกข้อมูลก่อน และโค้ดสุดท้ายต้องปิดฟอร์ม ไม่งั่นจะใช้ไม่ได้ครับ

ลองดูอีกที ไม่น่าจะมีปัญหาอะไร
10 @R23641
ขอโทษนะครับ แก้ไหม่
ข้อที่2
2.B_barcode คือชื่อของTextboxในฟอร์มย่อยชื่อBill ใช่หรือไม่ ถ้าใช่แต่ยังไม่ได้ให้เปลี่ยนชื่อใหม่เป็น Bbarcode(เอาขีดล่างออก)
11 @R23642
ข้อมูลของคุณ ekkaphon พูดถูกทุกอย่างเลียค่ะ

เป็นแบบนี้ค่ะ แต่เป็นค่าหว่างค่ะ
เป็นดั่งรูปค่ะ

https://drive.google.com/file/d/0B_1bLii2Kx9XTGdXSTRyTGIyT1E/view?usp=drivesdk

พอมี โค้ดทีใช้ รีเฟรช Form ทั้งหมดค่ะ แล้วก้อเอาค่าใหม่ ไปใส่ แบบนี้จะได้ หลื ไม้
แล้วจะเขียนยังไงค่ะ
                                         ขอบคุณมากค่ะ
12 @R23655
ถ้าดูจากวีดีโอก่อนหน้านี้ เหมือนคุณจันต้องการให้Form1ดึงข้อมูลที่เพิ่มใหม่จากฟอร์ม Product เพราะฉะนั้น คุณจันต้องตั้งค่าฟอร์มProduct เป็นแบบ Popup=Yesก่อนครับ ไม่ใช่เป็นการเปิดในTabใหม่เหมือนในรูปครับ
13 @R23664
ยังเป็นช่องหวาง แบบเดีม ค่ะ
14 @R23665
โค้ดนี้ ผมเขียนขายไปแล้ว 600บาท
เป็นการเขียนโค้ดให้ฟอร์มที่ ทำงานร่วมกับเครื่องยิงบาร์โค้ด
ผู้ใช้ ไม่ชอบที่จะคีย์จำนวนก่อนยิงบาร์โค้ด (มันลำบากต้องจับเม้าส์จับคีย์บอร์ดบ่อยๆ ในขณะที่กำลังขายของ เพราะต้องการจับแค่เครืองสแกนกับสินค้าแค่นั้น) เขาชอบที่จะใช้วิธียิงซ้ำ เพื่อเพิ่มจำนวน

ผมจะเอาโค้ดนั้น มาวางให้ไป ก็กระไรอยู่ เพราะว่ามันเคยขายไปแล้ว จะเหมือนเป็นการหักหลังผู้ที่ซื้อโค้ดผมไป

ผมให้แนวคิดคร่าวๆ ก็แล้วกัน ถ้าอ่านแล้วเข้าใจ ก็สามารถนำไปประยุกต์ใช้ได้ครับ (ซึ่งคุณอาจต้องรื้อฟอร์ม หรือตารางใหม่ ลำบากหน่อยหนึ่ง)

- ใช้หลักการตารางหลัก-ตารางรอง
- ตารางหลัก เก็บข้อมูลหัวบิลต่างๆ เช่น เลขที่ วันที่ ผู้ขาย เป็นต้น
- ตารางรอง เก็บรายการสินค้าของเลขที่บิลนี้
- ฟอร์มนี้ ให้ทำงานกับข้อมูลในตารางรอง
- เมื่อมีการยิงบาร์โค้ด ให้จับเหตุการณ์ BeforeUpdate กับ AfterUpdate ของ textbox ที่ใช้เก็บบาร์โค้ดครับ

1.BeforeUpdate
-ใช้คำสั่งไปนับจำนวนในตารางย่อย ว่า มีรหัสสินค้านี้ ในเลขที่บิลนี้แล้วหรือยัง
--- ถ้ามี ให้กำหนดค่าให้ตัวแปรกลาง (Public Var กำหนดตัวแปรไว้ส่วนบนสุดของโค้ดในฟอร์ม เพื่อให้สามารถเรียกใช้ได้จากหลาย sub ในฟอร์มนี้เท่านั้น)
ให้เป็นค่าที่คุณต้องการ เช่น DupplicateBarCode = true เป็นต้น
--- ถ้าไม่มีก็กำหนดค่าให้เป็น False
จบโค้ดนี้

2. AfterUpdate
ให้เช็คค่าของตัวแปรดังกล่าว
--- ถ้าเป็น false
ให้ดึงข้อมูลสินค้าเช่น ชื่่อ ราคาเร่ิมต้น จำนวนเริ่มต้น หน่วยนับ อะไรพวกนี้ จากตารางสินค้า เอามาแสดงผลในฟอร์ม แล้วสั่งให้ จำนวน คูณกับ ราคา เอาผลคำนวนไปกรอกในช่องรวม ย้ำนะครับ การสั่งให้คำนวณนี้ ให้กระทำตรงนี้เท่านั้น ถ้าเป็นเหตุการณ์ อย่าให้มันคำนวณครับ อย่าตั้งให้มันคำนวณอัตโนมัติ
--- ถ้าเป็น True
ให้เขียน statement เอาเองแล้วสั่งรัน ณ ตอนนี้เลย สักสอง statement
- อัพเดตข้อมูลในตารางย่อย เงื่อนไขคือ ต้องเป็นเลขที่บิลนี้ รหัสสินค้านี้เท่านั้น ให้ไปบวก จำนวนขาย เพิ่มขึ้นอีก 1 และให้คำนวนราคา คูณจำนวนสินค้าใหม่อีกรอบ
- สั่งลบรายการสินค้า ที่ยังไม่มีผลคำนวณ (ยอดรวมเป็นศูนย์) ออกจากตารางย่อย เงื่อนไขคือ ต้องเป็นเลขที่บิลนี้เท่านั้น (ซึ่งเป็นการสั่งลบรายการล่าสุดที่เราเพิ่งยิงบาร์โค้ดเข้าไป เพื่อไม่ให้เหลือบรรทัดว่าง ที่หน้าฟอร์มนั่นเอง)
- สั่งให้ฟอร์มนี้ Refresh หรือ requery
- สั่งให้เคอร์เซอร์ ไปที่ New Record เพื่อรอการยิงบาร์โค้ดต่อไป
- สั่งแก้ไขค่าตัวแปรกลับเป็น False ดังเดิม
จบการทำงาน
15 @R23666
ขออภัยครับ ผมเขียนตกไป (จำพาสเวอร์ด เข้าไปแก้ไขกระทู้ไม่ได้)

ถ้าเป็นเหตุการณ์อื่น อย่าให้มันคำนวณครับ

หมายเหตุ พยายามเขียนโค้ดให้แม่นยำนะครับ อย่าให้มี error
เพราะหากมี error ระหว่างการทดสอบ มันจะขัดแย้งกันในคำสั่ง Requery (คือฟอร์มปัจจุบันจะไม่ยอมให้มีการ requery หรือว่าการทำงานมันติดขัดใดๆ ในระหว่าง before กับ after update

หรือกล่าวคือ ถ้ามันติด error ที่บรรทัด Requery อย่าตกใจ
ให้ไปไล่ลำดับการทำงานของคำสั่งอื่น เอาให้เคลียร์ที่สุด แล้ว error ตรงนี้มันจะหายไปเองในการทำงานจริง

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

ขอบพระคุณค่ะ สําหรับ ข้อคิดดีๆ ของอาจารย์
และ ทุกๆท่านทีให้ความช่วยเหลือเป็นอย่างดี
                         ขอบคุณมากๆค่ะ
17 @R23671
ลองดูไฟล์ตัวอย่างครับ
1.เปิดForm2
2.ดับเบิ้ลคลิกที่ช่องรหัสสินค้า จะมีหน้าต่างProduct ผุดขึ้น
3.ใส่รหัสสินค้า ชื่อสินค้า และราคาขาย
4.ดับเบิ้ลคลิกที่ช่องรหัสสินค้า
5.ข้อมูลจะเข้าไปอยู่ในForm2(ฟอร์มย่อยชื่อBill) ครับ

ทุกรายละเอียดที่คุณจันต้องการเหมือนกันกับในวีดีโอครับ
https://drive.google.com/open?id=0BwzAwbv8tImLREhoZ3lSQXVXWVk
18 @R23682
ทำได้แล้วค่ะ
ขอบคุณมากๆค่ะ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.4150s