Avatar billede yezper Nybegynder
25. januar 2001 - 22:07 Der er 6 kommentarer og
1 løsning

Stored Procedure - vælg række dynamisk

Jeg har brug for at kunne vælge en række i en tabel dynamisk ud fra brugerens valg på hjemmesiden, men har lidt problemer med at få koden til at virke:

-- stored procedure --
CREATE PROCEDURE spVideosByGenre
    @Genre VARCHAR(1)
AS
BEGIN
    SELECT * FROM tblVideos WHERE @Genre LIKE \'J\' ORDER BY PID
END

-- koden i asp --
SQL = \"EXEC spVideosByGenre\"
SQL = SQL & \" @Genre = \" & genre

Kombinationen returnerer ingen poster, men det virker godt hvis jeg bruger følgende kode på asp siden (ingen stored procedure):

-- asp --
SQL = \"SELECT * FROM tblVideos WHERE \" & genre & \" = \'J\' ORDER BY PID;\"

Her returneres alle de poster, der opfylder kriterierne.

Er der nogen der kan se, hvad jeg gør galt i stored procedure/asp kombinationen?
Avatar billede yezper Nybegynder
25. januar 2001 - 22:08 #1
genre bestemmes forresten ud fra en querystring:

genre = Request.QueryString(\"genre\")

længere oppe i koden.
Avatar billede hatecaps Nybegynder
25. januar 2001 - 22:26 #2
så vidt jeg kan se mangler du gnyffer omkring din genre variabel, altså
SQL = \"EXEC spVideosByGenre\";
SQL = SQL & \" @Genre = \'\" & genre & \"\'\";

eller er det bare mig ?
Avatar billede yezper Nybegynder
25. januar 2001 - 23:44 #3
Det virkede ikke - samme, tomme, resultat.
Avatar billede sbarnney Nybegynder
27. januar 2001 - 10:39 #4
Prøv dette i stedet.

CREATE PROCEDURE spVideosByGenre AS

SELECT * FROM tblVideos WHERE Genre LIKE \'J\' ORDER BY PID

Så er din koden i asp god nok SQL = \"EXEC spVideosByGenre\"

Stig
Avatar billede hatecaps Nybegynder
27. januar 2001 - 11:10 #5
øhhh, sbarnney, hvor er det lige din løsning er dynamisk ??

yezper, så vidt jeg kan se har du vendt det forkert, (det tog lidt tid at opdage det men.. .-)
jeg går ud fra at @genre skal indeholde det feltnavn der er valgt af brugeren, og du så vil alle de records hvor denne genre sat returneret.

Hvis det er rigtigt kan jeg forestille mig at problemet ligger i din definition af @genre som varchar(1) !, disse feltnavne er vel noget længere end en karakter. kig på din tabel, find det længste feltnavn der kan komme på tale, og sæt @genre op som varchar med længden på det længste feltnavn

ha\' det godt
hatecaps :-)
Avatar billede yezper Nybegynder
27. januar 2001 - 14:39 #6
UPS! Jeg kom til at acceptere dit svar... Det var ikke meningen... For alle genrefelterne er kun ét tegn langt (hvilket også er meningen).
Avatar billede hatecaps Nybegynder
27. januar 2001 - 20:55 #7
hehe, ok, jer har oprettet spørgsmål http://www.eksperten.dk/spm/46308 til dig.

Det jeg mente var at det der du får ud af genre = Request.QueryString(\"genre\") vel er navne som \"action\", \"komedie\" osv. så går det ikke at du hælder et længere feltnavn ned i en varchar(1).
Det er jo ikke felternes længde du ændrer dynamisk, men deres navne :-)

I øvrigt tvivler jeg faktisk på at du på den måde får fat i selve feltet, men blot får udført en sammeligning af to tekster. Eksempel, din genre variable indeholder \"action\", din stored procedure vil da tjekker om ordert \"action\" = \"J\" , og da det aldrig er sandt vil du altid få et tomt resultat. Så vidt jeg kan se er den eneste måde at gøre det på at blive ved med at bruge
-- asp --
SQL = \"SELECT * FROM tblVideos WHERE \" & genre & \" = \'J\' ORDER BY PID;\"

ha\' det godt
hatecaps
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester