สอบถามเรื่องคำนวณครับ
กระทู้เก่าบอร์ด อ.Yeadram

 1,057   2
URL.หัวข้อ / URL
สอบถามเรื่องคำนวณครับ

ผมเขียนCodeคำนวนตามรูป
คือ พอ A =20000 ,B=20 , C=20
พอ Run โปรแกรมแล้วติด Error ครับ
ช่วยแนะนำหน่อยครับ
แต่ถ้า A เป็นค่าน้อยๆ ไม่มีปัญหาครับ
ผมประกาศรับค่าทั้ง A,B,C ในตารางเป็น Number ทั้งหมดครับ
ชนิดเขตข้อมูลเป็น LongInteger ครับ ลองเปลี่ยนเป็น Integer ก็ไม่ได้ครับ

Private Sub A_Quantity_GotFocus()
        Dim A As Integer
        Dim B As Integer
        Dim C As Integer
        Dim TOT As Integer
        A = A_PkSTD.Value
        B = A_Quantity.Value
        C = A_Odd.Value
        TOT = Nz(A * B) + C
        A_Total.Value = TOT
       
End Sub


ขอบคุณครับ

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

1 @R16635
Integer ใช้หน่วยความจำ 2 bytes (16 bits) ในการเก็บจำนวน ดังนั้นค่าที่เก็บได้คือ 2 ยกกำลัง 16 = 65536 ค่า เมื่อเแบ่งเป็นค่าบวกและลบ จะเก็บค่าได้ระหว่าง -32768 ถึง 32767 ดังนั้น TOT = Nz(A * B) + C = (20000 * 20) + 20 = 400020 จึงเกินความสามารถในการเก็บของ Integer ดังนั้นต้องใช้ Dim TOT As Long แทน เพราะ Long ใช้หน่วยความจำ 4 bytes (32 bits) เก็บค่าได้ตั้งแต่ไหนถึงไหนก็ลองคำนวนเอาครับ

แต่อย่างไรก็ตาม ในโค้ดนี้ถ้าเราไม่ได้ใช้ TOT ไปทำอย่างอื่นอีก เราสามารถตัด TOT ออกและเขียนให้กระชับได้เป็น

A_Total = (Nz(A_PkSTD,0) * Nz(A_Quantity,0)) + Nz(A_Odd,0)

แล้วอย่าลืม A_Total ต้องมีประเภทข้อมูลเป็น Long ด้วย

หมายเหตุ .Value เราไม่จำเป็นต้องเขียน เพราะมันเป็น default property ของ textbox control อยู่แล้ว

วันหลังต้องบอกข้อความที่แสดง error โดยละเอียดมาด้วยนะครับ ไม่ใช่ทุกครั้งที่ผู้อ่านจะสามารถเดาว่าจะเกิด error อะไรได้ เขาก็จะขี้เกียจตอบให้นะครับ
2 @R16641
ขอบคุณอาจารย์มากครับ
เข้าใจและได้ความรู็้เพิ่มด้วยครับ

ขอบคุณครับ

@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3020s