coisox 0 Report post Posted October 9, 2008 (edited) Aku ikut satu tutorial utk navigate data MS Access guna ADO.net. Dia ada function Add, Update, Delete, MovePrev, MoveNext. So far, setiap function tu berfungsi secara perseorangan. Maksud aku, kalau aku click button Add, bila exit system dan check kat MS Access, memang database dah bertambah. Begitu juga ngan fungci yg lain (Update, Delete)Masalahnya, bila aku run system tu, kalau lepas aku add satu rekod baru then terus delete rekod yg baru tu melalui button DELETE, program crash.Katakan laa aku dah ada 4 rekod. Bila run, kalau aku delete mana2 rekod 1 hingga 4, takde masalah, tapi kalau aku add rekod yg ke-5 menerusi button ADD tu, bila aku delete rekod kelima, crash. Seolah2 dataset/table tidak di update dengan sempurna.Unless, lepas aku click button ADD, aku exit system then run balik then baru delete.Mintak tolong... Public Class Form1 Public cnADONetConnection As New OleDb.OleDbConnection() Public dataAdapter As OleDb.OleDbDataAdapter Public commandBuilder As OleDb.OleDbCommandBuilder Public dataTable As New DataTable Dim m_rowPosition As Integer = 0 Private Sub ShowCurrentRecord() If dataTable.Rows.Count = 0 Then TextBox1.Text = "" Exit Sub End If TextBox1.Text = dataTable.Rows(m_rowPosition)("nama").ToString() End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load cnADONetConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\db1.mdb" cnADONetConnection.Open() dataAdapter = New OleDb.OleDbDataAdapter("Select * From Table1", cnADONetConnection) commandBuilder = New OleDb.OleDbCommandBuilder(dataAdapter) dataAdapter.Fill(dataTable) ShowCurrentRecord() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If m_rowPosition > 0 Then m_rowPosition = m_rowPosition - 1 Me.ShowCurrentRecord() End If End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click If m_rowPosition < (dataTable.Rows.Count - 1) Then m_rowPosition = m_rowPosition + 1 Me.ShowCurrentRecord() End If End Sub Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click If dataTable.Rows.Count <> 0 Then dataTable.Rows(m_rowPosition)("nama") = TextBox1.Text dataAdapter.Update(dataTable) End If End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Dim drNewRow As DataRow = dataTable.NewRow() drNewRow("nama") = TextBox1.Text dataTable.Rows.Add(drNewRow) dataAdapter.Update(dataTable) m_rowPosition = dataTable.Rows.Count - 1 Me.ShowCurrentRecord() End Sub Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click If dataTable.Rows.Count <> 0 Then dataTable.Rows(m_rowPosition).Delete() dataAdapter.Update(dataTable) m_rowPosition = 0 Me.ShowCurrentRecord() End If End Sub End ClassSila download projek nie then run kat PC korang utk lebih paham. [DOWNLOAD] Edited October 9, 2008 by Coisox Quote Share this post Link to post Share on other sites
sworn 0 Report post Posted October 14, 2008 oh ye...lupe nak reply..ko cuba ganti... dataTable.Rows(m_rowPosition).Delete()ngan dataTable.Rows.RemoveAt(m_rowPosition) Quote Share this post Link to post Share on other sites
coisox 0 Report post Posted October 14, 2008 oh ye... aku pun lupa nak update. ingatkan takde yg nak response. Currently, lepas aku update, aku clear balik dataTable then redo SQL query and refill. Baru ok. .Update tu seolah-olah hanya utk update database but not dataTable. So lepas update database, kita kena update plak dataTable. sila betulkan pendapat aku. Quote Share this post Link to post Share on other sites
sworn 0 Report post Posted October 14, 2008 aku slalu buat camtu.mls nak run balik sql query,pastu refill balik.dpt jimat resource dan memory yg dipakai oleh app.bleh gak guna cara ko,up to u la.asalkan app ko bleh run.kalo rajin,try la guna code yg aku bg tu.pendek skit code ko.fungsinye same je aku rase,tapi aku xsempat nak test.try la,kot2 salah ke yg aku bg tu. Quote Share this post Link to post Share on other sites
coisox 0 Report post Posted October 14, 2008 (edited) maknanya combine laa bothdataAdapter.Update(dataTable) and dataTable.Rows(m_rowPosition).Delete()?Actually, dalam function update tu, apa yg berlaku? KAtne aku nak tengok kandungan function update()? Entah2 dalam update() tu dah ada .delete or reload SQL. Aku dah buat keje 2-3 kali. Buang resources jek Edited October 14, 2008 by Coisox Quote Share this post Link to post Share on other sites
sworn 0 Report post Posted October 14, 2008 (edited) alamak,aku silap.sori2..tadi aku try check,time runtime nampak cam dia delete,tapi rupenye tak update kat db.cuma delete kat datatable...sori2..aku ingat guna cara ko je la Coisox. Edited October 14, 2008 by sworn Quote Share this post Link to post Share on other sites
coisox 0 Report post Posted October 14, 2008 Kalau pakai cara kau tu boleh gabungkan camnie; dataAdapter.Update(dataTable) and dataTable.Rows(m_rowPosition).Delete(). Rasa aku lagi cepat compare too refill and nak query semula Quote Share this post Link to post Share on other sites