Jump to content
coisox

Vb.net: Add, Update, Delete, Moveprev, Movenext

Recommended Posts

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... :)

form1.gif

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 Class

Sila download projek nie then run kat PC korang utk lebih paham. [DOWNLOAD]

Edited by Coisox

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

maknanya combine laa both

dataAdapter.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 by Coisox

Share this post


Link to post
Share on other sites

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.

:blush:

Edited by sworn

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...