花了很多小時試圖解決此問題後,我不知道如何繼續。我試圖將電子表格中的數據添加到Access表中,但我不希望表中有任何重複項,並且希望現有行的更新版本替換現有行。我覺得我已經用盡了與互聯網有關的問題。我使用了以下Stack Overflow鏈接(How to check for record by using ID, then if record exists update if not add new record)中的線程來幫助我解決很多問題,但是我對代碼的理解並沒有做到我所需要的。我沒有語法錯誤;但是我的SQL語句(通過確定電子表格數據是否與當前數據庫條目匹配來過濾記錄集)是在數據庫表中每個電子表格條目至少有5個完全相同的副本時返回空記錄集。我完全陷入了這個問題。以下是我的代碼:RecordSet過濾不檢測重複項或修改現有行
Public Sub ADOFromExcelToAccess()
'Variable definition
InputDate = Tracking.Sheets("P&Q Weekly Summary").Range("E3").Value
Call SetDataConnection
Set DataRecordset = New ADODB.Recordset
With DataRecordset
For DataRowCount = 2 To TrackingLastRow
Part_Number = Tracking.Sheets("Operator Data").Range("A" & DataRowCount).Value
Week_Day = Tracking.Sheets("Operator Data").Range("B" & DataRowCount).Value
Weekday_Name = WeekdayName(Weekday(Week_Day))
Quantity = Tracking.Sheets("Operator Data").Range("C" & DataRowCount).Value
Machine = Tracking.Sheets("Operator Data").Range("G" & DataRowCount).Value
'Attempting to find duplicate entry
SQLCmd = "SELECT * FROM Raw_Data WHERE [Part] = '" & Part_Number & "' AND [Day] = " & Week_Day & " AND [Quantity] = " & Quantity & " AND [Machine] = '" & Machine & "';"
.Open Source:=SQLCmd, ActiveConnection:=DBConnection, CursorType:=adOpenDynamic, LockType:=adLockOptimistic, Options:=adCmdText
If (.BOF) Or (.EOF) Then
MsgBox .RecordCount
'No match found; add new record
.AddNew
.Fields("Part") = Part_Number
.Fields("Week") = InputDate
.Fields("Day") = Week_Day
.Fields("Weekday") = Weekday_Name
.Fields("Quantity") = Quantity
.Fields("Adjusted Quantity") = Tracking.Sheets("Operator Data").Range("D" & DataRowCount).Value
.Fields("Sample") = Tracking.Sheets("Operator Data").Range("E" & DataRowCount).Value
.Fields("Rejected") = Tracking.Sheets("Operator Data").Range("F" & DataRowCount).Value
.Fields("Machine") = Machine
.Fields("Cycle") = Tracking.Sheets("Operator Data").Range("H" & DataRowCount).Value
.Fields("Operator") = Tracking.Sheets("Operator Data").Range("I" & DataRowCount).Value
.Update
DataRowCount = DataRowCount + 1
'If current line already exists in database
Else
.Fields("Part") = Part_Number
.Fields("Week") = InputDate
.Fields("Day") = Week_Day
.Fields("Weekday") = Weekday_Name
.Fields("Quantity") = Quantity
.Fields("Adjusted Quantity") = Tracking.Sheets("Operator Data").Range("D" & DataRowCount).Value
.Fields("Sample") = Tracking.Sheets("Operator Data").Range("E" & DataRowCount).Value
.Fields("Rejected") = Tracking.Sheets("Operator Data").Range("F" & DataRowCount).Value
.Fields("Machine") = Machine
.Fields("Cycle") = Tracking.Sheets("Operator Data").Range("H" & DataRowCount).Value
.Fields("Operator") = Tracking.Sheets("Operator Data").Range("I" & DataRowCount).Value
.Update
DataRowCount = DataRowCount + 1
End If
.Close
Next DataRowCount
End With
Set DataRecordset = Nothing
DBConnection.Close
Set DBConnection = Nothing
End Sub
謝謝你的幫助。我非常感謝。
我想嘗試從WHERE子句中刪除條件,然後一次添加一個,並查看在哪一點上,您將丟失所有記錄。那麼至少你可以仔細檢查該字段的數據。 – Rory 2014-09-10 12:22:55
根據Rory的回答,除了我通常使用調試來獲取SQLCmd值,並將其放入SQL視圖中的新查詢中,然後切換回設計視圖。正如Rory所說,刪除每個標準直到找到問題。通常你會在設計視圖中發現問題。 – maxhugen 2014-09-10 13:05:37
謝謝你的建議,它幫助了很多。除了使用WHERE [Day] =「&Week_Day&」之外,所有字段和組合都不會生成重複項。這是我的問題標準。在Access中,[日期]列處於常規日期格式。 Excel電子表格中的相應列也是日期格式。不知何故,這兩列不能識別我猜對方的相應格式。關於具體可能出錯的任何想法?謝謝。 – jlynn303 2014-09-10 14:59:12