การ Save ข้อมูลจากการคำนวณใน Text box ลง Table
กระทู้เก่าบอร์ด อ.Yeadram

 11,288   14
URL.หัวข้อ / URL
การ Save ข้อมูลจากการคำนวณใน Text box ลง Table

มีข้อมูลใน Forms ดังนี้ค่ะ

text1 = 5     , text2 = 5    text3 = text1 * text2   ต้องการเอาผลรับที่ได้จาก text3 ลงไปเก็บใน Table ใน field ชื่อ sum ต้องทำอย่างไรค่ะ เนื่องจากจำเป็นต้องเอาข้อมูลในการคำนวณไปเก็บไว้ค่ะ รบกวนช่วยแนะนำด้วยค่ะ ตอนนี้ใช้คำสั่ง Event ในส่วนของ On Lost Focus อยู่ แต่ใช้ไปแล้วมีปัญหาค่ะ อยากได้คำสั่งโดยตรงที่เอาค่าใน text3 ไปเก็บไว้เลยโดยไม่ต้องใช้คำสั่ง On Lost Focus ค่ะ

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

1 @R08563
text3 ตั้งค่าแหล่งข้อมูลเป็น ฟิลด์ sum
text1 เขียนโค้ดใน afterupdate
text2 เขียนโค้ใน afterUpdate

text1_afterupdate()
myCalculate
end sub

text2_AfterUpdate()
myCalculate
End sub

Sub Mycalculate()
if text1="" then exit sub
if text2="" then exit sub
me.sum=text1 * text2
me.refresh
end sub
2 @R08565
รบกวนถามเพิ่มเติมนะค่ะ ถ้ากรณี text1 , text2 ไม่ใช่ Textbox แต่เป็น Combo box จะต้องใช้ Afterupdate() หรือเปล่าค่ะ
3 @R08566
รบกวนอาจารย์อีกนิดนะค่ะ ถ้าเป็น Combo box ตัวอย่างเช่น

combo box 1 (จำนวนคน) ให้เลือกตัวเลข
combo box 2 (ชื่อคน) ให้เลือกชื่อคน

text3 มีสูตรการคำนวณ = iif([combo1]="1" and [combo2]="นิค",100,50)
text4 มีสูตรการคำนวณ = [text3]+100

เนื่องจาก text4 จะมีผลรับเปลี่ยนไปเมื่อเราเลือกข้อมูลใน combo1 และ combo2 โดยไม่ได้กรอกข้อมูลเข้าไปเหมือน Text box และเราจะนำผลรับที่ได้จาก Text4 ไปเก็บใน ฟิลด์ Sum จะต้องทำอย่างไรค่ะ (เนื่องจากข้อมูลมีการคำนวณที่ต้องให้ผู้กรอกข้อมูลได้เห็นรายละเอียดการกรอกและผลรับเลย)

ขอบคุณมาก ๆ ที่ช่วยตอบคำถามให้นะค่ะ
4 @R08569
ใช้ได้ครับ เหมือนกันเลย
แต่ถ้าเป็นคอมโบ นิยมใช้กันในเหตุการณ์ onChange มากกว่าครับ

5 @R08584
- ลองทำตามอาจารย์แล้วค่ะแต่มีปัญหาตรงขึ้น Run_time error '2113' The value you entered isn't valid เมื่อคลิ๊กเลือกข้อมูลใน Combo ค่ะ ต้องแก้ยังไงค่ะ เนื่องจากข้อมูลที่ใช้ในการคำนวณและเลือกเป็นแบบ combo box ค่ะ ไม่รู้เกิดจากอะไรค่ะ รบกวนช่วยตอบให้ด้วยนะค่ะ พอดีต้องส่งงานแล้วน่ะค่ะ ลองแก้หลายวิธีแล้วก็ยังไม่หายเลยค่ะ ขอบคุณล่วงหน้านะค่ะ

- และในส่วนของการคำนวณทำไมมันจะโชว์ก็ต่อเมือเราไปคลิ๊กที่ Text box ค่ะ

(ได้ส่ง File ไปให้อาจารย์ช่วยดูด้วยน่ะค่ะ)
6 @R08587
โหลดตัวอย่างไฟล์ปัญหา ลงมาดูแล้วครับ

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

แต่โครงสร้างตารางยังไม่ดีเท่าที่ควรนะครับ เรื่องการขจัดความซ้ำซ้อน และเรื่องเกี่ยวกับการตั้งชื่อออบเจค บางคำเห็นเป็นคำสงวนอยู่ หรือบางคำยังใช้ภาษาไทยอยู่ มันอาจสร้างความลำบาก หรือปัญหา ในการเขียนโค้ดอ้างอิง ในอนาคตหรือในเวลาที่นำโปรแกรมไปใช้ในเครื่องอื่นๆ ครับ

ส่วนคำถามครับ......
อันนี้ไม่เข้าใจครับ ไม่ทราบว่าจะให้ผมเข้าไปดูที่ฟอร์มไหนก่อนฟอร์มไหนหลัง
จะระบุมาได้ไหมครับ ว่าให้ดูที่ไหน บอกชื่อฟอร์มหรือชื่อคอนโทรลหรือชื่อฟิลด์ ชื่อตารางที่เกี่ยวข้องมาเลยดีไหมครับ จะได้เข้าดูตรงจุดได้เร็วกว่า
เนื่องจากผมไม่รู้จะเริ่มตรงไหน ผมก็เลยเปิด VBA ขึ้นมาไล่ดู หาดูว่าโค้ดที่ไหนบ้างที่คล้ายๆ กับที่ผมเคยตอบไปบ้าง หาไม่เจอครับ แสดงว่า ไฟล์ตัวที่ส่งมานี้ ยังไม่ได้เอาโค้ดไปลองประยุกต์ใส่เลย
ลองโพสต์แจงมาดูนะครับ ฟิลด์ชื่อ Sum หาไม่เจอครับ เห็นคล้ายๆ กันก็มี 3 ฟิลด์ไม่แน่ใจว่าปัญหาอยู่ที่ฟิลด์ไหน
คอมโบก็เยอะครับ เท็กซ์บ็อกซ์ก็แยะ แต่ละตัวตั้งชื่อโดยวิซาร์ด มันไม่ค่อยสื่อความหมายดังนั้น ตามหายากครับ ให้คุณบอกมาเลยดีกว่าครับว่า ปัญหาอยู่ตรงไหน หรือว่าต้องการให้ตรงไหนเป็นอย่างไร
7 @R08592
จะมีปัญหาตรง Form ใบเบิกสินค้าเพื่อจัดส่งค่ะ (คลิ๊กที่ Keydata)เวลาเลือก

combobox เที่ยวที่ = 3 ,จำนวนคนส่งของ = 1 , พนักงานขับรถ =สิทธิพงษ์ สีสัจจา หรือ เที่ยวที่ = 2 , จำนวนคนส่งของ = 1 , พนักงานขับรถ =สิทธิพงษ์ สีสัจจา (ช่วยดูใน text202 , 213,198,204,132,206 => text132=text213+text198+text204 และ text202 =combo86 & combo94 & combo96 (ใช้คำสั่งถูกหรือเปล่าค่ะเนื่องจาก combo86(พนักงานขับรถ) เป็นข้อความ ,combo94 (เที่ยวที่) เป็น Number, combo96 (จำนวนคนส่งของ) เป็น Number) เนื่องจากมีกำหนด ใน Text213 ให้คำนวณตามเงื่อนไข แต่เวลาคลิ๊กเลือกมันเกิด error ไม่รู้ว่ากำหนดเงื่อนไขถูกหรือเปล่าค่ะ แต่มันก็คำนวณได้ถูกต้องนะค่ะ แต่ติดอยู่ตรงที่เวลาเลือก combox ตามที่บอกด้านบนน่ะค่ะ (textbox การคำนวณ จะซ่อนไว้ด้านหลังแถบสีเขียวด้านล่างค่ะ อาจารย์ช่วยเปิดดูให้ด้วยค่ะ

ก็จะเกิด Run_time error '2113' ค่ะ และถ้าเลือก ชนิดรถ = รถเล็ก , เที่ยวที่ = 2 หรือ ชนิดรถ = รถเล็ก , เที่ยวที่ = 3 ก็จะเกิด Error ค่ะ (ช่วยดู text228 , 230 , 232 , 234)

เนื่องจากเคยแต่ทำการคำนวณใน Query ไม่เคยคำนวณใน Forms เลยไม่ทราบว่าการกำหนดคำสั่งหรือ การใช้ IIF AND หรือการเชื่อม Text box ไว้ด้วยกันของ ข้อความกับตัวเลขต้องใช้คำสั่งอะไร แต่หนูใช้ & ในการเชื่อมเลยไม่รู้ว่าจะเป็นสาเหตุที่เกิด error หรือเปล่าค่ะ ดูจาก text 202 ได้ค่ะ

เพราะเนื่องจากดูจากการเลือก combobox ที่ไม่ได้อยู่ในเงื่อนไขที่อยู่ใน Text box ก็ไม่เกิด error เช่นอาจจะเลือก combobox เที่ยวที่ = 2 ,จำนวนคนส่งของ = 2 , พนักงานขับรถ = ไม่ใช่ สิทธิพงษ์ สีสัจจา ก็คำนวณให้ไม่ error จะ error เฉพาะที่อยู่ในเงื่อนไขที่กำหนดไว้ใน Textbox ค่ะ
8 @R08593
เพิ่มเติมนะค่ะ และเวลาที่เรากรอกข้อมูลด้านบน รวมทั้งใน combobox ด้วยค่ะ แล้วคลิ๊กที่ ปุ่ม คำนวณ ในช่องของการคำนวณก็จะคำนวณให้ จุดสำคัญอยู่ที่ text136 , text138 ,text143 ค่ะ ที่จะเก็บเข้าไปไว้ใน table ใบเบิกสินค้าเพื่อจัดส่ง filed ขื่อ SUM_CAR_NAME ,SUM_CAR_SENT,SUM_CAR_SENT1 ตามลำดับค่ะ ส่วนปุ่ม OK ไว้เช็คความถูกต้องระหว่าง text138 กับ text244 ต้องได้ค่าตรงกันถึงจะถูกต้องค่ะ
9 @R08594
เพิ่มเติมอีกนิดค่ะ ให้อาจารย์ลองค้นหาไปที่เร็คคอร์ดที่ 004-0562 ค่ะ ในช่องเช็คความถูกต้องเป็น NO ซึ่งข้อมูลที่คำนวณถูกต้องแล้วคือ คนขับ = 390 , เด็กรถ = 390 แต่ในช่องคนขับ(text136) = 170 , เด็กรถ(text138) = 170 ชึ่งเป็นผลรับที่ผิดที่เก็บเข้าไปใน table อาจารย์ดู Code การคำนวณ On click ของปุ่ม คำนวณ ด้วยค่ะ ว่ากำหนดถูกต้องหรือเปล่าค่ะ

เนื่องจากหนูใช้ On click ในปุ่มคำนวณ เลยไม่ได้ใช้ คำสั่ง After update ตามที่อาจารย์แนะนำมาค่ะ
10 @R08598
โค้ดการรวม การต่อสายอักขระไม่ผิดหรอกครับ แม้จะดูเทอะทะ แต่ก็ยังทำงานได้ดี
ปัญหาของคุณเกิดจากตั้งคุณสมบัติของฟิลด์ ในตารางไม่ถูกต้องครับ

ฟิลด์ทั้งสาม sum ให้ไปเปลี่ยนชนิดข้อมูลเป็น Double นะครับ แล้วลองทำงานดูอีกทีครับ คุณตั้งค่าบางฟิลด์เป็น byte บางฟิลด์เป็น single มันไม่สามารถรับข้อมูลที่คุณคำนวนออกมาได้ครับ (ข้อมูลในฟอร์มเยอะกว่าข้อกำหนดในตาราง)

ฟิลด์ที่เก็บ number ของคุณทั้งหมด เหมาะกับ long integer กับ double เท่านั้นครับ จำพวก byte, single, หรือ integer ไม่เหมาะครับ

ส่วนคำถามสุดท้ายเกี่ยวกับรายการที่ 004-0562 อันนี้ไม่ค่อยเข้าใจความต้องการนัก เอาเป็นว่า ลองลบรายการออกแล้วบันทึกใหม่ดูนะครับ


โค้ดในปุ่มคำนวน
Private Sub Command249_Click()
If Text166 = "" Then Exit Sub
Me.SUM_CAR_NAME = [Text166]
Me.SUM_CAR_SENT = [Text168]
Me.SUM_CAR_SENT1 = [Text170]
'Me.Refresh เอาบรรทัดนี้ออกเลยก็ได้ครับ ไม่จำเป็น
End Sub
11 @R08600
ขอบคุณมาก ๆ ค่ะอาจารย์ หนูติดอยู่หลายวันไม่รู้สาเหตุจริง ๆ หนูลองไปเปลี่ยนฟิลด์เป็น Long Interger กับ Double แล้วค่ะตอนนี้ไม่ขึ้น Error แล้วค่ะ ขอบคุณค่ะ
12 @R08959
คุณ na เก่งจังเลยครับ เข้าใจง่ายและถามได้ตรงประเด็น ถ้าจะรบกวนคุณ na ส่งไฟล์ตัวอย่างมาให้ได้ลองทำตามบ้างจะได้ไหมครับ
13 @R09026
มาที่นี่ http://www.thai-access.com/topic.asp?CategoryID=1 แล้วคลิก New Topic
14 @R20655
อยากทราบว่า เมื่อเรา add new data ที่เป็นตารางจาก access มาลงใน Visual basic เรียบร้อยแล้ว ต้องการดังนี้ จะทำอย่างไรครับ
1. ต้องการให้ ข้อมูลในตารางที่เป็นคอลัมน์คูณกัน ลบกัน หรืออื่นๆ แล้วให้ส่งผลกลับไปยังตารางใน access เพื่อนำไปใช้งานต่อไป
2. สมมุติว่าข้อมูลใน access มีหลายคอลัมน์ แต่ต้องการให้คอลัมน์ที่ 1 กับ 2 มันวน loop กัน เช่น สมาชิกตัวแรกของคอลัมน์ที่ 1 เป็น a และสมาชิกในคอลัมน์ที่2 มี n ตัว ต้องการให้ a จับกับสมาชิกในคอลัมน์ที่2 ได้ทุกตัว พอจับครบทุตัวแล้ว ให้วนกลับมาที่สมาชิกตัวที่2 ของคอลัมน์1 ไปจับกับสมาชิกคอลัมส์ที่2 ได้ทุกตัว ไปเรื่อยๆๆ จนจับกันครบ แล้วให้ส่งผลกลับมายังตารางของ access ทำยังไงครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2547s