Avatar billede canedo Nybegynder
12. februar 2005 - 20:03 Der er 15 kommentarer og
1 løsning

kompliceret SQL sætning

Jeg skal slette nogle poster i en database med følgende kriterier, som gør at hvis man har mere end 8 breve i tabellen, så skal de slettes, - men kun hos modtageren, ikke hos afsenderen. Om posten er slettet hos modtager eller afsender angiver jeg med et true/false felt.


strSQL = "DELETE FROM [post] WHERE modtager=" & session("BrugerID") & " AND beskedID NOT IN (SELECT TOP 8 beskedID FROM [post] WHERE modtager=" & session("BrugerID") & " AND modtagerSlettet='0' ORDER BY dato desc) AND afsenderSlettet='1';"
'response.write strSQL
Connect.Execute(strSQL)


men jeg får denne fejl når jeg kører det:

Microsoft JET Database Engine error '80040e10'

No value given for one or more required parameters.

/spejl/www/opret.asp, line 92


Hvad gør jeg forkert? (linje 92 er Connect.Execute(strSQL))
Avatar billede eagleeye Praktikant
12. februar 2005 - 20:10 #1
Prøv at skrive den sådan her:

strSQL = "DELETE FROM [post] WHERE modtager=" & session("BrugerID") & " AND beskedID NOT IN (SELECT TOP 8 p.beskedID FROM [post] p WHERE p.modtager=" & session("BrugerID") & " AND p.modtagerSlettet='0' ORDER BY p.dato desc) AND afsenderSlettet='1';"


Er både modtagerSlettet og afsenderSlettet tekst kolonner?

angående fejlkoden så prøv at tjekke alle kolonnenavne er stave rigtigt i forhold til dem der står i databasen.
Avatar billede canedo Nybegynder
12. februar 2005 - 20:12 #2
modtagerSlettet er et true/false felt og det samme gælder afsenderSlettet
Avatar billede eagleeye Praktikant
12. februar 2005 - 20:15 #3
Så skal der ikke ' omkring og du kan evt skrive FALSE og TRUE eller tallene 0 og 1:

strSQL = "DELETE FROM [post] WHERE modtager=" & session("BrugerID") & " AND beskedID NOT IN (SELECT TOP 8 p.beskedID FROM [post] p WHERE p.modtager=" & session("BrugerID") & " AND p.modtagerSlettet=FALSE ORDER BY p.dato desc) AND afsenderSlettet=TRUE;"


elller

strSQL = "DELETE FROM [post] WHERE modtager=" & session("BrugerID") & " AND beskedID NOT IN (SELECT TOP 8 p.beskedID FROM [post] p WHERE p.modtager=" & session("BrugerID") & " AND p.modtagerSlettet=0 ORDER BY p.dato desc) AND afsenderSlettet=1;"
Avatar billede canedo Nybegynder
12. februar 2005 - 20:20 #4
det hjalp ikke, jeg får nødagtigt den samme fejlmelding:

No value given for one or more required parameters.

Jeg har også ændret til 1 og 0 i stedet for '1' og '0'... og prøvet med false og true.
Avatar billede eagleeye Praktikant
12. februar 2005 - 20:22 #5
Og alle kolonnenavne er rigtige?
Avatar billede canedo Nybegynder
12. februar 2005 - 20:24 #6
ja, dem har jeg netop været inde og checke efter.
Avatar billede eagleeye Praktikant
12. februar 2005 - 20:27 #7
Indeholder session("BrugerID") så et korrekt tal?
Avatar billede canedo Nybegynder
12. februar 2005 - 20:29 #8
ja, når jeg udskriver min SQL ser det sådanher ud:

DELETE FROM [post] WHERE modtager=470 AND beskedID NOT IN (SELECT TOP 8 p.beskedID FROM [post] p WHERE p.modtager=470 AND p.modtagerSlettet=0 ORDER BY p.dato desc) AND afsenderSlettet=1;
Avatar billede eagleeye Praktikant
12. februar 2005 - 20:34 #9
hmm så prøv at sætte [] omrkring kolonnerne:

strSQL = "DELETE FROM [post] WHERE [modtager]=" & session("BrugerID") & " AND [beskedID] NOT IN (SELECT TOP 8 p.beskedID FROM [post] p WHERE p.modtager=" & session("BrugerID") & " AND p.modtagerSlettet=FALSE ORDER BY p.dato desc) AND [afsenderSlettet]=TRUE;"
Avatar billede canedo Nybegynder
12. februar 2005 - 20:39 #10
Jeg får samme fejlmelding, - og sådan ser sql'en ud, når jeg udskriver den:

DELETE FROM [post] WHERE [modtager]=470 AND [beskedID] NOT IN (SELECT TOP 8 p.beskedID FROM [post] p WHERE p.modtager=470 AND p.modtagerSlettet=FALSE ORDER BY p.dato desc) AND [afsenderSlettet]=TRUE;
Avatar billede eagleeye Praktikant
12. februar 2005 - 20:43 #11
Det forstår jeg ikke der er ikke nogle steder der mangler en paramter og hvis du er 100% sikker på at der ikke er skrive fejl i kolonne navne. Det er Access du bruger?
Avatar billede canedo Nybegynder
12. februar 2005 - 20:46 #12
Jeg forstår det heller ikke. Jeg er helt sikker på kolonnenavnene. Det er access jeg bruger og felterne er døbt således:

beskedID (autonummerering)
afsender (tal)
modtager (tal)
slettetModtager (ja/nej)
slettetAfsender (ja/nej)
Avatar billede eagleeye Praktikant
12. februar 2005 - 20:49 #13
Hvis de sidste er kolonnenavne i tabellen så hedder den eksempelvis den sidste: slettetAfsender
I SQL sætningen står den som:  afsenderSlettet

Så der er byttet rundt på de to ord det gælder for to af kolonnerne så prøv at rette SQL sætningen til dette:

strSQL = "DELETE FROM [post] WHERE [modtager]=" & session("BrugerID") & " AND [beskedID] NOT IN (SELECT TOP 8 p.beskedID FROM [post] p WHERE p.modtager=" & session("BrugerID") & " AND p.slettetModtager=FALSE ORDER BY p.dato desc) AND [slettetAfsender]=TRUE;"
Avatar billede canedo Nybegynder
12. februar 2005 - 20:50 #14
damn... kigger lige en ekstra gang...
Avatar billede canedo Nybegynder
12. februar 2005 - 20:56 #15
læg et svar... atter det med navne. Det var dog utroligt!!!
Avatar billede eagleeye Praktikant
12. februar 2005 - 20:57 #16
ok ;)
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