กระทู้เก่าบอร์ด อ.Yeadram
1,725 3
URL.หัวข้อ /
URL
ช่วยดูโค๊ดให้หน่อยครับ
ต้องการส่งค่า เรียกใช้ funtion แต่ error ผมเขียนผิดหรือป่าวครับ
Function ddd(CarNo As Integer, SpQty As Integer)
DoCmd.SetWarnings False
DoCmd.RunSQL "Insert Into tbtransportion (Car_num,product_ID,Cus_ID,Order_ID,DateTransport,Qty) Values(CarNo,Product_ID,Cus_ID,Order_ID,appoin_Date,AppoinQty)"
DoCmd.SetWarnings True
End Function
และใช้ form AddCar รับข้อมูลและส่งค่า เรียกใช้ funtion ครับ
ผมเขียนผิดหรือป่าวรบกวนด้วยครับ
Private Sub cmdOk_Click()
Call ddd(CarNo, SpQty)
DoCmd.Close
End Sub
Function ddd(CarNo As Integer, SpQty As Integer)
DoCmd.SetWarnings False
DoCmd.RunSQL "Insert Into tbtransportion (Car_num,product_ID,Cus_ID,Order_ID,DateTransport,Qty) Values(CarNo,Product_ID,Cus_ID,Order_ID,appoin_Date,AppoinQty)"
DoCmd.SetWarnings True
End Function
และใช้ form AddCar รับข้อมูลและส่งค่า เรียกใช้ funtion ครับ
ผมเขียนผิดหรือป่าวรบกวนด้วยครับ
Private Sub cmdOk_Click()
Call ddd(CarNo, SpQty)
DoCmd.Close
End Sub
3 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R04623
ขอบคุณมากครับ อ.yeadram คืบหน้าอย่างไร จะมาแจ้งให้ทราบ
3 @R04667
ไม่ประสบความสำเร็จครับ อ.yeadram
Time: 0.3662s
- ถ้าเขียนไว้ในโมดูล error แน่นอน (ดูเหตุและผลในข้อ5 ประกอบ) ต้องเขียนไว้ในฟอร์มนี้เท่านั้น
2) การเรียกใช้ฟังก์ชั่น ที่เขียนขึ้นเอง ต้องดูด้วยว่า ฟังก์ชั่นนั้นมีการคืนค่าออกมาหรือไม่ อย่างที่คุณเขียน ถือว่าเป็นฟังก์ชั่นที่ไม่คืนค่า เราอาจจะเขียนเป็น sub ก็ได้ (แต่ไม่สำคัญหรอกครับ เขียนเป็น Function ก็ไม่ผิด) แต่การเรียกใช้ ต้องห้าม มีวงเล็บ อย่างตามที่คุณเขียนมา เวลาเรียกใช้ ให้เขียนแค่
ddd CarNo, SpQty
ก็พอ ไม่ต้องใส่วงเล็บให้มัน
แต่ถ้าสมมติว่า ฟังก์ชั่นของคุณมีการคืนค่า คูณ จำเป็นต้องใส่วงเล็บให้มัน เช่น
x= ddd(CarNo, SpQty)
3) ฟังก์ชั่นของคุณ รับค่า อาร์กิวเมนต์มาสองตัว แต่ไม่เห็นคุณเอาอาร์กิวเมนต์นั้นไปใช้เลย
ในเมื่อคุณรับค่าเข้ามาแล้วควรจะนำไปใช้ หรือถ้าไม่ ก็ไม่ต้องสร้าง เป็นอาร์กิวเมนต์ก็ได้ ที่ถูกต้อง(ตามที่เดาๆ ดู) น่าจะนำมันไปใช้ใน สายอักขระ statement ดังนี้
DoCmd.RunSQL "Insert Into tbtransportion (Car_num,product_ID,Cus_ID,Order_ID,DateTransport,Qty) Values(" & CarNo & "',Product_ID,Cus_ID,Order_ID,appoin_Date,'" & SpQty & "')"
4) ในสายอักขระที่คุณเขียนขึ้น มันคือ sql statement ซึ่งเป็นการเพิ่มข้อมูลเข้าตาราง ในวงเว็บ Values() ค่าที่อยู่ในวลเล็บต้องเป็นค่าจริงๆ หรือเป็นชื่อของตัวแปร แยกข้อคิดแนะนำออกเป็นสองอย่าง ดังนี้
4.1) ถ้าเป็นค่าจริง คุณต้องมีเครื่องหมายกำกับค่า เพื่อให้ SQL รับทราบว่า ค่านั้นๆ เป็นข้อมูลประเภทใด เช่นถ้าเป็น text ต้องมี เครื่องหมาย single quote กำกับไว้ด้วย เช่น Values('dddd', 'aaa') เป็นต้น
ถ้าข้อมูลในฟิลด์ใดๆ (กั้นฟิลด์ด้วย คอมม่า) ไม่มีเครื่องหมาย single quote เมื่อนำไปรัน SQL จะมองว่าข้อมูลนั้นๆ ไม่ใช่ text มันจะมองว่าเป็น number ทันที ซึ่งถ้าคุณเป็นมัน ก็คงงงเหมือนกัน ตัวเลขอะไรเนี่ย Order_ID เกิดมาเคยเห็นแต่เลข 1, 2, 3 ... ไม่เคยเห็นตัวเลข Order_ID มาก่อนในชีวิต
4.2) ถ้าเป็นการอ้างถึงตัวแปร คุณต้องเขียนให้ตัวแปร อยู่นอก เครื่องหมาย double quote เพื่อให้ VBA แยกแยะออกว่า สายอักขระที่คุณจะต่อจะเรียง หรือจะเขียนนั้น จะเขียนอะไรลงไป
dim xx as string
xx = "Yeadram"
เช่น "Insert......Values('ddd', 'aaa', '" & xx & "', 1)"
ถ้าเขียนอย่างนี้ เมื่อ VBA นำสายอักขระไปรัน มันจะมองเห็นดังนี้
"Insert......Values('ddd', 'aaa', 'Yeadram', 1)" ซึ่งเป็นข้อความที่ถูกต้อง
แต่ถ้าคุณไม่ได้??ยกตัวแปรออกไว้นอก double quote เช่นเขียนว่า
"Insert......Values('ddd', 'aaa', 'xx', 1)"
เมื่อ VBA นำสายอักขระไปรัน มันจะมองเห็นตามที่เขียนเลย คือมันจะเอา คำว่า xx ไปใส่ในตารางเลย(แทนที่จะเป็นค่าของ xx ซึ่งก็คือ "Yeadram")
5) ค่าต่างในวงเล็บ Values ในสายอักขระของคุณที่เขียนมา ถ้าใส่เครื่องหมาย ให้ถูกต้อง ผมเดาว่า มันน่าจะเป็นการอ้างอิง แหล่งข้อมูลบนฟอร์มปัจจุบัน เช่นอาจจะเป็นชื่อ control หรือชื่อฟิลด์ ของแหล่งข้อมูลฟอร์ม ดังนั้นฟังก์ชั่นนี้ต้องเขียนอยู่ใน ฟอร์มนี้ เท่านั้น ถึงจะทำงานได้ ถ้าเอาฟังก์ชั่นนี้ไปเขียนไว้ในที่อื่นๆ เช่นในโมดูลอื่น มันจะหาค่าเหล่านั้นไม่เจอ ก็จะ Error เช่นกัน
หรือไม่งั้น คุณต้องอ้างข้อมูลเหล่านั้น ตามหลักการอ้างอิง ให้ถูกต้อง เช่น Forms("frmMain").Controls("Order_ID") เป็นต้น
ผมตอบเยอะไปหรือเปล่าเนี่ย เหมือน กำลังตอบคำถามทำข้อสอบ อัตนัยอยู่เลยนะเนี่ย หุหุ