2014-07-09 1 views
1

ADODB 연결을 통해 데이터베이스에서 가장 최신 레코드 집합을 다운로드하는 Excel 스프레드 시트가 있습니다. 대부분의 최신 기록은 가져 오기 날짜/시간을 기준으로합니다. 정보가 Excel 스프레드 시트에로드되면 분석가/최종 사용자가 원하는대로 레코드를 업데이트해야합니다. 애널리스트가 제출 버튼을 클릭하면 공유 드라이브에있는 MS Access 2007 데이터베이스의 동일한 테이블에 수정 된 레코드 만 APPEND 할 수 있습니다. 데이터베이스는 각 레코드에 대해 가져 오기 날짜/시간을 자동으로 추가합니다.Excel VBA : APPEND 만 Excel에서 Access로 액세스 수정

내 문제 : 내가 원하는 새로 추가 된 레코드을 첨부하십시오. 따라서 나는 언제 업데이트되었는지에 대한 기록을 남길 것이다. 현재 오늘 날짜/시간 스탬프를 포함하면서 전체 레코드 집합을 MS Access 2007에 추가하고 있습니다. 이로 인해 다른 타임 스탬프가있는 중복 레코드가 발생합니다.

아래 코드는 현재 프로세스를 나타냅니다. 공용 변수가 있습니다.

Private Sub db_CodeAmendment_Upload 

    Dim cnn As ADODB.Connection 
    Dim rst As ADODB.Recordset 
    Dim i, j, rw, co As Long 
    Dim sh As Worksheet 
    Set cnn = New ADODB.Connection 
    Set rst = New ADODB.Recordset 

    Sheets("sCodeMatrix").Visible = True 

    ThisWorkbook.Worksheets("sCodeMatrix").AutoFilter.Sort.SortFields.Clear 

     For Each sh In Worksheets 
      If sh.Name <> "sCodeMatrix" Then sh.Visible = xlSheetHidden 
     Next 

    Sheets("sCodeMatrix").Select 
    Sheets("sCodeMatrix").Activate 

    rw = Range("A500").End(xlUp).Row 
    co = Range("CZ1").End(xlToLeft).Column 


    With cnn 
     .Provider = "Microsoft.ACE.OLEDB.12.0" 
     .Open TARGET_DB 
    End With 

    rst.CursorLocation = adUseServer 
    rst.Open Source:="tblCodeMatrix", ActiveConnection:=cnn, CursorType:=adOpenDynamic, LockType:=adLockOptimistic, Options:=adCmdTable 

    'Load all records from Excel to Access.' 
    For i = 2 To rw 
     rst.AddNew 
     For j = 1 To co 
      rst(Cells(1, j).Value) = Cells(i, j).Value 
     Next j 
     rst.Update 
    Next i 

    ' Close the connection ' 
    On Error Resume Next 
    rst.Close 
    cnn.Close 
    Set rst = Nothing 
    Set cnn = Nothing 

End Sub 

답변

1

당신은 당신의 질문의 특정 질문이없는, 그래서 나는이 작업을 수행하는 방법에 대한 일반적인 지침을 요청한다고 가정합니다. 스프레드 시트 행

  • 하여 기록이 변경된 경우 감지 을 통해

    • 루프 : 나는 다음과 같은 알고리즘을 제안합니다.
    • 변경된 경우 :
      • Access에 새로운 레코드로 추가하십시오.

      몇 가지 옵션

는 레코드가 변경되었는지 여부를 결정하기 위해 마음에 온 :

  • 쿼리를 기록을 Access 데이터베이스에서 현장으로 그것을 필드를 비교하거나
  • Excel 시트에 데이터를 삽입 할 때 을 두 번 가져 오려면 (한 번 보이는 영역 한 번은 숨겨진 칼럼에 들어가서 오른쪽으로 나아 간다). 이렇게하면 Excel 셀을 비교하여 무언가가 변경되었는지 여부를 확인할 수 있습니다.
+0

데이터가 정리되어있는 한 Excel 스프레드 시트를 Access에 연결하기는 쉽습니다. 필드/열을 비교하면 간단한 쿼리 문제가됩니다. – Fionnuala

+0

@Heinzi, 통찰력에 감사드립니다 ... 루프를 수행하고 변경 사항을 감지하는 방법을 일반 코드로 제공 할 수 있습니까? 내가 고칠 수있는 높은 수준의 무언가. 나는 양쪽 끝의 모든 열을 연결하고 dcount를 수행한다고 생각했습니다. 카운트가 0 일 때, 나는 그 레코드를 추가 할 것이다. 하지만 코딩을 시작하는 법을 모르겠습니다. – Edwin

+0

@Remou, 유효한 포인트를 가져 왔지만이 스프레드 시트는 여러 사용자에게 배포됩니다. 링크가있는 스프레드 시트를 열면 데이터베이스가 잠 깁니다. 따라서 다른 사용자는 업데이트를 푸시 할 수 없습니다. – Edwin