运行 来自 Access 的存储过程 VBA
Run Stored Procedure From Access VBA
我一直收到
的错误
Conversion failed when converting date and/or time from character string.
这是我正在使用的 vba 以及我的 sql 服务器存储过程语法。我应该改变什么才能使这个 运行 成功?
Private Sub btnRunStoredProc_Click()
Dim cmd As ADODB.Command, startdate As String, enddate As String
Set cmd = New ADODB.Command
startdate = "'" & Me.txtStartDate & "'"
enddate = "'" & Me.txtEndDate & "'"
cmd.ActiveConnection = "Provider=sqloledb;Server=Server;Database=DB;Trusted_Connection=yes;"
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "runstoredproc"
cmd.Parameters.Append cmd.CreateParameter("@startdate", adVarChar, adParamInput, 255, startdate)
cmd.Parameters.Append cmd.CreateParameter("@enddate", adVarChar, adParamInput, 255, enddate)
cmd.Execute
End Sub
ALTER Procedure [dbo].[runstoredproc]
(
@startdate varchar(100)
,@enddate varchar(100)
)
As
Select * from helper where hiredate between @startdate And @enddate
考虑使用 Format()
将 MS Access 日期转换为字符串,因为连接引号不起作用。此外,使用 CONVERT()
将 varchar 字符串转换为 SQL 服务器中的日期。格式 YYYY-MM-DD
用于不依赖于月份和日期的文化设置。
VBA
Private Sub btnRunStoredProc_Click()
Dim cmd As ADODB.Command, startdate As String, enddate As String
Set cmd = New ADODB.Command
startdate = Format(Me.txtStartDate, "YYYY-MM-DD")
enddate = Format(Me.txtEndDate, "YYYY-MM-DD")
With cmd
.ActiveConnection = "Provider=sqloledb;Server=Server;Database=DB;Trusted_Connection=yes;"
.CommandType = adCmdStoredProc
.CommandText = "runstoredproc"
.Parameters.Append .CreateParameter("@startdate", adVarChar, adParamInput, 255, startdate)
.Parameters.Append .CreateParameter("@enddate", adVarChar, adParamInput, 255, enddate)
.Execute
End With
Set cmd = Nothing
End Sub
TSQL
ALTER Procedure [dbo].[runstoredproc]
(
@startdate varchar(100)
,@enddate varchar(100)
)
As
SELECT * FROM [helper]
WHERE hiredate BETWEEN CONVERT(DATE, @startdate) AND CONVERT(DATE, @enddate)
为什么你的参数不能是 date/time 数据类型? hiredate
列的数据类型是什么?这对我一直有效:
Private Sub btnRunStoredProc_Click()
Dim cmd As ADODB.Command, startdate As Date, enddate As Date
Set cmd = New ADODB.Command
startdate = CVDate(Me.txtStartDate)
enddate = CVDate(Me.txtEndDate)
cmd.ActiveConnection = "Provider=sqloledb;Server=Server;Database=DB;Trusted_Connection=yes;"
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "runstoredproc"
cmd.Parameters.Append cmd.CreateParameter("@startdate", adDBTimeStamp, adParamInput, , startdate)
cmd.Parameters.Append cmd.CreateParameter("@enddate", adDBTimeStamp, adParamInput, , enddate)
cmd.Execute
End Sub
ALTER Procedure [dbo].[runstoredproc]
(
@startdate datetime
,@enddate datetime
)
As
Select * from helper where hiredate between @startdate And @enddate
我一直收到
的错误Conversion failed when converting date and/or time from character string.
这是我正在使用的 vba 以及我的 sql 服务器存储过程语法。我应该改变什么才能使这个 运行 成功?
Private Sub btnRunStoredProc_Click()
Dim cmd As ADODB.Command, startdate As String, enddate As String
Set cmd = New ADODB.Command
startdate = "'" & Me.txtStartDate & "'"
enddate = "'" & Me.txtEndDate & "'"
cmd.ActiveConnection = "Provider=sqloledb;Server=Server;Database=DB;Trusted_Connection=yes;"
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "runstoredproc"
cmd.Parameters.Append cmd.CreateParameter("@startdate", adVarChar, adParamInput, 255, startdate)
cmd.Parameters.Append cmd.CreateParameter("@enddate", adVarChar, adParamInput, 255, enddate)
cmd.Execute
End Sub
ALTER Procedure [dbo].[runstoredproc]
(
@startdate varchar(100)
,@enddate varchar(100)
)
As
Select * from helper where hiredate between @startdate And @enddate
考虑使用 Format()
将 MS Access 日期转换为字符串,因为连接引号不起作用。此外,使用 CONVERT()
将 varchar 字符串转换为 SQL 服务器中的日期。格式 YYYY-MM-DD
用于不依赖于月份和日期的文化设置。
VBA
Private Sub btnRunStoredProc_Click()
Dim cmd As ADODB.Command, startdate As String, enddate As String
Set cmd = New ADODB.Command
startdate = Format(Me.txtStartDate, "YYYY-MM-DD")
enddate = Format(Me.txtEndDate, "YYYY-MM-DD")
With cmd
.ActiveConnection = "Provider=sqloledb;Server=Server;Database=DB;Trusted_Connection=yes;"
.CommandType = adCmdStoredProc
.CommandText = "runstoredproc"
.Parameters.Append .CreateParameter("@startdate", adVarChar, adParamInput, 255, startdate)
.Parameters.Append .CreateParameter("@enddate", adVarChar, adParamInput, 255, enddate)
.Execute
End With
Set cmd = Nothing
End Sub
TSQL
ALTER Procedure [dbo].[runstoredproc]
(
@startdate varchar(100)
,@enddate varchar(100)
)
As
SELECT * FROM [helper]
WHERE hiredate BETWEEN CONVERT(DATE, @startdate) AND CONVERT(DATE, @enddate)
为什么你的参数不能是 date/time 数据类型? hiredate
列的数据类型是什么?这对我一直有效:
Private Sub btnRunStoredProc_Click()
Dim cmd As ADODB.Command, startdate As Date, enddate As Date
Set cmd = New ADODB.Command
startdate = CVDate(Me.txtStartDate)
enddate = CVDate(Me.txtEndDate)
cmd.ActiveConnection = "Provider=sqloledb;Server=Server;Database=DB;Trusted_Connection=yes;"
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "runstoredproc"
cmd.Parameters.Append cmd.CreateParameter("@startdate", adDBTimeStamp, adParamInput, , startdate)
cmd.Parameters.Append cmd.CreateParameter("@enddate", adDBTimeStamp, adParamInput, , enddate)
cmd.Execute
End Sub
ALTER Procedure [dbo].[runstoredproc]
(
@startdate datetime
,@enddate datetime
)
As
Select * from helper where hiredate between @startdate And @enddate