2

以下のような 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

2 回目の試行:

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 データ型に変換すると、範囲外の datetime 値になりました。」

ストアド プロシージャは SQL Server Management Studio では完全に機能していますが、Microsoft Access ではエラーが発生します。strDel正常に動作しています。データベース テーブルからレコードが正常に削除されます。問題は strSQL クエリにあります。誰かが問題の原因を突き止めることができれば、本当に感謝しています..

4

3 に答える 3

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 関数を left() 関数に置き換えたところ、エラーなしで正常に実行されるようになりました。

于 2013-08-14T12:33:31.240 に答える
0

日付の SQL ステートメントに挿入するテキストは、国際設定によって異なります。次のように「YYYY-MM-DD」に変換してみてください:-

strDel = "DELETE dbo.wiegen WHERE Tag = '" & format (Date, "YYYY-MM-DD") & "'"
于 2013-08-13T12:35:53.647 に答える