excel - 收到错误“对象关闭时不允许操作”错误。寻找解决方案
问题描述
每次我运行我的 vba 文件时,我都会收到运行时错误 3704,对象关闭时不允许操作。试图修复这个错误。
搞乱了连接类型和其他参数类型,但无济于事。该代码的目标是成为业务将数据输入 SQL 数据库的前端手段。企业不希望为此离开 excel。vba 代码中调用的存储过程将数据输入到 SQL 数据库中。我已经验证了存储过程在 SQL 中的工作原理。vba 代码的目标是调用存储的 proc 并将数据导入 sql 数据库。我已经用一个测试数据库和一个 var 完成了这个。现在我有 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 函数。
推荐阅读
- vb.net - 重新打开表单后datagridview CurrentCell ColumnIndex没有值
- python - vscode Python交互中的交互模式
- python - 如何通过 Slides API 修改 Google 幻灯片演示文稿的纵横比?
- c# - datagridview 的条件排序
- css - ngx-material-timepicker:iPhone css 忽略“位置:固定”
- sql - 尽管使用了别名,但我从内部查询中找不到列
- vba - 如果单击按钮时的语句
- html - CSS Grid:div 沿着列而不是行展开
- javascript - 如何使用 Javascript 创建电子邮件事件
- python - 如何将特定字符放置在文件中的特定位置?