Sql 循环遍历范围并插入唯一数据以访问数据库

Sql 循环遍历范围并插入唯一数据以访问数据库,sql,database,loops,ms-access,ado,Sql,Database,Loops,Ms Access,Ado,希望你们今天过得愉快。我正在从一个打开的工作簿循环一个范围,对于每个循环,我需要检查详细信息是否在我的access表中,如果没有,则插入详细信息。我有以下代码,我认为应该可以很好地工作,但似乎excel在每个循环中打开和关闭记录集时都有问题。我想这就是问题所在,因为它不会抛出任何异常,只是停止响应,我必须关闭工作簿 它自己的循环工作得很好,因为我在没有SQL部分的情况下进行了测试,它在不到1分钟的时间内完成了超过10万条记录。在此方面的任何帮助都将不胜感激 With dbConnection

希望你们今天过得愉快。我正在从一个打开的工作簿循环一个范围,对于每个循环,我需要检查详细信息是否在我的access表中,如果没有,则插入详细信息。我有以下代码,我认为应该可以很好地工作,但似乎excel在每个循环中打开和关闭记录集时都有问题。我想这就是问题所在,因为它不会抛出任何异常,只是停止响应,我必须关闭工作簿

它自己的循环工作得很好,因为我在没有SQL部分的情况下进行了测试,它在不到1分钟的时间内完成了超过10万条记录。在此方面的任何帮助都将不胜感激

With dbConnection
        .Provider = "Microsoft.ACE.OLEDB.12.0;"
        .ConnectionString = dbConnectionString
        .Open
            ItemsAdded = 0
            dbRecordSet.ActiveConnection = dbConnection
            For i = 1 To DataFile.ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
                oSQL = _
                "Select * From " & TableName & " Where CompanyName = """ & Trim(DataRange(i, 1)) & """" & _
                " And CommCode = """ & Trim(DataRange(i, 2)) & """;"
                dbRecordSet.Open oSQL, dbConnection

                If dbRecordSet.EOF = True Then 'Does not exist in the access database so add it
                    dbRecordSet.Close
                    dbConnection.Execute "INSERT INTO [" & SearchType & "Table_" & oYear & "] (CompanyName, CommCode, GoodsDescription, MonthsImported, " & _
                    "AddressLine1, AddressLine2, Town_City, County, PostCode) VALUES " & _
                    "(""" & DataRange(i, 1) & """, """ & DataRange(i, 2) & """, """ & Replace(DataRange(i, 3), """", "") & """, """ & DataRange(i, 4) & """, """ & _
                    Replace(DataRange(i, 5), """", "") & """, """ & DataRange(i, 6) & """, """ & DataRange(i, 7) & """, """ & DataRange(i, 8) & """, """ & DataRange(i, 9) & """);"

                    ItemsAdded = ItemsAdded + 1
                Else: dbRecordSet.Close
                End If
            Next i
        .Close
    End With

我相信
dbRecordSet.Close
应该在
Else:
语句中,如果您想在插入查询发生后将其关闭,请参见Hi Fishing code。谢谢你的发帖。我在else语句“else:dbRecordSet.Close”中有rs结束符,所以我认为这没问题。