Avatar billede jmc Nybegynder
18. februar 2003 - 22:18 Der er 8 kommentarer og
1 løsning

Too few parameters. Expected 2.

Kan man ikke gøre sådan?

dim RS_SQL, me, pl
me = request.Cookies("me")
pl = request.Cookies("pl")
if pl = "" then pl = True
if me = "" then me = True

SELECT * FROM produkt WHERE cid = 2 AND pl = True or me = True

den siger:
Too few parameters. Expected 2. på open recordset
Avatar billede longshanks Nybegynder
18. februar 2003 - 22:25 #1
Hvad er det lige du spørger om!!!
Avatar billede jmc Nybegynder
18. februar 2003 - 22:43 #2
kan man spørge efter en cookie på denne måde:
me = request.Cookies("me")
og skrive:
if me = "" then me = True
hvis cookie ikke findes
for derefter af benytte den i en SQL som ser sådan ud:
SELECT * FROM produkt WHERE cid = 2 AND pl = True or me = True
Avatar billede mortrr Praktikant
18. februar 2003 - 23:11 #3
Tjo - det kunne du sådan set godt, men du sætter den sql-streng forkert sammen.
Eller:
SELECT * FROM produkt WHERE cid = 2 AND (pl or me)
eller
SELECT * FROM produkt WHERE cid = 2 AND (pl=1 or me=1)
Men det betyder jo så også at pl og me skal passe på nogen feltnavne i din tabel.

"Too few parameters. Expected 2" betyder som regel at man har skrevet et par feltnavne eller lignende i sætningen, som ikke findes.

- Morten
Avatar billede the_bma_man Nybegynder
19. februar 2003 - 15:06 #4
Problemet er, at pl ikke er "" efter en request.Cookies("pl") (og me ligeså), hvis den cookie ikke findes. Nå er den null.
Du skal spørge
if isnull(me) then me = true
Avatar billede mortrr Praktikant
19. februar 2003 - 15:38 #5
bma > Det ændrer ikke på at databasen brokker sig over "Too few parameters"

- Morten
Avatar billede jmc Nybegynder
19. februar 2003 - 16:18 #6
Det er nok mere kompliceret end som så!
SELECT * FROM produkt WHERE cid = 2 AND pl = True or me = True

I min tabel produkt har jeg pl eller me som kan være true/false
Jeg skal have bygget det ind i denne SQL.
Jeg kan ikke benytte tabellen relation som også benyttes i SQL (til noget andet)

RS_SQL = "SELECT * FROM produkt "
if CID_SQL <> "" then
    if Ubound(Temp)>0 then 'Mere end 1
        RS_SQL = RS_SQL &     " WHERE produkt_id IN (SELECT produkt_id " & _
            "FROM relation " & _
            "WHERE cid="&Temp(0)&") AND produkt_id IN (SELECT produkt_id " & _
            "FROM relation  WHERE cid="&Temp(1)&") "
    else
        RS_SQL = RS_SQL & "WHERE produkt_id IN (SELECT distinct produkt_id FROM relation WHERE cid = "&CID_SQL&" )"
    end if
elseif Fritekst_SQL <> "" Then
    Fritekst_SQL = replace(Fritekst_SQL,"'","''")
    RS_SQL = RS_SQL & "WHERE ( navn_dk like '%"&Fritekst_SQL&"%' OR beskrivelse_dk like '%"&Fritekst_SQL&"%' ) "
elseif LimitSearch_SQL <> "" Then
    TempSql = split(LimitSearch_SQL, ",")
    RS_SQL = RS_SQL & " WHERE produkt_id IN "
    for c = 0 to Ubound( TempSql )
        if c <> 0 then RS_SQL = RS_SQL & " AND produkt_id IN "     'Ikke den første, men alle andre
        RS_SQL = RS_SQL & "(SELECT distinct produkt_id FROM relation WHERE cid = "&TempSql(c)&" ) "
    next
end if
RS_SQL = RS_SQL & " ORDER BY navn_dk"
%>
Avatar billede mortrr Praktikant
19. februar 2003 - 21:26 #7
Nååh.
Relation er et "reserveret ord" i Access.

Omdøb tabellen eller skriv det i firkantede paranteser.

- Morten
Avatar billede jmc Nybegynder
19. februar 2003 - 22:40 #8
nej det er ikke dette, dette virker fint, relation har virket fint og er ok. Det er et addon Det er nok mere kompliceret end som så!
SELECT * FROM produkt WHERE cid = 2 AND pl = True or me = True

jeg taler om
Avatar billede mortrr Praktikant
20. februar 2003 - 00:07 #9
Jeg tvivler på at der er noget kompliceret i det. Det er nok nærmere et spørgsmål om at du har stirret dig blind på det forkerte sted.

Tilbage til starten:

Fejlen som du siger du får: "Too few parameters. Expected 2."
betyder at database driveren tror at du mangler at angive to parametre.

Det gør du bare ikke, for du har ikke angivet nogen parametre i din sql-sætning, så det må være to feltnavne du har skrevet forkert, eller som ganske enkelt ikke findes i den database/tabel du forespørger.

Hvis man har problemer med en sql-sætning er det en god idé at udskrive sql-sætningen lige før man normalt ville udføre den.

Så hvis du fx får problemer i et par linier som:
sql="SELECT * FROM produkt WHERE cid = " & cid & " AND pl = " & pl & " or me = " & me
Set rs=Conn.Execute(sql)

Så ændrer man linierne til:
sql="SELECT * FROM produkt WHERE cid = " & cid & " AND pl = " & pl & " or me = " & me
Response.Write "<br>SQL:" & sql & "<br>"
Response.End
Set rs=Conn.Execute(sql)

"kører siden", og kigger på hvad det egentligt er man har bedt sin database om.

- Morten
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
Kurser inden for grundlæggende programmering

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