Just nu i M3-nätverket
Gå till innehåll

AAAAAAARRRGGGGHHHHH


Magnus Gladh

Rekommendera Poster

Jag blir helt knäpp!!!

 

Har gjort en SP som skall klara av en sökning och samtidigt dela upp i sidor.

 

CREATE PROCEDURE [DBO].[SP_SEARCH_SUBTITLES] 
	@where	VARCHAR(400),
	@page		INT,
	@recPerPage	INT
AS

DECLARE @FirstRec int, @LastRec int
SELECT @FirstRec = (@page - 1) * @recPerPage
SELECT @LastRec = (@page * @recPerPage + 1)

-- create temporary tables
CREATE TABLE #Temp (
	ID			BIGINT		IDENTITY(1,1),
	SubtitleID		BIGINT,
	TitlesName		VARCHAR(100),
	LanguageName		VARCHAR(50),
	FormatName		VARCHAR(50),
	NumberOfCD		TINYINT,
	UserName		VARCHAR(50),
	Grade			TINYINT,
	NumberOfGrade		BIGINT,
	SubtitleDate		DATETIME
)

-- Fill the temporary table with data	
INSERT INTO #Temp (SubtitleID, TitlesName, LanguageName, FormatName, NumberOfCD, UserName, Grade, NumberOfGrade, SubtitleDate)
EXEC("SELECT tblSubtitleDownloaded.[ID], tblSubtitleTitles.[Name], .tblLanguage.[Name] ,  tblFormat.[Name] , tblSubtitleUploaded.NumberOfCD, tblUser.UserName, AVG(tblSubtitleDownloaded.Grade) AS Grade,  COUNT(tblSubtitleDownloaded.Grade) AS NumberOfGrade, tblSubtitleUploaded.[Date]
	FROM	tblSubtitleDownloaded INNER JOIN
                      tblSubtitleUploaded ON tblSubtitleDownloaded.[ID] = dbo.tblSubtitleUploaded.[ID] INNER JOIN
                      tblUser ON tblSubtitleUploaded.UserId = tblUser.[ID] INNER JOIN
                      tblLanguage ON tblSubtitleUploaded.LanguageId = tblLanguage.[ID] INNER JOIN
                      tblFormat ON tblSubtitleUploaded.FormatId = tblFormat.[ID] INNER JOIN
                      tblSubtitleTitles ON tblSubtitleUploaded.TitleId = tblSubtitleTitles.[ID]
	GROUP BY tblSubtitleDownloaded.[ID], tblSubtitleTitles.[Name], tblLanguage.[Name], tblFormat.[Name], tblSubtitleUploaded.NumberOfCD, 
                      tblUser.UserName, tblSubtitleUploaded.[Date], tblFormat.[ID], tblLanguage.[ID]   
	" + @where)

-- Now, return the set of paged records, plus, an indiciation of we have more records or not!
SELECT *, MoreRecords =  (SELECT COUNT(1)  FROM #Temp TI WHERE TI.ID >= @LastRec) 
	FROM #Temp
	WHERE ID > @FirstRec AND ID < @LastRec
GO

kör jag den i Query Analysern fungerar den as bra!! Får tillbaka precis det jag vill ha.

 

Om jag däremot kör den från ASP via Command objektet så går den igen men mitt recordset vägras öppna, alltså inte bara tomt utan det är stängt.

 

Kör med

   oCmd.CommandText = "SP_SEARCH_SUBTITLES"
   oCmd.CommandType = adCmdStoredProc
   
   oCmd.Parameters.Append oCmd.CreateParameter("where", adVarChar, adParamInput, 400, sSQL)
   oCmd.Parameters.Append oCmd.CreateParameter("pageNo", adInteger, adParamInput, , oasp.Request.Form("pageNo"))
   oCmd.Parameters.Append oCmd.CreateParameter("recPerPage", adInteger, adParamInput, , oasp.Request.Form("recPerPage"))
   
   Set oRs = oCmd.Execute

Och när jag sedan testar om det finns data i Recordsetet med

if ors.eof then
så får jag felmeddelandet:

3704 - Operation is not allowed when the object is closed

Jag har gjort exakt samma på andra SP och då fungerar det, så något måste vara fel i min SP men vad och varför fungerar det i Query Analyzern...

 

----------------------------------------

- Magnus

- Nemo Saltat Sobrius

Länk till kommentar
Dela på andra webbplatser

Ditt Insert-statement skapar ett tomt recordset. Du får alltså två recordset tillbaka till ASP där det andra innehåller resultatet av select-satsen.

 

För att insert inte skall ge upphov till något recordset så lägg in

 

SET NOCOUNT ON 'först i proceduren

 

och

 

SET NOCOUNT OFF 'innan select

 

Länk till kommentar
Dela på andra webbplatser

hmmm...

 

Det hjälpte inte, fast när jag byte från grid till text i Query analyzern så fick jag med detta meddelande, som jag missat innan..

 

Warning: Null value is eliminated by an aggregate or other SET operation.

 

----------------------------------------

- Magnus

- Nemo Saltat Sobrius

 

 

Länk till kommentar
Dela på andra webbplatser

Glöm det hittade problemet....

 

Nu fungerar det... Det finns en Gud och han är god...(iallafall just nu)

 

----------------------------------------

- Magnus

- Nemo Saltat Sobrius

 

 

Länk till kommentar
Dela på andra webbplatser

MattiasCanberger

Det finns ingen vits med att sätta NOCOUNT OFF innan select satsen.

 

Det SET NOCOUNT ON gör är att se till så att antal påverkade rader i en operation ej returneras i resultatet.

 

Du kan alltså sätta NOCOUNT ON i början av varje sp och sedan strunta i det i resten av sp'n. Dina select satser kommer returneras som dom ska.

 

/Mattias

 

 

 

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...