【发布时间】:2013-08-13 11:30:15
【问题描述】:
我有一个 SQL Server 存储过程 (dbo.WiegenMain),如下所示:
ALTER PROCEDURE [dbo].[WiegenMain]
AS
BEGIN
insert into dbo.wiegen (Tag, Aufträge_anzahl, Wiegeraum)
select
dbo.datepart2(BUCHUNG_BIS) as Tag,
count(distinct AUFTRAGSNUMMER), Kurztext as Wiegeraum
from
dbo.tblZEITERFASSUNG
inner join
dbo.tblBELEGUNGSEINHEIT on tblZEITERFASSUNG.ID_BELEGUNGSEINHEIT = tblBELEGUNGSEINHEIT.ID
where
ID_BUCHUNGSART = 9
and ID_BELEGUNGSEINHEIT IN
(SELECT ID_BELEGUNGSEINHEIT
FROM dbo.tblPROZESS_BELEGUNGSEINHEIT
WHERE ID_PROZESS = 3)
and ABSCHLUSS = 1
AND dbo.DatePart2(BUCHUNG_BIS) = dbo.DatePart2(getdate())
group by
dbo.DatePart2(BUCHUNG_BIS), Kurztext
END
我想使用 VBA 在 Microsoft Access 中调用这个存储过程,我尝试了以下方法:
第一次尝试:
Function InsertWiegen()
Dim conn As ADODB.Connection
Dim rcs As ADODB.Recordset
Dim strSQL As String
Dim strDel As String
Set conn = CurrentProject.Connection
strDel = "DELETE dbo.wiegen WHERE Tag = '" & Date & "'"
strSQL = "INSERT INTO dbo.wiegen ([Tag], [Aufträge_anzahl], [Wiegeraum]) " & _
"SELECT dbo.DatePart2([BUCHUNG_BIS]) as [Tag], count(distinct [AUFTRAGSNUMMER]) as [Aufträge_anzahl], Kurztext as [Wiegeraum] from dbo.tblZEITERFASSUNG inner join dbo.tblBELEGUNGSEINHEIT on tblZEITERFASSUNG.ID_BELEGUNGSEINHEIT=tblBELEGUNGSEINHEIT.ID where ID_BUCHUNGSART=9 and ID_BELEGUNGSEINHEIT in (SELECT ID_BELEGUNGSEINHEIT FROM dbo.tblPROZESS_BELEGUNGSEINHEIT WHERE ID_PROZESS = 3) and [ABSCHLUSS]=1 AND dbo.DatePart2([BUCHUNG_BIS])= dbo.DatePart2('" & Date & "') group by dbo.DatePart2([BUCHUNG_BIS]), [Kurztext]"
Set rcs = conn.Execute(strDel)
conn.Execute (strSQL)
Set rcs = Nothing
conn.Close
Exit Function
End Function
第二次尝试:
Function InsertWiegen()
Dim conn As ADODB.Connection
Dim rcs As ADODB.Recordset
Dim cmd As ADODB.Command
Dim strSQL As String
Dim strDel As String
Set conn = CurrentProject.Connection
'Set cmd.ActiveConnection = CurrentProject.Connection
Set cmd = New ADODB.Command
cmd.ActiveConnection = conn
cmd.CommandText = "WiegenMain"
cmd.CommandType = adCmdStoredProc
strDel = "DELETE dbo.wiegen WHERE Tag = '" & Date & "'"
Set rcs = conn.Execute(strDel)
cmd.Execute
Set rcs = Nothing
Set cmd = Nothing
conn.Close
Exit Function
End Function
dbo.datepart2() 函数:
ALTER function [dbo].[DatePart2] (@date datetime)
returns datetime
as
begin
return(cast(CONVERT(varchar(12), @date, 101) AS datetime))
end
问题:两种方法都报错 -
'将 char 数据类型转换为 datetime 数据类型导致 超出范围的日期时间值。'
存储过程在 SQL Server Management Studio 中运行良好,但在 Microsoft Access 中出现错误。 strDel 工作正常,它成功地从数据库表中删除了记录,问题出在 strSQL 查询上。如果有人能找出导致问题的原因,我将不胜感激..
【问题讨论】:
-
这里不是问题,但是在第一次尝试中,您的 SELECT 语句中有一个额外的双引号,就在 GROUP BY 语句之前。我认为需要删除括号之前的双引号。
-
谢谢,我删除了这些,但仍然有同样的问题..
-
BUCHUNG_BIS 是日期时间数据类型吗?
-
是的,它的日期时间数据类型字段
-
您有 BUCHUNG_BIS 字段中的样本吗?您的 datepart2 函数适用于 GetDate()
标签: sql-server ms-access vba