花了很多小时试图解决此问题后,我不知道如何继续。我试图将电子表格中的数据添加到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