Sql Excel VBA和ADO-关闭对象时不允许执行错误3704操作

Sql Excel VBA和ADO-关闭对象时不允许执行错误3704操作,sql,vba,excel,ado,Sql,Vba,Excel,Ado,我试图将excel电子表格中存储的数据添加到access数据库中。但是,在添加每一行之前,我想检查该行数据是否已经存在于数据库中,如果已经存在,请跳过该行并移动到下一行。尝试避免重复数据 从一个完全空白的数据库中,我的代码输入前两行数据,然后抛出错误 关闭对象时不允许执行错误3704操作 当我停止并再次运行代码时,接下来的两行数据被输入,错误再次弹出!等等 我是ADO的新手,不知道是什么问题,所以非常感谢您的帮助 以下是完整的代码块: 函数GetDb()作为ADODB.Connection Se

我试图将excel电子表格中存储的数据添加到access数据库中。但是,在添加每一行之前,我想检查该行数据是否已经存在于数据库中,如果已经存在,请跳过该行并移动到下一行。尝试避免重复数据

从一个完全空白的数据库中,我的代码输入前两行数据,然后抛出错误

关闭对象时不允许执行错误3704操作

当我停止并再次运行代码时,接下来的两行数据被输入,错误再次弹出!等等

我是ADO的新手,不知道是什么问题,所以非常感谢您的帮助

以下是完整的代码块:

函数GetDb()作为ADODB.Connection Set GetDb=New ADODB.Connection GetDb.Open“Provider=Microsoft.ACE.OLEDB.12.0;数据源=“&GetPath&;” 端函数 函数GetPath()作为字符串 GetPath=ThisWorkbook.Path&“\db.accdb” 端函数
Sub AddToDBSTACKFB()
“第一次尝试
作为ADODB.连接的Dim adoConn
Dim ADODCOMM作为新的ADODB.命令
Dim adoRS作为记录集
将记录行变长,最后一行变长
Dim OrderID为字符串,Site为字符串,ProductName为字符串
Dim ShipTo作为字符串,ShipVia作为字符串,数量作为字符串,电子邮件作为字符串
设置adoConn=GetDb
Lastrow=Sheet1.Cells(Rows.Count,1).End(xlUp).Row
与adoComm
Set.ActiveConnection=adoConn
.CommandText=“选择[OrderID]、[Site]、[Product Name]、[Ship To]、[Ship Via]、[Quantity]、[Email]”和_
“来自数据”和_
“其中,[OrderID]=?和[Site]=?和[Product Name]=?和[Ship To]=?和[Ship Via]=?和[Quantity]=?和[Email]=?”
.Parameters.Append adoComm.CreateParameter(名称:=“OrderID”,类型:=adVarChar,大小:=255)
.Parameters.Append adoComm.CreateParameter(名称:=“站点”,类型:=adVarChar,大小:=255)
.Parameters.Append adoComm.CreateParameter(名称:=“产品名称”,类型:=adVarChar,大小:=255)
.Parameters.Append adoComm.CreateParameter(名称:=“发货地”,类型:=adVarChar,大小:=255)
.Parameters.Append adoComm.CreateParameter(名称:=“发货方式”,类型:=adVarChar,大小:=255)
.Parameters.Append adoComm.CreateParameter(名称:=“数量”,类型:=adDouble)
.Parameters.Append adoComm.CreateParameter(名称:=“电子邮件”,类型:=adVarChar,大小:=255)
'一次一行遍历工作表上的所有记录
对于RecordRow=2到Lastrow
OrderID=Sheet1.Cells(RecordRow,1).Value
Site=Sheet1.单元格(记录行,2).值
ProductName=Sheet1.Cells(RecordRow,3).Value
ShipTo=Sheet1.单元格(记录行,4).值
ShipVia=Sheet1.单元格(记录行,5).值
数量=表1.单元格(记录行,6).值
Email=Sheet1.单元格(RecordRow,7).值
.Parameters(0).Value=OrderID
.参数(1).值=场地
.Parameters(2).Value=ProductName
.参数(3).值=ShipTo
.参数(4).值=Shippvia
.参数(5).值=数量
.参数(6).值=电子邮件
'首先,检查记录是否已在数据库中
'如果不是,则将该行数据输入数据库
设置adoRS=adoComm.Execute

如果是(adoRS.EOF和adoRS.BOF),则在记录集打开时更改记录集的基础命令对象。使用另一个命令对象插入数据。与代码不工作的原因无关,但。。。作为一个数据库员,我必须大声说出来。如果您正试图停止数据复制,最好在表上设置一个唯一的约束。感谢各位的回复。ckuhn203,除了上述字段之外,数据库还有一个自动递增的主键。复制的数据将是excel表本身上的数据。有几个人更新它,所以我不希望同一行数据被输入两次。格斯伯格,我来试试:)。ie创建另一个命令对象,为其分配自己的commandtext等。对吗?是的,对。重要的一点是为ActiveConnection分配相同的连接。主键是唯一的约束不是一回事。尽管如此,主键是唯一的约束。帮自己一个忙,考虑在桌子上加一个。