webForumDet fria alternativet

Parameter Problem

14 svar · 287 visningar · startad av SteveP

StevePMedlem sedan mars 2003772 inlägg
#1

expects parameter '@Serial', which was not supplied.
Vilket jag kan förstå eftersom jag inte skickar med den i min "strSQL". Men i min SP så sätts @Serial såhär

SELECT @Serial = coalesce(max(Serial),0) + 1

Så spelar det nån roll vilket värde jag skickar med @Serial som ?
Eller kommer det värdet skrivas över genom SP'n som plockar ut det högsta värdet och plussar på "1" ?

Så det jag undrar är vilket värde jag ska ha på @Serial när jag skickar med det till SP'n

Dim ObjRs
	Dim ObjConn
	Dim strSQL
	
	Set ObjConn = Server.CreateObject("ADODB.Connection")
	Set ObjRs = Server.CreateObject("ADODB.RecordSet")
	ObjConn.Open Connect_String()
	
	strSQL = "SpPostListData_Insert " _
				& VarContactID
				
	ObjConn.Execute strSQL, , 128
	
	ObjRs.Close
	ObjConn.Close
	Set ObjRs = Nothing
	Set ObjConn = Nothing
CREATE PROCEDURE spPostListData_Insert
	
	@ContactID		INT,
	@Serial			INT
	
AS

BEGIN
BEGIN TRANSACTION

SELECT @Serial = coalesce(max(Serial),0) + 1

FROM tblPostList

WITH (holdlock)
WHERE ContactID = @ContactID

INSERT INTO tblPostList
	(
	ContactID,
	Serial
	)

VALUES 
	(
	@ContactID,
	@Serial
	)

COMMIT
END
GO
@ndersMedlem sedan juni 200032 969 inlägg
#2

Jag förstår inte varför du har den med som parameter om du inte ska skicka in någonting i den? Så här hade jag gjort:

CREATE PROCEDURE spPostListData_Insert
	
	@ContactID		INT
AS

DECLARE
	@Serial			INT
-- ....................

Mvh

StevePMedlem sedan mars 2003772 inlägg
#3

Det va ju lite mer logiskt.
Tack

tonyhMedlem sedan okt. 2002107 inlägg
#4

Men om...

...du av någon orsak vill ha valmöjligheten att skicka med en parameter till din procedur så kan du ju sätta ett defautvärde på @serial variabeln...

Men om jag förstått det korrekt så vill du manipulera variabeln du får in

SELECT @Serial = coalesce(max(Serial),0) + 1
-- Kanske borde skrivas
SELECT @Serial = coalesce(max(@Serial),0) + 1

Vad är det du försöker göra...

StevePMedlem sedan mars 2003772 inlägg
#5

Nej det borde väl inte skrivas

SELECT @Serial = coalesce(max(@Serial),0) + 1

Eftersom (max(Serial)
är kollumnen man plockar.

StevePMedlem sedan mars 2003772 inlägg
#6

Som @nders visade var correct.

Det jag ville göra var att plockat ut det högsta värdet i "Serial" kolumnen och plussa på 1

Tack ändå tonyh

StevePMedlem sedan mars 2003772 inlägg
#7

Kan jag på nåt enkelt sett skickade användaren till den nya posten som precis lagts in ?

@ndersMedlem sedan juni 200032 969 inlägg
#8

Är det alltså @Serial som vi behöver veta då?

I så fall är det bara att avsluta proceduren med

SELECT @Serial

Se dock till att du också har SET NOCOUNT ON överst i proceduren, annars kan du få lite majs med recordsetet.

Då får du alltså inte exekvera med adExecuteNoRecords, utan gör på vanligt vis när du ställer en select-fråga.

Mvh

StevePMedlem sedan mars 2003772 inlägg
#9

Nej det är just det som är problemet.
Man navigerar sig igenom respektive Post genom paging. En i taget. IntPage hämtas genom Request.Querystring("Page")

Vissa personer har över 5000 poster. Problemet är då när dom kanske har bläddrat så dom är på post nummer 5 och sen trycker "New", då görs själva inserten men dom står fortfarande kvar på Page=5
Men den nya posten ligger kanske runt Page=5001
Då blir det ju lite jobbigt att klicka sig igenom alla 5000 records innan man kommer till det nya man skapat.

@ndersMedlem sedan juni 200032 969 inlägg
#10

Jag vet inte om jag förstår problemet. Om du avslutar din procedur genom att selecta @Serial, så får du ju ut en ensam post i ditt recordset. Sedan är det bara att använda det värdet i din asp-kod.

Om jag missuppfattar, förklara gärna mer ingående vad du menar.

Mvh

StevePMedlem sedan mars 2003772 inlägg
#11

Ja då får jag ut en ensam post i recordsettet. Men då slutar ju pagingen att fungera? Eftersom bara 1 recordset har lästs in.

Man pagar genom ett Recordset i taget med en "pil" åt respektive håll.

@ndersMedlem sedan juni 200032 969 inlägg
#12

Sätt active page eller vad det nu heter till värdet du hämtar från recordsetet?

Jag kan tyvärr nada om paging, men jag hoppas du förstår vad jag menar...

Mvh

StevePMedlem sedan mars 2003772 inlägg
#13

Du menar AbsolutePage ?
Får ta mig en titt på det.

@ndersMedlem sedan juni 200032 969 inlägg
#14

Jepp, apselutpage är det apselut jag menar.

Mvh

StevePMedlem sedan mars 2003772 inlägg
#15

Kanon @nders!
La bara till en liten snutt i Pagingscriptet.

if Request.Form("NewMain") <> "" then 
Response.Redirect("PostListData.asp?ID=" & VarContactID & "&Page=" & IntTotalPages )
end if
135 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)