|
|
|
ช่วยดูให้หน่อยครับว่าทำไม ถึงบันทึกข้อมูลไม่ได้ ทั้งที่ผมก้อนำของฟร์อมอื่นมาแก้ไขใหม่ |
|
|
|
|
|
|
|
Debug นะเออ...
|
|
|
|
|
Date :
2010-03-30 16:48:33 |
By :
ขี้เกียจล็อกอิน |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมหาข้อผิดพลาดไม่เจออ่ะ ช่วยหน่อยน่ะครับ
|
|
|
|
|
Date :
2010-03-31 10:21:50 |
By :
oasiis |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (VB.NET)
Private Sub ts_save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ts_save.Click
If (txt_idrespon.Text.Trim() = "") Then
MessageBox.Show("กรุณาป้อน 'รหัส' ด้วย", "คำเตือน !!! ", MessageBoxButtons.OK, MessageBoxIcon.Warning)
txt_idrespon.Focus()
Exit Sub
End If
If (txt_namerespon.Text.Trim() = "") Then
MessageBox.Show("กรุณาป้อน 'ชื่อผู้รับผิดชอบ' ด้วย", "คำเตือน !!! ", MessageBoxButtons.OK, MessageBoxIcon.Warning)
txt_namerespon.Focus()
Exit Sub
End If
If (txt_posit.Text.Trim() = "") Then
MessageBox.Show("กรุณาป้อน 'ตำแหน่ง' ด้วย", "คำเตือน !!! ", MessageBoxButtons.OK, MessageBoxIcon.Warning)
txt_posit.Focus()
Exit Sub
End If
If (txt_bost.Text.Trim() = "") Then
MessageBox.Show("กรุณาป้อน 'ต้นสังกัด' ด้วย", "คำเตือน !!! ", MessageBoxButtons.OK, MessageBoxIcon.Warning)
Exit Sub
End If
If MessageBox.Show("คุณต้องการบันทึกข้อมูล ใช่หรือไม่ ? ", "ยืนยัน", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
sw.Reset()
sw.Start()
Conn = New OleDbConnection()
With Conn
If .State = ConnectionState.Open Then .Close()
.ConnectionString = strConn
.Open()
End With
tr = Conn.BeginTransaction()
Try
Select Case ActionFlag
Case "ADD"
sb.Remove(0, sb.Length())
sb.Append("INSERT INTO tbresponsible")
sb.Append("(id_responsible,name_responsible,")
sb.Append("position,boasting)")
sb.Append(" VALUES(@id,@name,@posit,@boast)")
Case "EDIT"
sb.Remove(0, sb.Length())
sb.Append("UPDATE tbresponsible")
sb.Append(" SET id_responsible=@id")
sb.Append(" ,name_responsible=@name")
sb.Append(" ,position=@posit")
sb.Append(" ,boasting=@boast")
sb.Append(" WHERE (id_responsible=@id)")
End Select
Dim sqladd As String
sqladd = sb.ToString()
lbll.Text = sqladd
With Com
.CommandText = sqladd
.CommandType = CommandType.Text
.Connection = Conn
.Transaction = tr
.Parameters.Clear()
.Parameters.Add("@id", OleDbType.Integer).Value = txt_idrespon.Text.Trim()
.Parameters.Add("@name", OleDbType.LongVarChar).Value = txt_namerespon.Text.Trim()
.Parameters.Add("@posit", OleDbType.LongVarChar).Value = txt_posit.Text.Trim()
.Parameters.Add("@boast", OleDbType.LongVarChar).Value = txt_bost.Text.Trim()
.ExecuteNonQuery()
End With
tr.Commit()
sw.Stop()
processtime = sw.ElapsedMilliseconds / 1000
_toolstriplabel.Text = "เวลาที่ใช้ : " & processtime.ToString("0.0000") & " วินาที"
If (ActionFlag = "ADD") Then
MessageBox.Show("คุณเพิ่ม ข้อสั่งการ เรียบร้อยแล้ว", " ผลการดำเนินการ ", MessageBoxButtons.OK, MessageBoxIcon.Information)
ClearAllData()
showdata()
formatdgvrespon()
ts_add.Enabled = True
ts_edit.Enabled = True
ts_save.Enabled = False
ts_cancel.Enabled = False
E_readsonly()
ActionFlag = ""
Exit Try
End If
If (ActionFlag = "EDIT") Then
MessageBox.Show("คุณได้ทำการแก้ไขข้อมูล " & txt_namerespon.Text & " เรียบร้อยแล้ว", " ผลการดำเนินการ ", MessageBoxButtons.OK, MessageBoxIcon.Information)
ClearAllData()
showdata()
formatdgvrespon()
ts_add.Enabled = True
ts_edit.Enabled = True
ts_save.Enabled = False
ts_cancel.Enabled = False
E_readsonly()
ActionFlag = ""
Exit Try
End If
'MessageBox.Show("คุณเพิ่มช่องทางการร้องเรียน เรียบร้อยแล้ว", " ผลการดำเนินการ ", MessageBoxButtons.OK, MessageBoxIcon.Information)
Catch '<<<มันเข้า catch นี้มั้ยครับ ผมอยากรู้ ว่า exception อะไร
MessageBox.Show("ไม่สามารถบันทึกข้อมูลได้ !!!", "ข้อผิดพลาด", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
tr.Rollback()
End Try
End If
End Sub
ปัญหาของคนเขียนโปรแกรมแบบนี้คือ คุณ เปิด try...catch แล้วไม่รู้ว่า เปิดแล้วดักอะไร ได้ exception อะไร สิ่งที่คุณคาดไม่ถึงคือ error ที่คุณมองข้ามไป คุณลองดักดูนะครับ อย่าเปิดไว้เฉยๆ แล้วพวก try...catch ??? ว่างๆ ไปนี้ ก็ไม่เอาครับ
|
|
|
|
|
Date :
2010-03-31 13:49:26 |
By :
numenoy |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ครับ ทำเข้าครับ
Code (VB.NET)
Catch '<<<มันเข้า catch นี้มั้ยครับ ผมอยากรู้ ว่า exception อะไร
MessageBox.Show("ไม่สามารถบันทึกข้อมูลได้ !!!", "ข้อผิดพลาด", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
tr.Rollback()
|
|
|
|
|
Date :
2010-03-31 14:02:19 |
By :
oasiis |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อิอิ ผมนึกว่าจะปล่อยผ่านแล้ว แต่พอดีคุณ numenoy มาเปิดเลยขอแจมสักหน่อย
เรื่อง transaction น่ะ
เขาจะใช้กันในกรณีที่ใช้ command หลายๆ command ที่มีความสัมพันธ์กัน ยกตัวอย่างเช่น
การโอนเงินจากบัญชีนึงไปอีกบัญชีนึง เพื่อเวลาเกิด error ขึ้นที่ command ใด command หนึ่ง
มันจะได้ rollback กลับไปทุก command ไม่งั้นใช้ command โอนเงินจากบัญชี1 ไปแล้ว
command รับเงินของบัญชี2 เกิด error ขึ้นมา เงินหายไปจะแย่ เขาเลยต้องใช้ transaction
คลอบไว้ไง แต่แค่ command เดียวแบบนี้จะใส่ไว้ก็ได้ แต่เอาออกเถอะไม่มีประโยชน์
|
|
|
|
|
Date :
2010-03-31 14:09:03 |
By :
tungman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แล้วทำฟรอมอื่น ผมก้อใช้แบบนี้ แต่ผลรับออกมาไม่เหมือนกันอ่ะครับ
อันอื่นมันไม่เข้า catch แต่อันนี้มันเข้า
พอผมเอา try ออก มัน orrer ตรง ExecuteNonQuery()
บอกว่า Syntax error in INSERT INTO statement ครับ
|
|
|
|
|
Date :
2010-03-31 14:16:33 |
By :
oasiis |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
งั้นไปดูวิธีการใช้ try...catch ที่ผมเคยตอบไว้เมื่อวานให้เข้าใจ
แล้วเอามาประยุกต์ใช้ซะ เวลาเกิด error เกิดอีกจะได้แก้เป็น
https://www.thaicreate.com/dotnet/forum/040957.html
ปล. เป็น programmer นะไม่ได้เป็นนักบัญชี ต้องใช้ความเข้าใจ ไม่ได้ใช้จำ การโค้ดมีหลากหลายวิธี
รูปแบบไม่ได้เป็น pattern ที่จะไปก็อบมาวางแล้วใช้ได้เลยหรอก มันต้องเข้าใจหลักการทำงานด้วย
จะได้เอาโค้ดมาแก้ไขเพื่อใช้กับงานๆ นั้นได้อย่างถูกต้อง
(แสดงว่าที่โค้ดให้เมื่อวานไม่ได้มีประโยชน์อะไรเลยสิ ปัญหาเหมือนเดิมก็ยังแก้ไม่ได้เหมือนเดิม แบบนี้คนแนะก็เศร้าใจ)
|
|
|
|
|
Date :
2010-03-31 14:30:57 |
By :
tungman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
มัน orrer ตรง ExecuteNonQuery()
บอกว่า Syntax error in INSERT INTO statement ครับ
มันเลยเข้า catch แสดง statement ในการเพิ่มข้อมูลผิดหรอครับ?
|
|
|
|
|
Date :
2010-03-31 14:42:31 |
By :
oasiis |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Syntax error in INSERT INTO statement ???
อ่านไปอีกครับ อ่านไปอีก มันจะมีประโยคว่า near...อะไร ตรงคำไหน ตรง query ไหนที่ผิด
น้องไม่ค่อยอ่าน error เลย อ่านให้จบ ให้เข้าใจครับ
|
|
|
|
|
Date :
2010-03-31 16:00:02 |
By :
numenoy |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
042. sb.Append("UPDATE tbresponsible")
043. sb.Append(" SET")
044. sb.Append(" name_responsible=@name")
045. sb.Append(" ,position=@posit")
046. sb.Append(" ,boasting=@boast")
047. sb.Append(" WHERE (id_responsible=@id)")
|
|
|
|
|
Date :
2010-04-01 09:02:47 |
By :
tungman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ยังไม่ได้เลยครับ
orrer ก็ขึ้นแค่ว่า Syntax error in UPDATE statement. ไม่มีต่อเลย
|
|
|
|
|
Date :
2010-04-01 09:18:49 |
By :
oasiis |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
061. .Parameters.Add("@id", OleDbType.Integer).Value = CInt(txt_idrespon.Text)
062. .Parameters.Add("@name", OleDbType.LongVarChar).Value = txt_namerespon.Text
063. .Parameters.Add("@posit", OleDbType.LongVarChar).Value = txt_posit.Text
064. .Parameters.Add("@boast", OleDbType.LongVarChar).Value = txt_bost.Text
|
|
|
|
|
Date :
2010-04-01 09:23:14 |
By :
tungman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
orrer เหมือนเดิมครับผม
|
|
|
|
|
Date :
2010-04-01 09:35:45 |
By :
oasiis |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
จนปัญาอันน้อยนิดแล้วครับ
|
|
|
|
|
Date :
2010-04-01 12:03:18 |
By :
oasiis |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมไม่เข้าว่าค่าใน textbox capture ยังไง? ไม่รู้เข้าใจถูกป่าวน่ะครับ?
|
|
|
|
|
Date :
2010-04-01 12:57:02 |
By :
oasiis |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ชื่อ table : tb_repon
ชื่อ field : id_rpn ,name_rpn ,pst ,boa
แต่คุณเขียน
sb.Append("INSERT INTO tbresponsible")
sb.Append("(id_responsible,name_responsible,")
sb.Append("position,boasting)")
sb.Append(" VALUES(@id,@name,@posit,@boast)")
เห็นที่จะต้องแก้ยังคะ
|
|
|
|
|
Date :
2010-04-01 13:03:36 |
By :
blurEye |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอนนี้ผมเปลี่ยนแล้วครับ
ผมลองสร้างตารางใหม่ครับ
Code (VB.NET)
Private Sub ts_save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ts_save.Click
If (txt_namerespon.Text.Trim() = "") Then
MessageBox.Show("กรุณาป้อน ชื่อผู้รับผิดชอบ ด้วย", "คำเตือน !!! ", MessageBoxButtons.OK, MessageBoxIcon.Warning)
txt_namerespon.Focus()
Exit Sub
End If
If (txt_posit.Text.Trim() = "") Then
MessageBox.Show("กรุณาป้อน ตำแหน่ง ด้วย", "คำเตือน !!! ", MessageBoxButtons.OK, MessageBoxIcon.Warning)
txt_posit.Focus()
Exit Sub
End If
If (txt_boast.Text.Trim() = "") Then
MessageBox.Show("กรุณาป้อน ต้นสังกัด ด้วย", "คำเตือน !!! ", MessageBoxButtons.OK, MessageBoxIcon.Warning)
txt_boast.Focus()
Exit Sub
End If
If MessageBox.Show("คุณต้องการบันทึกข้อมูล ใช่หรือไม่ ? ", "ยืนยัน", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
sw.Reset()
sw.Start()
Conn = New OleDbConnection()
With Conn
If .State = ConnectionState.Open Then .Close()
.ConnectionString = strConn
.Open()
End With
tr = Conn.BeginTransaction()
Try
Select Case ActionFlag
Case "ADD"
sb.Remove(0, sb.Length())
sb.Append("INSERT INTO tb_respon")
sb.Append(" VALUES(@id,@name,@post,@boast)")
Case "EDIT"
sb.Remove(0, sb.Length())
sb.Append("UPDATE tb_repon")
sb.Append(" SET id_rpn=@id")
sb.Append(" ,name_rpn=@name")
sb.Append(" ,pst=@post")
sb.Append(" ,bst=@boast")
sb.Append(" WHERE (id_rpn=@id)")
End Select
Dim sqladd As String
sqladd = sb.ToString()
'MessageBox.Show(sqladd, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
Label1.Text = sqladd
With Com
.CommandText = sqladd
.CommandType = CommandType.Text
.Connection = Conn
.Transaction = tr
.Parameters.Clear()
.Parameters.Add("@id", OleDbType.Integer).Value = txt_idrespon.Text.Trim()
.Parameters.Add("@name", OleDbType.LongVarChar).Value = txt_namerespon.Text.Trim()
.Parameters.Add("@posit", OleDbType.LongVarChar).Value = txt_posit.Text.Trim()
.Parameters.Add("@boast", OleDbType.LongVarChar).Value = txt_boast.Text.Trim()
.ExecuteNonQuery()
End With
tr.Commit()
sw.Stop()
processtime = sw.ElapsedMilliseconds / 1000
_toolstriplabel.Text = "เวลาที่ใช้ : " & processtime.ToString("0.0000") & " วินาที"
If (ActionFlag = "ADD") Then
MessageBox.Show("คุณเพิ่มข้อมูล เรียบร้อยแล้ว", " ผลการดำเนินการ ", MessageBoxButtons.OK, MessageBoxIcon.Information)
ClearAllData()
showdata()
formatdgv_respon()
ts_add.Enabled = True
ts_edit.Enabled = True
ts_save.Enabled = False
ts_cancel.Enabled = False
E_readsonly()
ActionFlag = ""
Exit Try
End If
If (ActionFlag = "EDIT") Then
MessageBox.Show("คุณได้ทำการแก้ไขข้อมูล " & txt_namerespon.Text & " เรียบร้อยแล้ว", " ผลการดำเนินการ ", MessageBoxButtons.OK, MessageBoxIcon.Information)
ClearAllData()
showdata()
formatdgv_respon()
ts_add.Enabled = True
ts_edit.Enabled = True
ts_save.Enabled = False
ts_cancel.Enabled = False
E_readsonly()
ActionFlag = ""
Exit Try
End If
'MessageBox.Show("คุณเพิ่มช่องทางการร้องเรียน เรียบร้อยแล้ว", " ผลการดำเนินการ ", MessageBoxButtons.OK, MessageBoxIcon.Information)
Catch
MessageBox.Show("ไม่สามารถบันทึกข้อมูลได้", "ข้อผิดพลาด", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
tr.Rollback()
End Try
End If
End Sub
|
|
|
|
|
Date :
2010-04-01 13:18:04 |
By :
oasiis |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แล้วเอาของเก่ามาให้ดูทำไมละคะ ตัวที่ใช้เป็นปัจจุบันสิคะ
ดิชั้นคงเดาไม่ออกหรอกค่ะ
|
|
|
|
|
Date :
2010-04-01 13:25:31 |
By :
blurEye |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ก็น่าจะถูกแล้วนี่คะ ถ้า error อะไรออกมาให้ cap screen มาวางเลยค่ะ
|
|
|
|
|
Date :
2010-04-01 13:29:21 |
By :
blurEye |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Date :
2010-04-01 13:36:12 |
By :
oasiis |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ได้แล้วครับ ผิดที่ผมเองตรงบรรทัดที่ 036 ตกตัว 's' ไป
แต่ตอนแรกมันฟ้อง error ว่า Syntax error in UPDATE statement. ครับ
มันจะเป็นเพราะเราตั้งชื่อ file รึป่าวครับ?
|
|
|
|
|
Date :
2010-04-01 14:03:28 |
By :
oasiis |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
field ค่ะไม่ใช่ file ชื่อ field ไม่ถูกเลย error น่าจะเป็นยังงั้นค่ะ
ปกติถ้าจะทำงานกับ database ให้คุณนำ query ที่ต้องการใช้
ไป run ดูกับตัว database manager ในกรณีของคุณก็คือ msAccess
ลองจำลองค่าที่น่าจะเป็นเข้าไป ถ้า error จะได้แก้ไขได้สะดวก
พอนำมาใช้ใน vb.net ถ้า error ก็คงเป็นที่ code แยกกันพิจาณาหาสาเหตุได้ง่ายค่ะ
และการเขียน Query ชื่อเครื่องหมายต้องถูกต้องค่ะเช่นเดียวกันการเขียน code ภาษาโดยทั่วไป
ปล.
ขอขอบคุณด้วยค่ะ ได้ idea ทำ dynamic data entry lightbox ป้อนข้อมูลของ grid ใหม่เพราะนั่งคิดวิธีแก้ปัญหาของคุณค่ะ
|
|
|
|
|
Date :
2010-04-01 14:19:27 |
By :
blurEye |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ครับผมขอบคุณมากครับ
ถ้าผมมีปัญหาอีก จะมาขอคำแนะนำอีกน่ะครับ
|
|
|
|
|
Date :
2010-04-01 14:42:14 |
By :
oasiis |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
oasiis นี่ร้ายเนอะ
แกล้งโปรแกรมเมอร์ให้หา Bug อะไรแปลกๆ
|
|
|
|
|
Date :
2010-04-02 14:51:46 |
By :
watcharop |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อิอิ ไม่ได้แกล้งน่ะครับ
|
|
|
|
|
Date :
2010-04-02 16:25:42 |
By :
oasiis |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|