Updating data using Adapter wizard

housemi

Member
Joined
May 7, 2003
Messages
10
I am getting an error "Update requires a valid updatecommand when passed DataRow collection with modified rows." I created the vb program using the wizard to connect to my Access database. I can load the data, but cannot update the form. The other posts on this forum did not seem to help. Any ideas?
 
RE:

Can you post the code that is giving you the error?
Is it a datagrid you are populating and updating?
 
RE:

To get a better idea of where the error is occuring, i would let the code run as far as connecting to the db in the update routine to make sure all is well up to that point.
Code:
 Public Sub UpdateDataSource(ByVal ChangedRows As SnapShotTool3.snapshot)
        Try
            The data source only needs to be updated if there are changes pending.
            If (Not (ChangedRows) Is Nothing) Then
                Open the connection.
                Me.OleDbConnection1.Open()
 **** insert some kind of boolean here to see if your ok to this point
                Attempt to update the data source.
                OleDbDataAdapter1.Update(ChangedRows)
            End If
        Catch updateException As System.Exception
            Add your error handling code here.
            Throw updateException
        Finally
            Close the connection whether or not the exception was thrown.
            Me.OleDbConnection1.Close()
        End Try
End Sub

the error you posted seems to me the ChangedRows is to blame.
Im not sure how this code works exactly with ChangedRows being passed from the update routine as Snapshot so im just guessing.
 
Im missing a
Code:
Me.BindingContext(objsnapshot, "Table1").EndCurrentEdit()
before updating.
 
found the line

That is the line that is giving the error. I was able to make it to the point you provided. Any idea as to what I should do next?
 
RE missing

Good point APaule

Code:
Public Sub UpdateDataSource(ByVal ChangedRows As SnapShotTool3.snapshot)
        Try
            The data source only needs to be updated if there are changes pending.
end any current edits
Me.BindingContext(objsnapshot, "Table1").EndCurrentEdit()
            If (Not (ChangedRows) Is Nothing) Then
                Open the connection.
                Me.OleDbConnection1.Open()
 **** insert some kind of boolean here to see if your ok to this point
                Attempt to update the data source.
                OleDbDataAdapter1.Update(ChangedRows)
            End If
        Catch updateException As System.Exception
            Add your error handling code here.
            Throw updateException
        Finally
            Close the connection whether or not the exception was thrown.
            Me.OleDbConnection1.Close()
        End Try
End Sub
other than trying that i dont know enough about SnapShot to make any conclusions
 
Another method

I found this other method on the forum that I thought Id try...but Im having trouble with that as well! Can someone tell me where Im going wrong with this simple code?

Imports System
Imports System.Data
Imports System.Data.OleDb
Public Class Form1
Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

Public Sub New()
MyBase.New()

This call is required by the Windows Form Designer.
InitializeComponent()

Add any initialization after the InitializeComponent() call

End Sub

Form overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer

NOTE: The following procedure is required by the Windows Form Designer
It can be modified using the Windows Form Designer.
Do not modify it using the code editor.
Friend WithEvents Button1 As System.Windows.Forms.Button
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.Button1 = New System.Windows.Forms.Button()
Me.SuspendLayout()

Button1

Me.Button1.Location = New System.Drawing.Point(120, 96)
Me.Button1.Name = "Button1"
Me.Button1.TabIndex = 0
Me.Button1.Text = "Button1"

Form1

Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(292, 273)
Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.Button1})
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(False)

End Sub

#End Region

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim A As String
Dim B As String
Dim MyConnection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\housemi\My Documents\Visual Studio Projects\Simple.mdb")
MyConnection.Open()
Dim MyCommand As New OleDbCommand("SELECT * FROM MyTable WHERE ID = 1", MyConnection)

The line below is where the code bombs :(
Dim MyReader As OleDbDataReader = MyCommand.ExecuteReader()
While MyReader.Read
A = MyReader("Text")
B = MyReader("Text2")
End While
MyConnection.Close()
MyReader.Close()
MyCommand.Dispose()

End Sub
End Class
 
re:

Make sure the SQLCommand is correct
Dim MyCommand As New OleDbCommand("SELECT * FROM MyTable WHERE ID = 1", MyConnection)

Is your database table really called MyTable? This is the first instance of your code executing the MyCommand and if your error is occuring there, thatd be the first place i looked.
 
Thanks! You were right, MyTable should be Table1. I also discovered that my original Access Database did not have a primary key associated with a field called "ID". Once I added that field as an autonumber, everything worked out. THANKS everyone.
 
Back
Top