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
데이터가 정리되어있는 한 Excel 스프레드 시트를 Access에 연결하기는 쉽습니다. 필드/열을 비교하면 간단한 쿼리 문제가됩니다. – Fionnuala
@Heinzi, 통찰력에 감사드립니다 ... 루프를 수행하고 변경 사항을 감지하는 방법을 일반 코드로 제공 할 수 있습니까? 내가 고칠 수있는 높은 수준의 무언가. 나는 양쪽 끝의 모든 열을 연결하고 dcount를 수행한다고 생각했습니다. 카운트가 0 일 때, 나는 그 레코드를 추가 할 것이다. 하지만 코딩을 시작하는 법을 모르겠습니다. – Edwin
@Remou, 유효한 포인트를 가져 왔지만이 스프레드 시트는 여러 사용자에게 배포됩니다. 링크가있는 스프레드 시트를 열면 데이터베이스가 잠 깁니다. 따라서 다른 사용자는 업데이트를 푸시 할 수 없습니다. – Edwin