获取错误 "operation is not allowed when the object is closed" 错误。寻找解决方案
Getting error "operation is not allowed when the object is closed" error. Looking for a solution
每次我 运行 我的 vba 文件,我得到 运行 时间错误 3704,对象关闭时不允许操作。正在尝试修复此错误。
连接类型和其他参数类型乱七八糟,但无济于事。该代码的目标是成为企业将数据输入 SQL 数据库的前端手段。企业不希望为此离开 excel。 vba 代码中调用的存储过程将数据输入到 SQL 数据库中。我已经验证存储过程在 SQL 中有效。 vba 代码的目标是调用存储过程并将数据导入 sql 数据库。我已经用一个测试数据库和一个变量完成了这项工作。现在我有 27 个。试图找到错误。
有 27 个变量,我没有包括所有的变量。我验证了他们都从 excel 中提取了正确的数据。我也让其他人验证参数是 SQL.
中的正确参数
Sub ImportProForma()
Dim rs As ADODB.Recordset
Dim cnSQL As ADODB.Connection
Dim sqlCommand As ADODB.Command, PKprm As Object
Dim PK As Integer
PK = Range("D3").Value
Sheets("UpdateProForma").Select
Set cnSQL = New ADODB.Connection
cnSQL.Open "Provider=SQLOLEDB; Integrated Security = sspi; Initial Catalog = [Database]; Data Source = [Server]"
Set sqlCommand = New ADODB.Command
sqlCommand.ActiveConnection = cnSQL
sqlCommand.CommandType = adCmdStoredProc
sqlCommand.CommandText = "ImportNewEntry"
Set PKprm = sqlCommand.CreateParameter("PrimaryKey", adInteger, adParamInput)
PKprm.Value = PK
sqlCommand.Parameters.Append PKprm
sqlCommand.Parameters("PrimaryKey") = PK
Set rs = New ADODB.Recordset
rs.CursorType = adOpenStatic
rs.LockType = adLockOptimistic
rs.Open sqlCommand
rs.Close
Set rs = Nothing
End Sub
该项目的最终目标是能够将数据导入 SQL 而无需休假 excel。
尽管没有数据导入 excel,我还是在代码中包含了记录集。在 Tim Williams(用户:478884)指出我不需要记录集之后。我删除了 rs 和其他不必要的代码。代码现在显示为:
Sub ImportProForma()
Dim rs As ADODB.Recordset
Dim cnSQL As ADODB.Connection
Dim sqlCommand As ADODB.Command, PKprm As Object
Dim PK As Integer
PK = Range("D3").Value
Sheets("UpdateProForma").Select
Set cnSQL = New ADODB.Connection
cnSQL.Open "Provider=SQLOLEDB; Integrated Security = sspi; Initial Catalog = [Database]; Data Source = [Server]"
Set sqlCommand = New ADODB.Command
sqlCommand.ActiveConnection = cnSQL
sqlCommand.CommandType = adCmdStoredProc
sqlCommand.CommandText = "ImportNewEntry"
Set PKprm = sqlCommand.CreateParameter("PrimaryKey", adInteger, adParamInput)
PKprm.Value = PK
sqlCommand.Parameters.Append PKprm
sqlCommand.Parameters("PrimaryKey") = PK
sqlCommand.Execute
Cells.Range("D5:D55").ClearContents
End Sub
我没有为 PK 清除 D3 中的数据,我有一个 vba 自动递增主键的函数。
每次我 运行 我的 vba 文件,我得到 运行 时间错误 3704,对象关闭时不允许操作。正在尝试修复此错误。
连接类型和其他参数类型乱七八糟,但无济于事。该代码的目标是成为企业将数据输入 SQL 数据库的前端手段。企业不希望为此离开 excel。 vba 代码中调用的存储过程将数据输入到 SQL 数据库中。我已经验证存储过程在 SQL 中有效。 vba 代码的目标是调用存储过程并将数据导入 sql 数据库。我已经用一个测试数据库和一个变量完成了这项工作。现在我有 27 个。试图找到错误。
有 27 个变量,我没有包括所有的变量。我验证了他们都从 excel 中提取了正确的数据。我也让其他人验证参数是 SQL.
中的正确参数Sub ImportProForma()
Dim rs As ADODB.Recordset
Dim cnSQL As ADODB.Connection
Dim sqlCommand As ADODB.Command, PKprm As Object
Dim PK As Integer
PK = Range("D3").Value
Sheets("UpdateProForma").Select
Set cnSQL = New ADODB.Connection
cnSQL.Open "Provider=SQLOLEDB; Integrated Security = sspi; Initial Catalog = [Database]; Data Source = [Server]"
Set sqlCommand = New ADODB.Command
sqlCommand.ActiveConnection = cnSQL
sqlCommand.CommandType = adCmdStoredProc
sqlCommand.CommandText = "ImportNewEntry"
Set PKprm = sqlCommand.CreateParameter("PrimaryKey", adInteger, adParamInput)
PKprm.Value = PK
sqlCommand.Parameters.Append PKprm
sqlCommand.Parameters("PrimaryKey") = PK
Set rs = New ADODB.Recordset
rs.CursorType = adOpenStatic
rs.LockType = adLockOptimistic
rs.Open sqlCommand
rs.Close
Set rs = Nothing
End Sub
该项目的最终目标是能够将数据导入 SQL 而无需休假 excel。
尽管没有数据导入 excel,我还是在代码中包含了记录集。在 Tim Williams(用户:478884)指出我不需要记录集之后。我删除了 rs 和其他不必要的代码。代码现在显示为:
Sub ImportProForma()
Dim rs As ADODB.Recordset
Dim cnSQL As ADODB.Connection
Dim sqlCommand As ADODB.Command, PKprm As Object
Dim PK As Integer
PK = Range("D3").Value
Sheets("UpdateProForma").Select
Set cnSQL = New ADODB.Connection
cnSQL.Open "Provider=SQLOLEDB; Integrated Security = sspi; Initial Catalog = [Database]; Data Source = [Server]"
Set sqlCommand = New ADODB.Command
sqlCommand.ActiveConnection = cnSQL
sqlCommand.CommandType = adCmdStoredProc
sqlCommand.CommandText = "ImportNewEntry"
Set PKprm = sqlCommand.CreateParameter("PrimaryKey", adInteger, adParamInput)
PKprm.Value = PK
sqlCommand.Parameters.Append PKprm
sqlCommand.Parameters("PrimaryKey") = PK
sqlCommand.Execute
Cells.Range("D5:D55").ClearContents
End Sub
我没有为 PK 清除 D3 中的数据,我有一个 vba 自动递增主键的函数。