0

次の (dbo.DatePart2()) SQL 関数があります。

ALTER function [dbo].[DatePart2] (@date datetime)
returns datetime
as 
begin

return(cast(CONVERT(varchar(12), @date, 101) AS datetime))
end

VBAを使用してMicrosoft Accessからこの関数を呼び出す必要があり、次のことを試しました:

Function InsertWiegen()

Dim conn As ADODB.Connection
Dim rcs As ADODB.Recordset
Dim strSQL As String
Dim strDel As String
Dim temp As String
Dim y As Date

Set conn = CurrentProject.Connection
temp = Format(Now(), "MM.dd.yyyy")
y = CStr(temp)

'strSQL = "INSERT INTO dbo.test ([a],[b]) SELECT * FROM dbo.test2 WHERE c = '" & y & "'"
'strSQL = "INSERT INTO dbo.test ([a], [b]) VALUES ('" & y & "', 3)"    

strSQL = "select dbo.DatePart2('" & temp & "')"
Debug.Print temp
Set rcs = conn.Execute(strSQL)
Set rcs = Nothing

conn.Close

Exit Function

End Function

問題: エラーがスローされます:

「char データ型を datetime データ型に変換すると、範囲外の datetime 値になりました。」

ストアド プロシージャは SQL Server Management Studio では完全に機能していますが、Microsoft Access ではエラーが発生します。誰かが問題の原因を突き止めることができれば、本当に感謝しています..

4

1 に答える 1

0

別の方法で問題を解決しました:

strSQL = "INSERT INTO dbo.wiegen ([Tag], [Aufträge_anzahl], [Wiegeraum]) 
SELECT left([BUCHUNG_BIS],11) 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 left([BUCHUNG_BIS],11)= left(GETDATE(), 11) 
group by left([BUCHUNG_BIS],11), [Kurztext]"

datepart2 関数を sql 組み込みの left() 関数に置き換えたところ、エラーなしで正常に実行されるようになりました。

于 2013-08-14T12:38:01.277 に答える