การ insertข้อมูล
กระทู้เก่าบอร์ด อ.Yeadram

 5,393   11
URL.หัวข้อ / URL
การ insertข้อมูล

Private Sub cmdClosefrmmodUnit_Click()

    Dim rsInsertUnitRecords As DAO.Recordset
    Dim dbCurrentDB As DAO.Database
    Dim InsertUnitQuery As String
    
    InsertUnitQuery = " INSERT INTO tblUnit(SECTID, NAMES, CRIT, NO_OF, NOTES, MODIFIED, CREATE_USER, MOD_USER) VALUES(" & SECTID.Value & ", '" & txtName_Unit.Value & "'," & txtCrit_Unit.Value & ", " & txtNoOf_Unit.Value & ", '" & txtNote_Unit.Value & "', #" & txtCurrentTime_Unit.Value & "#, '" & txtCreateUser_Unit.Value & "', '" & txtCurrentUser_Unit.Value & "'); "
    
    Set dbCurrentDB = Access.CurrentDb
    'DoCmd.setwarning False
    On Error GoTo er
    dbCurrentDB.Execute InsertUnitQuery
    MsgBox "Data was Added"
    dbCurrentDB.Close
    Exit Sub
er:
    MsgBox "Cannot Added data !!!" & Err.Number & "-" & Err.Description
    
'On Error GoTo Err_cmdClosefrmmodUnit_Click

'    DoCmd.Close

'Exit_cmdClosefrmmodUnit_Click:
'    Exit Sub

'Err_cmdClosefrmmodUnit_Click:
'    MsgBox Err.Description
'    Resume Exit_cmdClosefrmmodUnit_Click
End Sub

โค้ดข้างบนนี้เป็นโค้ดสำหรับ insert ข้อมูลลงตาราง tblUnit

เมื่อกดปุ่ม SAVE โปรแกรมฟ้องว่าข้อมูลได้ถูกเซฟลงตารางแล้ว แต่เมื่อไปดูในตาราง ผลปรากฎว่าไม่มีข้อมูลนั้น ผมไม่แน่ใจว่าโค้ด INSERT ของผมนั้นถูกหรือเปล่า ช่วยทีนะครับ

ขอคุณครับ

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

1 @R00486
อ่านแล้วตาลาย ผมถนัดปฎิบัติมากกว่า ไม่ทราบว่า พอจะมีที่ Upload ไฟล์หรือเปล่าครับ ผมจะได้ดูให้
2 @R00489
เรียนคุณ "ม่อนนะครับ"
ขอบอกว่า เป็นโอกาสอันดีมากครับ ที่ อ.ศรี-นคร จะลงมือดูให้ด้วยตัวเอง
ยังไงถ้าไม่มีที่อัพไฟล์ตัวอย่าง ส่งเข้าเมล์ accboard_gmail_com ได้นะครับ
เขียนหัวข้อจดหมายว่า "ปัญหา Insert ข้อมูล: ม่อนนะครับ"
แล้วท่านอื่นๆ ที่มาอ่านทีหลัง อาจจะพลอยได้ประโยชน์ไปด้วย ด้วยการเข้าไปโหลดมาศึกษาครับ
3 @R00494
ส่งเมล์ไปให้แล้วครับ
4 @R00495
เรียน คุณม่อนครับ
ผมเดาว่า คุณ Copy คำสั่ง SQL มาแต่ลืมลบเครื่องหมาย ; ที่ท้ายประโยคออก ให้ลองลบและลองทดดูนะครับ
5 @R00496
InsertUnitQuery = " INSERT INTO tblUnit(SECTID, NAMES, CRIT, NO_OF...


ในประโยคนี้มีคำสงวนของระบบ SQL แต่คุณ เอามาตั้งเป็นชื่อฟิลด์ มันจะมีปัญหาบ้าง ไม่มีปัญหาบ้าง ไม่แน่นอน ต้องใส่เครื่องสี่เหลี่ยม คร่อมไว้ด้วย ครับ
ลองดู
InsertUnitQuery = " INSERT INTO tblUnit(SECTID, [NAMES], CRIT, NO_OF...

6 @R00510
ผมใส่เครื่อง [ ] แล้ว ก็ยังเหมือนเดิม
7 @R00511
Library
- Microsoft Excel 11.0       เปลี่ยนเป็น          10.0
- Microsoft ActiveX Data Objects 2.1 Library               เปลี่ยนเป็น     2.8

ผมเขียน โพรซีเยอร์ทั้งสอง(Update, Insert) ขึ้นใหม่ แม้จะแก้ไขรูปแบบคำสั่งไปเยอะ แต่ใน statement ผมคัดลอกมาทั้งหมด
นอกจากการตัดบรรทัด เพื่อให้ดูกระชับง่ายขึ้น และแก้ที่ฟิลด์ คำว่า NAMES เป็น [NAMES] ที่เหลือผมไม่ได้แก้ไขคำใด หรือเครื่องหมายใดๆ อีกเลย
** อยู่ใน Reply ต่อไป **

Private Sub Form_Load()
ผมคอมเมนต์คำสั่งไป 1 คำสั่ง
        'cmdClosefrmmodUnit.Enabled = False

ที่ฟอร์ม frmModUnit คอนโทรลที่คุณซ่อนไว้ มีสองตัว
txtUNITID   กับ SECTID ผมตั้งค่าให้แสดงผล
------------------------------------------------------------------------------------------
- เซฟโค้ด เซฟฟอร์ม ทุกอย่างแล้วเปิดฟอร์ม frmModUnit ขึ้นมา
- ไม่มีการเลื่อนเรคคอร์ด
- เรคคอร์ดแรก ค่าในช่อง Name: เขียนว่า MAIN SHAFT ผมเปลี่ยนเป็น Yeadram
- กดปุ่ม Update ได้รับ message แจ้งว่า "Data was updated"
- ผมทำการปิดฟอร์ม แล้วไปเปิดดูข้อมูลในตาราง tblUnit
- เรคคอร์ดแรก, ฟิลด์ NAMES    ถูกแก้ไขเป็นคำว่า Yeadram ถูกต้อง!!!
-------------------------------------------------------------------------------------------

- ปิดตาราง tblUnit   แล้วเปิดฟอร์ม frmModUnit ขึ้นมาใหม่อีกครั้ง
- ผมกดปุ่ม ctl++ (เพื่อเพิ่มข้อมูลใหม่)
- ในช่อง SECTID (ที่เคยถูกซ่อน แล้วผมไปแก้ให้มองเห็น)   ผมกรอกเลขเข้าไปเป็น 2
- ที่ช่อง Name: ผมกรอกคำว่า "ไทย แอคเซส"
- กดปุ่ม Save ได้รับ message แจ้งว่า "Data was Add"
- ผมทำการปิดฟอร์ม แล้วไปเปิดดูข้อมูลในตาราง tblUnit
- ข้อมูลถูกเพิ่มเข้าตารางถูกต้อง !!

** อ้อ แถมอีกอย่าง การหาชื่อโปรไฟล์ หรือ user name ไม่ต้องใช้ฟังก์ชั่น API ก็ได้นะครับ
ใช้สั่ง Environ() แทนก็ได้ เช่น $us = Environ("UserName")
8 @R00512

'** อย่าลืมย้อนอ่าน Reply ก่อนหน้า *****
'--------------------------------------------------------------------------------------------
Private Sub cmdClosefrmmodUnit_Click()
Dim sq As String

sq = "INSERT INTO tblUnit (SECTID, [NAMES], CRIT, NO_OF, NOTES, MODIFIED, CREATE_USER, " & _
"MOD_USER) VALUES(" & SECTID.Value & ", '" & txtName_Unit.Value & "', " & txtCrit_Unit.Value & ", " & _
txtNoOf_Unit.Value & ", '" & txtNote_Unit.Value & "', #" & txtCurrentTime_Unit.Value & "#, '" _
& xtCurrentUser_Unit.Value & "', '" & txtModUser_Unit.Value & "');"

    On Error GoTo er
    CurrentDb.Execute sq
    MsgBox "Data was Added"
    Exit Sub
er:
    MsgBox "Cannot Added data !!!" & Err.Number & "-" & Err.Description

End Sub
'----------------------------------------------------------------------------------------------
Private Sub cmdUpdateUnit_Click()
Dim sq As String
sq = "UPDATE tblUnit SET [NAMES] = ' " & txtName_Unit.Value & " ', CRIT = " & txtCrit_Unit.Value & _
", NO_OF = " & txtNoOf_Unit.Value & ", NOTES = '" & txtNote_Unit.Value & "', MODIFIED = #" & _
txtCurrentTime_Unit.Value & "#, CREATE_USER = ' " & txtCreateUser_Unit.Value & _
" ', MOD_USER = ' " & txtCurrentUser_Unit.Value & " ' WHERE UNITID = " & txtUNITID.Value & ";"
    
    On Error GoTo er
    CurrentDb.Execute sq
    MsgBox "Data was updated"
    Exit Sub
er:
    MsgBox "Cannot Updated data !!!" & Err.Number & "-" & Err.Description

End Sub
9 @R00515
ทำไมต้อง??ชว์ txtUNITID   กับ SECTID ด้วยครับ
10 @R00516
ทั้ง txtUNITID   กับ SECTID ถ้าผมเซ็ต Visible = T, Enable = F จะมีผลอะไรมั้ยครับ
11 @R00518
อ้อถ้าการทำงานทั่วไป หรือการทำงานปกติ ก็ไม่ต้องโชว์ครับ ซ่อนมันไปอย่างเดิมนั่นแหละดีแล้วครับ
เพราะผมเดาว่า ค่าที่สองคอนโทรลนั้น จะได้มา หรือจะรับไป คงเป็นการ ให้และรับ โดยระบบของคุณเอง

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