J'ai une procédure stockée SQL Server (dbo.WiegenMain
) comme ci-dessous:Appel SQL procédure stockée à partir d'Access
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
Je veux appeler cette procédure stockée dans Microsoft Access en utilisant VBA, j'ai essayé ce qui suit:
premier essai:
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
Deuxième essai:
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() Fonction:
ALTER function [dbo].[DatePart2] (@date datetime)
returns datetime
as
begin
return(cast(CONVERT(varchar(12), @date, 101) AS datetime))
end
Problème: Les deux méthodes donnent l'erreur -
« La conversion d'un type de données char à un type de données datetime a donné lieu à un hors -range datetime value. '
La procédure stockée fonctionne parfaitement dans SQL Server Management Studio, mais génère une erreur dans Microsoft Access. Le strDel
fonctionne correctement, il supprime les enregistrements de la table de base de données avec succès, le problème est avec la requête strSQL. J'apprécierais vraiment, si quelqu'un peut savoir ce qui cause le problème ..
Pas le problème ici, mais vous avez un double devis supplémentaire dans votre instruction SELECT lors de votre 1er essai, juste avant l'instruction GROUP BY. Je pense que la double citation juste avant les besoins de paren enlevé. – APrough
Merci, j'ai supprimé ceux-ci, mais toujours le même problème .. –
BUCHUNG_BIS est un type de données datetime? – APrough