กระทู้เก่าบอร์ด อ.Yeadram
4,050 13
URL.หัวข้อ /
URL
รบกวนด้วยครับ เขียน Code VBA เพื่อบันทึกข้อมูลจากฟ
ผมต้องการให้ผู้ใช้งานกรอกข้อมูลผ่านฟอร์ม และทำการบันทึกข้อมูล ผมจึงเขียน Code ดังนี้คับ
Option Compare Database
Dim DB As Database
Dim rsSe As Recordset
Private Sub CmdRec_Click()
Dim sqlSave As String
Set DB = CurrentDb
sqlSave = "SELECT*FROM[OderTbl]"
Set rsSe = DB.OpenRecordset(sqlSave)
With rsSe
.AddNew
!PrdBarcode = [Text1]
!PrdDate = [Text2]
!PrdType = [Text3]
!CdCus = [Text4]
!CdTruck = [Text5]
.Update
End With
End Sub
แต่เมื่อผมลองทดสอบกดปุ่มบันทึกข้อมูล (CmdRec) พบว่าข้อมูลที่ผมพิมพ์ลงในฟอร์ม ไม่ถูกบันทึกลงตาราง
ผมอยากทราบว่าน่าจะเกิดจากสาเหตุใดได้บ้างครับ
ขอบคุณครับ
Option Compare Database
Dim DB As Database
Dim rsSe As Recordset
Private Sub CmdRec_Click()
Dim sqlSave As String
Set DB = CurrentDb
sqlSave = "SELECT*FROM[OderTbl]"
Set rsSe = DB.OpenRecordset(sqlSave)
With rsSe
.AddNew
!PrdBarcode = [Text1]
!PrdDate = [Text2]
!PrdType = [Text3]
!CdCus = [Text4]
!CdTruck = [Text5]
.Update
End With
End Sub
แต่เมื่อผมลองทดสอบกดปุ่มบันทึกข้อมูล (CmdRec) พบว่าข้อมูลที่ผมพิมพ์ลงในฟอร์ม ไม่ถูกบันทึกลงตาราง
ผมอยากทราบว่าน่าจะเกิดจากสาเหตุใดได้บ้างครับ
ขอบคุณครับ
13 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R15656
อาจารย์ TTT ปกติผมจะใช้ Query Append อะไรดีกว่ากันครับผม
3 @R15659
@ คุณUn
ผมคงไม่กล้าบอกว่าอะไรดีกว่านะครับ แต่หากในเรื่องของ Inset Into จะดีในแง่ของการทำแบบมีเงื่อนไข ในเรคคอร์ดเยอะๆ ซึ่งหากใช้แบบ Recordset มันต้องใช้วนลูป ซึ่งไม่ดีครับ ช้ามากเมื่อเทียบกับ SQL
แต่หากเป็นลักษณะแบบนี้ คือเพิ่มทีละเรคคอร์ขณะผู้ใช้ใส่ข้อมูลเอง ไม่ต้องใช้เงื่อนไขใดๆ ผมว่าอะไรก็ได้ครับ แล้วแต่ความถนัด เหมือนคำที่อดีตท่านผู้นำจีน เติ้งเสี่ยวผิง กล่าวไว้ว่า ไม่ว่าจะเป็นแมวสีอะไรขอให้จับหนูได้ก็พอ
ผมคงไม่กล้าบอกว่าอะไรดีกว่านะครับ แต่หากในเรื่องของ Inset Into จะดีในแง่ของการทำแบบมีเงื่อนไข ในเรคคอร์ดเยอะๆ ซึ่งหากใช้แบบ Recordset มันต้องใช้วนลูป ซึ่งไม่ดีครับ ช้ามากเมื่อเทียบกับ SQL
แต่หากเป็นลักษณะแบบนี้ คือเพิ่มทีละเรคคอร์ขณะผู้ใช้ใส่ข้อมูลเอง ไม่ต้องใช้เงื่อนไขใดๆ ผมว่าอะไรก็ได้ครับ แล้วแต่ความถนัด เหมือนคำที่อดีตท่านผู้นำจีน เติ้งเสี่ยวผิง กล่าวไว้ว่า ไม่ว่าจะเป็นแมวสีอะไรขอให้จับหนูได้ก็พอ
4 @R15662
แต่ในหลายๆ กรณี จากข้อมูลดิบที่เรามี เราอาจไม่สามารถสร้างเงื่อนไขการใช้คำสั่ง SQL ตามที่เราต้องการได้ เราก็อาจหันมาใช้ Recordset ทำแทน เพื่อแก้ปัญหาได้ นี่ทำให้ MS Access มีความหลากหลายในการจัดการฐานข้อมูลครับ
5 @R15663
ขอบคุณอาจารย์ครับ ผมเขียนโคตแบบนี้ไม่เป็น ใช้ copy แล้วลองผิดลองถูกมานาน อันนี้ก็เป็นตัวอย่าง ที่ดีแบบนึงให้ Copy ^^
6 @R15664
ขอบคุณครับอาจารย์ TTT แต่ผมลองทำแล้วก็ยังไม่ได้อะครับ ขึ้น Error ตามภาพที่แนบมานะครับ รบกวนอาจารย์ด้วยนะครับ
7 @R15665
แล้วก็ขึ้นภาพนี้ด้วยครับ
8 @R15666
ไม่แน่ใจนะครับ แต่ลองเปลี่ยนบรรทัดนี้เป็นพาธเต็มดู
Dim rsSe As Recordset
เป็น
Dim rsSe As DAO.Recordset
Dim rsSe As Recordset
เป็น
Dim rsSe As DAO.Recordset
9 @R15667
ลองเปลี่ยนแล้วอะครับ แต่มันก็ยังขึ้น Error ตามภาพเหมือนเดิมเลยอะครับ เศร้า(T T ) อาจารย์ TTT ครับถ้าผมจะรบกวนติดต่ออาจารย์โดยตรงผ่าน E-mail ของอาจารย์เลยไม่ทราบอาจารย์สะดวกมั๊ยครับ คือผมต้องใช้ โปรแกรม Access นี้เป็นโปรเจคจบ ป.โท อะครับ โดยส่วนตัวแล้วผมมือใหม่มาก อีกทั้งตอนนี้ผมก็เหลือเวลาไม่มากแล้วด้วยครับ ถ้าได้รบกวนอาจารย์ทักผมตาม E-mail นี้เลยนะคับ - - - > natnawat.k@gmail.com ขอบคุณมากครับ
10 @R15668
มีอีกเรื่องนะครับอาจารย์ TTT ตอนผมไปเลือก DAO 3.6 จาก Reference โปรแกรมก็ฟ้องตามภาพที่แนบนะครับ
11 @R15669
- รู้สึกตั้งแต่ 2007 ขึ้นไป (คือผมใช้ 2010 เลย ไม่ได้ใช้ 2007) ไม่ต้องเพิ่ม DAO 3.6 แล้วนะครับ มันมีอยู่ในไลบารี่ Micorosoft Access xxx Object Library เลยครับ และใหม่กว่าด้วย
- สาเหตุที่ทำให้ Addnew ไม่ได้ ที่ผมคิดออกตอนนี้คือ เหตุหากเป็น ตารางคือ ตารางของคุณอาจทีฟิลด์ที่ทำ Relationship กับตารางอื่น ที่ทำให้มีเงื่อนไขการใส่ค่าที่ไม่สามารถเพิ่มเรคคอร์ดได้ อันนี้ต้องแก้ที่การออกแบบ เพราะโค๊ดน่าจะถูกแล้วนะครับ ผิดตรงตารางมันไม่ยอมให้เพิ่มเรคคอร์ดใหม่
- เรื่อง E-mail ผมไม่สะดวกนะครับ ไว้ติดอะไรถามในนี้มีอาจารย์เก่งๆ อีกหลายท่าน ส่วนตัวผมยังไม่ถึงขั้นนะครับ และ (บ่งตง ขนาดงานผมเองผมยังขี้เกียจดูเลยอ่ะครับ) ยังไงต้องขอโทษด้วย ตัวผมเองก็เริ่มจาก 0 นะครับ ไม่ได้เรียนมาทางนี้ จบทางด้านอิเล็คทรอนิกส์ เริ่มจากการอ่านหนังสือ ลองทำ ถามในกระทู้ พยายามเข้าใจภาพรวมมันให้ได้ ลองดูครับ สุดท้ายเราจะภูมิใจกับความสามารถที่ตัวเราเองมี
- สาเหตุที่ทำให้ Addnew ไม่ได้ ที่ผมคิดออกตอนนี้คือ เหตุหากเป็น ตารางคือ ตารางของคุณอาจทีฟิลด์ที่ทำ Relationship กับตารางอื่น ที่ทำให้มีเงื่อนไขการใส่ค่าที่ไม่สามารถเพิ่มเรคคอร์ดได้ อันนี้ต้องแก้ที่การออกแบบ เพราะโค๊ดน่าจะถูกแล้วนะครับ ผิดตรงตารางมันไม่ยอมให้เพิ่มเรคคอร์ดใหม่
- เรื่อง E-mail ผมไม่สะดวกนะครับ ไว้ติดอะไรถามในนี้มีอาจารย์เก่งๆ อีกหลายท่าน ส่วนตัวผมยังไม่ถึงขั้นนะครับ และ (บ่งตง ขนาดงานผมเองผมยังขี้เกียจดูเลยอ่ะครับ) ยังไงต้องขอโทษด้วย ตัวผมเองก็เริ่มจาก 0 นะครับ ไม่ได้เรียนมาทางนี้ จบทางด้านอิเล็คทรอนิกส์ เริ่มจากการอ่านหนังสือ ลองทำ ถามในกระทู้ พยายามเข้าใจภาพรวมมันให้ได้ ลองดูครับ สุดท้ายเราจะภูมิใจกับความสามารถที่ตัวเราเองมี
12 @R15670
ขอบคุณมากครับอาจารย์ TTT ผมจะลองพยายามดูครับ
13 @R15671
อาจารย์ TTT พอจะทราบคำสั่ง ที่บังคับ หรือ แจ้งเตือน ผู้ใช้ในกรณีที่ผู้ใช้พิมพ์ตัวเลขข้อมูลซ้ำ ในฟิล ที่เป็น Primary มั๊ยครับ โปรแกรมแจ้งเตือนผมประมาณนั่นอะคับ
Time: 0.2421s
Private Sub CmdRec_Click()
Dim rsSe As Recordset
Set rsSe = CurrentDb.OpenRecordset("OderTbl")
With rsSe
.AddNew
!PrdBarcode = [Text1]
!PrdDate = [Text2]
!PrdType = [Text3]
!CdCus = [Text4]
!CdTruck = [Text5]
.Update
End With
rsSe.Close: Set rsSe = Nothing
End If