แสดงกระทู้

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 - Tae Songvut

หน้า: [1]
1
ใช้การ Dlookup ข้อมูลจาก Table หรือ คิวี่ของ Form Product ครับ
โดยกำหนดให้กดเลือก
แล้วข้อมูลที่จะนำไปแสดงที่ฟอร์ม Input นั้นอ้างอิงจาก รหัสสินค้า ครับ
ลองส่งตัวอย่างมาทาง INBOX ครับเดี่ยวผมทำให้
โพสต์นี้ได้รับคำขอบคุณจาก: Tae Songvut

2
Nz คือฟังก์ชั่นในการกำหนดว่าเมื่อค่าในตัวแปลที่1 มีค่าเท่ากับ Null หรือก็คือว่างไม่มีค่าอะไรเลยให้มีค่าเท่ากับตัวแปลที่2

ดังนั้น Nz(Me.Amount, 0) จึงเป็นการกำหนดว่าเมื่อ Me.Amount ว่างให้มีค่าเท่ากับ 0

หมายเหตุ ทุกการคำนวนของโปรแกรมต้องมีค่า จะมา 1+2+Null+4 ไม่ดี,ไม่ควร(หรือจะใช้ไม่ได้ด้วยซ้ำไปครับ) :dizzy: 
            เมื่อใช้ Nz มาช่วยจะกลายเป็น 1+2+0+4 โปรแกรมจึงจะหาผลลัพธ์(=7)ให้ครับ
            หรือจะเอาไปประยุกต์ใช้อย่างอื่นนอกเหนือจากแนวคำนวนก็ได้นะ https://www.techonthenet.com/access/functions/advanced/nz.php
โพสต์นี้ได้รับคำขอบคุณจาก: Tae Songvut

3
รบกวนอีกครับ

Sub CalTotal()
Me.Total = CDbl(Nz(Me.Amount, 0)) * CDbl(Nz(Me.Price, 0))
Me.Text37.Requery
End Sub

ช่่วยอธิบาย
CDbl(Nz  คืออะไร
.Requery คืออะไร


ขอบคุณครับ

CDbl คือ การแปลงเป็น double ใช้กรณี ที่ข้อมูลเป็น text หรือจำนวนเต็ม หรืออื่นๆ เมื่อกำหนด double ก็จะได้ค่าเป็นจำนวน มีทศนิยมด้วย


.Requery คือ การสั่ง แสดงผลใหม่เพื่อแสดงค่าล่าสุดที่เปลี่ยนแปลงไป ใช้ใน control หรือ Form หรืออื่นๆแล้วแต่กรณี
โพสต์นี้ได้รับคำขอบคุณจาก: Tae Songvut

4


จากตัวอย่างคุณ ชิ้น/แพ็ก น่าจะไม่ได้นำไปคำนวน น่าจะคำนวน ที่ จำนวน x ราคา และแสดงผลรวม
แต่ผมคิดว่า ตรงชิ้น/แพ็ก และราคานั้น น่าจะต้องไปกำหนดที่ตาราง Product ไว้เลยนะครับ เพราะมันเป็น Detail ของตัวสิ้นค้านั้นๆอยู่แล้ว
เราแค่ใส่รหัสสินค้า และ กำหนดจำนวน แค่นั้นครับ ส่วน textbox อื่นเราก็ปิดไม่ให้มีการกรอกหรือห้ามแก้ไขไปเลยจะดีกว่า

ซึ่งผมได้ทำตัวอย่างโดยแก้ไขให้ใหม่โดยมีส่วนที่เพิ่มเข้ามาดังนี้
1.ที่ตาราง Product นั้นเพิ่ม Field Price และ Quality ไว้เลย ในกรณีที่เป็นสินค้าใหม่ จะมีแจ้งเตือนให้ใส่ข้อมูลจำนวนต่อ/แพ็ก 
และราคาในครั้งแรก เมื่อใส่รหัสสินค้าครั้งต่อไปจะแสดงให้อัตโนมัติ
2.กรณีที่เป็นรหัสสินค้าเก่าที่ลงทะเบียนไว้แล้วจะแสดง (ชื่อสินค้า)  (จำนวน/แพ็ก)  (ราคา) มาให้และจะไม่ได้สามารถกดเข้าไปแก้ไขได้
(ป้องกันข้อผิดพลาด) และสะดวกกับเราด้วยเพราะเราแค่ใส่จำนวนเข้าไปเท่านั้น
3.ให้แสดงผลรวมทั้งหมดไว้ด้านล่างสุด (ไม่ได้เก็บลงในตาราง) แต่ ส่วนท้ายของรายการสินค้าจะเก็บไว้ในตาราง BillDetail ชื่อ Total
คำสั่งมีการเพิ่มเติ่มบางส่วนถ้าไม่เข้าใจตรงไหนสอบถามได้นะครับ

ส่วนจากที่ถามมาผมได้ใช้ฟังชั่น Nz เข้ามาด้วยเพื่อให้ textbox ที่ว่าง อยู่ให้ค่าเท่ากับ 0
ในตัวอย่างเพิ่มคำสั่ง โดยผมรวมกลุ่มไว้เป็น Sub ไว้เพื่อสะดวกในการใช้งาน

คำสั่งที่ textbox ชื่อ Price
โค๊ด: [Select]
Private Sub Price_AfterUpdate()
Call CalTotal
End Sub

คำสั่งที่ textbox ชื่อ Amount
โค๊ด: [Select]
Private Sub Amount_AfterUpdate()
Call CalTotal
End Sub

อันนี้คือ คำสั่งที่รวมไว้อันเดี่ยวแล้ว คือให้ จำนวน(Amount) x ด้วย ราคา(Price)
แล้ว ใช้ Call...ชื่อ Sub 

โค๊ด: [Select]
Sub CalTotal()
Me.Total = Nz(Me.Amount, 0) * Nz(Me.Price, 0)
End Sub

ตัวอย่างด้านล่าง
โพสต์นี้ได้รับคำขอบคุณจาก: Tae Songvut

5
สวัสดีครับ การอ้างอิง ตัว Control textbox ถ้าเป็นฟอร์มหลักก็สามารถอ้างอิง me.textbox1 หรือ ใน Dlookup  Forms!ฟอร์มหลัก!textbox1 ได้เลย
แต่เมื่อเป็น SubForm ต้องอ้างอิงเริ่มจาก ฟอร์มหลักไปหาฟอร์มรอง แบบนี้ครับ Forms!ฟอร์มหลัก.ฟอร์มรอง!textbox1
จากตัวอย่างเดิมถ้าท่านจะอ้างอิง Function Dlookup ต้องใส่แบบนี้ครับ
โค๊ด: [Select]
Me.textbox2 = DLookup("ProductName", "Product", "ProductCode='" & Forms!MainForm.SubForm!textbox1 & "'")
แต่ผมได้ออกแบบใหม่ให้ท่านลองพิจารณาดูคือ เมื่อเรากรอกรหัสใหม่ที่ไม่มีใน ตาราง Product ก็ให้แจ้งเตือน
และเมื่อใส่รหัสและกำหนดชื่อใหม่เรียบร้อยแล้ว เมื่อกด Enter หรือ กด Tab ไปที่ textbox ตัวต่อไปจะมีข้อความสอบถาม ถ้ากดใช่ ก็จะสั่งให้มันบันทึกเก็บไปในตาราง Product ให้เราเลย

เมื่อกด YES


ตัวอย่างด้านล่างครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Tae Songvut

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

แต่ยัง error อยู่ครับ
คือโปรแกรมผม มันเป็น form ซ้อน form อยู่อ่ะครับ
 ผมลองใส่ code ในตัว subform แล้วรันเฉพาะ subform
ใช้ได้ ไม่ error

แต่พอรัน form ชื่อ input มัน error
ทำไงดีคับ
อ่อเปน Sub Form เดี่ยวแก้ให้ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Tae Songvut

7
สวัสดีครับ เราสามารถใช้ Function Dlookup เพื่อค้นหาข้อมูลจากตารางเป้าหมายได้ครับ
ผมยกตัวอย่าง
โค๊ด: [Select]
Me.textbox2 = DLookup("ProductName", "Product", "ProductCode='" & Forms!Form1!textbox1 & "'")

ส่วนใน Function กำหนดดังนี้ DLookup("Fieldที่ต้องการแสดงผลลัพท์", "ตารางที่เราต้องการ", "เงือนไขคือ Field ProductCode ในตาราง = ='" & Forms!Form1!textbox1 & "'")   
Forms!Form1!textbox1 คือการกำหนดไปที่ textbox1 ที่เราจะกรอกค้นห้าข้อมูล


ในคำสั่งนี้คือ ถ้าเรากำหนด รหัสของสินค้า และสั่งค้นหา ถ้ารหัสที่เราระบุใน textbox1 ตรงกับ Field ProductCode ในตาราง Product
ก็จะแสดงชื่อของ ProductName ออกมา

สมมุติข้อมูลในตาราง Product เป็นแบบนี้นะครับ


เมื่อเราต้องการค้นหา รหัสเลข 3 เราก็กรอกเลข 3 ใน textbox1 แล้วกดค้นหาจะได้ ProductName ดังรูป


แต่ถ้ากรณีรหัสที่เรากรอกลงไปยังไม่มีการลงทะเบียนไว้นั้นจะมีแจ้งเตือนให้เราทราบเพื่อจะได้ลงทะเบียนใหม่ดังรูป


และเมื่อลงทะเบียนใหม่เสร็จแล้วคำสั่งที่จะ Add new รหัสและชื่อใหม่ ในตาราง Product ใส่คำสั่งที่ปุ่ม บันทึก ดังนี้




โค๊ด: [Select]
Sub AddNewToProductTable()
On Error GoTo Err_Err
    Dim DB As Database
    Dim rs As Recordset
    Set DB = CurrentDb()
    Set rs = DB.OpenRecordset("Product", dbOpenDynaset)
    rs.AddNew
    rs![ProductCode] = Me.textbox1
    rs![ProductName] = Me.textbox2
    rs.Update
Exit_err:
        Exit Sub
Err_Err:
        MsgBox Error$
        MsgBox "Error, ( Add NewProduct)!", vbExclamation, "แจ้ง"
        Resume Exit_err
End Sub
ที่ปุ่ม Save Event onclick
ใส่ไปว่า Call AddNewToProductTable()

ผมได้เพิ่มส่วนที่ดักจับข้อผิดพลาดไว้ด้วยนะครับลองศึกษาจากโปรแกรมตัวอย่างดูนะครับสงสัยตรงไหนสอบถามได้
ตัวอย่างด้านล่างนะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Tae Songvut

หน้า: [1]