Sql server 从VBA调用存储过程
我对SQL和VBA非常陌生,我在SQL Server中编写了以下查询:Sql server 从VBA调用存储过程,sql-server,excel,vba,Sql Server,Excel,Vba,我对SQL和VBA非常陌生,我在SQL Server中编写了以下查询: ALTER PROCEDURE SP_insert_search_archive @IP_Address VARCHAR(20), @DT VARCHAR(30), @search_word VARCHAR(50), @search_time TIME AS INSERT INTO Search_Archive values (@IP_Address, @DT, @sea
ALTER PROCEDURE SP_insert_search_archive
@IP_Address VARCHAR(20),
@DT VARCHAR(30),
@search_word VARCHAR(50),
@search_time TIME
AS
INSERT INTO Search_Archive
values (@IP_Address, @DT, @search_word, @search_time);
现在我想在VBA(Excel)中执行此存储过程:
当我激活宏时,出现以下错误:
运行时错误“-2147217900(80040e14)”:
过程或函数SP_insert_search_archive指定的参数太多
您确定已在“主”数据库中创建此存储过程吗?你能查一下这条线路吗?con.Open“Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=master;Integrated Security=SSPI;Trusted_Connection=Yes;”旁注:存储过程不应使用
sp
前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用sp.
并使用其他东西作为前缀,或者根本不使用前缀!是的,我已经检查过了,SP确实在“master”数据库下。您可以尝试在任何其他数据库中创建存储过程吗?我运行了您的代码,但出现了另一个错误,“将数据类型转换为时间时出错”。ADO和传统的SQLOLEDB提供程序只知道SQL 2000世界中的数据类型,因此您需要将时间值转换为服务器端time
参数的“HH:mm:ss”格式的字符串。
Dim StartTime As Double
Dim SecondsElapsed As Double
Dim con As ADODB.Connection
Dim cmd As ADODB.Command
Dim rs As ADODB.Recordset
Dim par As String
Dim WSP1 As Worksheet
Set con = New ADODB.Connection
Set cmd = New ADODB.Command
Set rs = New ADODB.Recordset
StartTime = Timer
Application.DisplayStatusBar = True
Application.StatusBar = "Contacting SQL Server..."
con.Open "Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=master;Integrated Security=SSPI;Trusted_Connection=Yes;"
cmd.ActiveConnection = con
SecondsElapsed = Round(Timer - StartTime, 4)
Dim search_word As String
search_word = Range("D2").Text
Dim IP As String
IP = GetMyPublicIP
cmd.Parameters.Append cmd.CreateParameter("IP", adVarChar, adParamInput, 20, IP)
cmd.Parameters.Append cmd.CreateParameter("DT", adVarChar, adParamInput, 30, Now)
cmd.Parameters.Append cmd.CreateParameter("Search Word", adVarChar, adParamInput, 50, search_word)
cmd.Parameters.Append cmd.CreateParameter("Search Time", adVarChar, adParamInput, 20, SecondsElapsed)
cmd.CommandText = "SP_insert_search_archive"
Set rs = cmd.Execute(, , adCmdStoredProc)
rs.Close
Set rs = Nothing
Set cmd = Nothing
MsgBox (DT)
con.Close
Set con = Nothing