Solved

DataSet GetChanges - Modified VALUES only

Posted on 2009-04-06
3
354 Views
Last Modified: 2013-11-26
Is there a way to only get the actual values that were modified in a dataset.  My below code works, but produces the whole row, not just the changes data.

I want to display to the user any values that have changed after a "sync" with an outside DB.

Also, the Main Dataset (DRIPeachDataSet) as columns in the table that is syncing that the other dataset (DIMMSDataSet) does not have.  I would like to only compare the field values where the column names match.

I may just have to hard code it...

Thanks.
Private Sub SyncTicket()
   If DIMMSDataSet.HasChanges() Then
            ' Use GetChanges to extract subset.
            PrintValues(DIMMSDataSet.GetChanges(DataRowState.Modified),"Subset values")
   End If
End Sub
 
 Private Sub PrintValues(ByVal dataSet As DataSet, ByVal PeachDataSet As DataSet, ByVal label As String)
        Console.WriteLine(Label + ControlChars.Cr)
        Dim table As DataTable
   
        For Each table In dataSet.Tables
            If table.TableName.ToString = "TRX_HDR_DRI" Then
                'Console.WriteLine("TableName: " + table.TableName)
                Dim row As DataRow
                For Each row In table.Rows
                    Dim column As DataColumn
                    For Each column In table.Columns
                        Console.Write(ControlChars.CrLf & column.ColumnName.ToString & ": " & row(column).ToString())
                    Next column
                Next row
            End If
        Next table
    End Sub

Open in new window

0
Comment
Question by:vwalla
3 Comments
 
LVL 53

Expert Comment

by:Dhaest
ID: 24084396
Throught the getChanges, you'll only get the rows back where some column values have been changed
I don't think that these rows hold the old value and the new values.

Implement your own logic: DataTable Transaction Logger
http://www.codeproject.com/KB/database/dttl.aspx?display=PrintAll&fid=274009&df=90&mpp=25&noise=3&sort=Position&view=Quick&select=1870081
0
 
LVL 15

Accepted Solution

by:
oobayly earned 500 total points
ID: 24085291
You could use the property that requests the DataRowVersion:
For Each row As DataRow In table.Rows
    For Each column As DataColumn In table.Columns
        If row.HasVersion(DataRowVersion.Original) Then
            Console.WriteLine("{0}: '{1}' -> '{2}'", column.ColumnName, row(column, DataRowVersion.Original), row(column))
        Else
            Console.WriteLine("{0}: '{1}' has not changed", column.ColumnName, row(column))
        End If
    Next
Next

Open in new window

0
 
LVL 1

Author Closing Comment

by:vwalla
ID: 31567324
This works perfectly!  Thanks!
0

Featured Post

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Most everyone who has done any programming in VB6 knows that you can do something in code like Debug.Print MyVar and that when the program runs from the IDE, the value of MyVar will be displayed in the Immediate Window. Less well known is Debug.Asse…
I was working on a PowerPoint add-in the other day and a client asked me "can you implement a feature which processes a chart when it's pasted into a slide from another deck?". It got me wondering how to hook into built-in ribbon events in Office.
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…

813 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now