Сравнение двух базовых баз данных MS Access веб-приложения asp.net - PullRequest
1 голос
/ 22 декабря 2010

в нашем офисе мы ежедневно берем резервную копию приложения ASP.net ms access back

в течение следующих нескольких дней нам нужно оценить изменения, внесенные в записи в таблицах базы данных

в конце каждого дня я хочу сравнивать 2 базы данных доступа. Первая база данных - это резервная копия вчера , а вторая база данных - это резервная копия сегодня

Я подумал о следующем алгоритме, пожалуйста, внимательно прочитайте и скажите мне, как приступить к сравнению таблиц данных / видов сетки

Мне нужно отобразить строки / ячейки, содержащие различия / обновления / удаленные данные

Imports System.Data
Imports System.Data.OleDb
Partial Class MoKoTrack
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim myDB = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|database.mdb;Persist Security Info=True")

    Session("CurrentDB") = myDB


    myDB.open()
    Dim mytables = myDB.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {})

    Dim CurrentTable As String
    Dim ee As Integer = mytables.Rows.Count
    Dim OriginalTables(ee) As String
    Dim BackupTables(ee) As String
    Dim X As Integer = 0
    For i = 1 To mytables.Rows.Count
        CurrentTable = mytables.Rows(i - 1).Item(2).ToString
        If mytables.Rows(i - 1).Item(3).ToString = "TABLE" Or mytables.Rows(i - 1).Item(3).ToString = "VIEW" Then
            If CurrentTable.Contains("Backup") Then
                BackupTables(X) = CurrentTable
            Else
                OriginalTables(X) = CurrentTable
            End If
            X = X + 1
        End If
    Next i

    For i = 0 To BackupTables.Count - 1
        If Not BackupTables(i) = "" Then
            CompareTable(BackupTables(i))

        End If
    Next
    myDB.Close()
End Sub

Sub CompareTable(ByVal BackupTableName As String)
    Dim OriginalTable As New DataTable
    Dim BackupTable As New DataTable
    Dim ModificationsTable As New DataTable

    Dim myDB = Session("CurrentDB")
    Dim FinalSQLString = "SELECT * FROM [" + BackupTableName + "]"
    Dim myDBCommand = New OleDbCommand(FinalSQLString, myDB)
    'Generate a temporary reader to get the number of cases
    Dim myReader As IDataReader = myDBCommand.ExecuteReader()

    'Dim myColumns = myReader.GetSchemaTable
    'For I = 1 To myColumns.Rows.Count
    '    OriginalTable.Columns.Add(myColumns.Rows(I - 1).Item(0).ToString())
    'Next I
    BackupTable.Load(myReader)

    Dim OriginalTableName = Left(BackupTableName, Len(BackupTableName) - 6)
    Dim FinalSQLString2 = "SELECT * FROM [" + BackupTableName + "]"
    Dim myDBCommand2 = New OleDbCommand(FinalSQLString, myDB)
    'Generate a temporary reader to get the number of cases
    Dim myReader2 As IDataReader = myDBCommand.ExecuteReader()
    OriginalTable.Load(myReader2)

    'Dim myGrid As New GridView
    'myGrid.DataSource = OriginalTable
    'myGrid.DataBind()
    'Me.form1.Controls.Add(myGrid)

    'Dim myGrid2 As New GridView
    'myGrid2.DataSource = BackupTable
    'myGrid2.DataBind()
    'Me.form1.Controls.Add(myGrid2)


    For i = 0 To OriginalTable.Rows.Count - 1
        For t = 0 To OriginalTable.Columns.Count - 1

        Next
    Next
End Sub

End Class

Я использую следующий код VBA для переименования таблиц резервной базы данных в «tablebackup»

Private Sub Command0_Click()
Dim tdf As TableDef

For Each tdf In CurrentDb.TableDefs
If Left(tdf.Name, 4) <> "MSys" Then
  tdf.Name = tdf.Name & "backup"
End If
Next

End Sub

1 Ответ

1 голос
/ 23 декабря 2010

Можете ли вы добавить поле ModifiedOn для каждой таблицы и извлечь строки, которые были изменены с последнего дня.Вы можете сравнить измененные (те, которые существуют в резервной копии) и записать все новые (те, которых нет).

...