[MSSQL_2k & ASP3] - Stored Proc

Pagina: 1
Acties:

  • BasSpruit
  • Registratie: September 2002
  • Laatst online: 09-04-2022
ik ben voor het eerst bezig met een stored procedure, maar ik kom er eigenlijk niet uit, en voorbeeld van andere sites hebben me niet veel goeds opgehaald. (msdn library, google, search functie)

mijn code is als volgt:
ASP:
1
2
3
4
5
6
7
8
9
10
Set cmdSP = Server.CreateObject("ADODB.Command")
cmdSP.ActiveConnection = cnnSimple
cmdSP.CommandText = "Weekstaat"
cmdSP.CommandType = adCmdStoredProc
cmdSP.Parameters.Refresh
cmdSP.Parameters.Append cmdSP.CreateParameter("@Start", adDate, 1, , "16-11-2003")
cmdSP.Parameters.Append cmdSP.CreateParameter("@Stop", adDate, 1, , "22-11-2003")
cmdSP.Parameters.Append cmdSP.CreateParameter("@UserID", adnumeric, 1, , strUserID)
Set rstSimple = Server.CreateObject("ADODB.Recordset")
rstSimple.Open cmdSP


en mijn SP:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE PROCEDURE [Weekstaat] @Start DateTime, @Stop DateTime, @UserID numeric AS

SELECT     ISNULL(SUM(dbo.Registratie.Klant_100) + SUM(dbo.Registratie.Klant_125) + SUM(dbo.Registratie.Klant_160) + SUM(dbo.Registratie.CoNet_100) 
                      + SUM(dbo.Registratie.CoNet_125) + SUM(dbo.Registratie.CoNet_160), 0) AS Uren, dbo.Time.Datum, dbo.Registratie.Gebruikers_Id
FROM         dbo.Time LEFT OUTER JOIN
                      dbo.Registratie ON dbo.Time.Datum = dbo.Registratie.Datum
WHERE     (dbo.Registratie.Type = '2') OR
                      (dbo.Registratie.Type IS NULL)
GROUP BY dbo.Time.Datum, dbo.Registratie.Gebruikers_Id
HAVING      (dbo.Time.Datum >= @Start) AND (dbo.Time.Datum <= @Stop) 
                      AND (dbo.Registratie.Gebruikers_Id = @UserID OR
                      dbo.Registratie.Gebruikers_Id IS NULL)
GO


de waarden heb ik voor een test zelf eerst ingevuld.

ik krijg de volgende foutmelding:
Error Type:
Microsoft OLE DB Provider for SQL Server (0x80004005)
The precision is invalid.
/registratie/test.asp, line 23
kan iemand mij misschien vertellen wat er hier fout gaat?

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Bij een numeric parameter moet je zowel de 'scale' als de 'precision' doorgeven bij het definieren van de parameter

Kijk maar eens in de documentatie bij (denk ik) ADODB.COMMAND.PARAMETERS.APPEND

EDIT:

ah, de numeric parameter in de proc is niet correct gedefinieerd:

NUMERIC (precision, scale) moet je doen

[ Voor 29% gewijzigd door P_de_B op 24-11-2003 16:17 ]

Oops! Google Chrome could not find www.rijks%20museum.nl


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:03
Waarom geef je je datum door aan je SP als string, terwijl hij in je SP als datum gedefinieerd is?

Probeer je SP eerst eens uit in Query Analyzer:
code:
1
EXEC Weekstaat getdate(), getdate(), 1

https://fgheysels.github.io/


  • BasSpruit
  • Registratie: September 2002
  • Laatst online: 09-04-2022
P_de_B schreef op 24 november 2003 @ 16:14:
Bij een numeric parameter moet je zowel de 'scale' als de 'precision' doorgeven bij het definieren van de parameter

Kijk maar eens in de documentatie bij (denk ik) ADODB.COMMAND.PARAMETERS.APPEND

EDIT:

ah, de numeric parameter in de proc is niet correct gedefinieerd:

NUMERIC (precision, scale) moet je doen
ok, ik heb mn SP aangepast, (er staat nu numeric (18,0) )

en in de query analyzer krijg ik het volgende als ik naar een execute script...
DECLARE @RC int
DECLARE @Start datetime
DECLARE @Stop datetime
DECLARE @UserID numeric(18,0)
-- Set parameter values
EXEC @RC = [Maintenance].[dbo].[Weekstaat] @Start, @Stop, @UserID
als ik die laatste regel aanpas (de @Start/@Stop/@UserID) vervang met '16-11-2003', '22-11-2003 en 1, dan werkt het wel.

zijn er nog meer variabelen soorten waar ik zou moeten letten?

[ Voor 39% gewijzigd door BasSpruit op 26-11-2003 13:11 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:03
Nee, in je ASP code.
Daar zul je moeten aangeven van welk type die parameter is, en wat de precision enzo is van die parameter.

https://fgheysels.github.io/


  • BasSpruit
  • Registratie: September 2002
  • Laatst online: 09-04-2022
ik lees net op http://www.4guysfromrolla.com/webtech/111499-1.shtml dat je dit ook allemaal in een SQL query kan zetten?
dim dataConn, sSql, rs, myInt
myInt = 1 'set myInt to the number we want to pass to the stored procedure
set dataConn = Server.CreateObject("ADODB.Connection")
dataConn.Open "DSN=webData;uid=user;pwd=password" 'make connection
sSql = "sp_myStoredProcedure " & myInt
Set rs = dataConn.Execute(sSql) 'execute sql call
dit is een stuk makkelijker denk ik.

en het werkt ook nog... :P

[ Voor 9% gewijzigd door BasSpruit op 26-11-2003 14:08 . Reden: Aanvulling ]

Pagina: 1