Solved

DataSet GetChanges - Modified VALUES only

Posted on 2009-04-06
3
347 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
Comment Utility
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
Comment Utility
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
Comment Utility
This works perfectly!  Thanks!
0

Featured Post

Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

Join & Write a Comment

Introduction While answering a recent question about filtering a custom class collection, I realized that this could be accomplished with very little code by using the ScriptControl (SC) library.  This article will introduce you to the SC library a…
Article by: Martin
Here are a few simple, working, games that you can use as-is or as the basis for your own games. Tic-Tac-Toe This is one of the simplest of all games.   The game allows for a choice of who goes first and keeps track of the number of wins for…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…
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…

743 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

14 Experts available now in Live!

Get 1:1 Help Now