12. februar 2005 - 20:03Der 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))
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.
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;"
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;
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;"
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;
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?
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;"
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.