-1

2 つの MS ACCESS 2007 データベースを比較するにはどうすればよいですか。両方のデータベースには、同じフィールドと構造を持つ同じテーブルが含まれています。レコード値の違いを検出するには、2 つのデータベース間でレコード値を比較する必要があります。

                           ACCESS 2007 Database1                                

             serial no.     |    NAME         | ADDRESS                   
                1                smith           street 1                                
                2                john            street 4                                  
                3                alix            street 8                   


                           ACCESS 2007 Database2

               serial no.|   NAME     | ADDRESS
               1           smith      street 1              
               2           jhn        stret 4               
               3           alix       street 8

シリアル番号2のレコードと同じように、レコードの違いを検出できるmsアクセス用のVBAコードが必要です。

4

2 に答える 2

0
Option Compare Database

Private Sub Command4_Click()

Dim tablename1, tablename2 As String
tablename1 = Text0.Value
tablename2 = Text2.Value

'On Error GoTo Err_cmdValidateGeneralInfo_Click
Dim F As DAO.Field
Dim rs As DAO.Recordset
Dim rs1 As DAO.Recordset
Set curDB = CurrentDb()
'If Me.DateModified = Date Then
    'Adds new employees to the TT_GeneralInfo table in the FTEI_PhoneBook.mdb - which is used thru out the AP databases.
 '   DoCmd.OpenQuery "qryEmpData_TT_General"

strsql = "Select * from " & tablename1

Set rs = curDB.OpenRecordset(strsql)

strsql1 = "Select * from " & tablename2

   DoCmd.CopyObject , "Unmatched_records", acTable, tablename1
   curDB.Execute "DELETE FROM Unmatched_records"

Set rs1 = curDB.OpenRecordset(strsql1)
    Do Until rs.EOF
      For Each F In rs.Fields
        If rs.Fields(F.Name) <> rs1.Fields(F.Name) Then
          'rs.Edit
          strsql = "Select * into test from " & tablename1 & " where " & F.Name & " = """ & rs.Fields(F.Name) & """"
          DoCmd.RunSQL strsql

          If DCount(F.Name, "test") <> 0 Then
          GoTo append_unmatch

          'appending unmacthed records
append_unmatch:

          strsql2 = "insert into Unmatched_records Select * from test"
          DoCmd.RunSQL strsql2

          'if record doesnt match move to next one
          GoTo Nextrecord
          End If
         ' rs.Fields(F.Name) = rs1.Fields(F.Name)
         ' rs.Update
        End If
      Next F

Nextrecord: 
rs.MoveNext
rs1.MoveNext
    Loop

   'To check whether tables matched or not
    Dim rs2 As DAO.Recordset
    strsql3 = "select * from Unmatched_records"
    Set rs2 = curDB.OpenRecordset(strsql3)
    For Each F In rs2.Fields
    If DCount(F.Name, "Unmatched_records") <> 0 Then
    MsgBox ("The two tables didnt match. Check table test for unmatching reocrds.")
    Else
    MsgBox ("Tables match!")
    End If
Exit Sub
   Next F
    rs2.Close


    End Sub
于 2012-12-28T08:53:47.417 に答える
0

最初に行うべきことは、テーブルの 1 つを他のデータベースにリンクすることです。たとえば、データベース 2 のテーブルをデータベース 1 にリンクします (これにより、両方を一緒にクエリできます)。次に、この単純な例を連結と共に使用して、すべてのフィールドがシリアル番号に基づいてつなぎ合わされた一致:

SELECT T1.*, T2.*
FROM Table1 As T1, Table2 As T2
WHERE T2.[serial no.] = T1.[serial no.]
AND T2.[NAME] & T2.[ADDRESS] <> T1.[NAME] & T1.[ADDRESS]

必要に応じて、独自の条件ごとに列を指定することもできます。注: これは、シリアル番号が一致しない違いのみを探していることを前提としています。一方のテーブルに表示され、もう一方のテーブルには表示されない可能性があるレコードを特定する必要がある場合は、「一致しない」クエリを使用する必要があります。デザイナーがこれをお手伝いするか、ポストバックして回答を更新できます。

于 2012-04-05T08:57:02.517 に答える