每次运行vba文件时,都会收到运行时错误3704,当对象关闭时,不允许进行操作。试图解决此错误。
缺少连接类型和其他参数类型,但无济于事。该代码的目标是成为企业将数据输入SQL数据库的前端手段。企业不希望为此而离开Excel。在vba代码中调用的存储的proc将数据输入到SQL数据库中。我已经验证了存储的proc在SQL中可以工作。 vba代码的目标是调用存储的proc并将数据导入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。
答案 0 :(得分:0)
尽管没有数据导入到excel中,但我还是在代码中包含了记录集。在蒂姆·威廉姆斯(用户: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
我没有清除D3中用于PK的数据,我具有一个vba功能,该功能可以自动递增主键。