01. december 2000 - 21:12Der er
35 kommentarer og 1 løsning
Subqueries
Hej allesammen!
Jeg har et ret irriterende problem med nogle subqueries, som jeg håber I kan hjælpe mig med.
Min primære query ser således ud (forkortet for overskuelighedens skyld): SQL = \"SELECT * FROM tblDatingProfiles WHERE Profilename = \'\" & Request.Form(\"Profilename\") & \"\' AND Active = \'Y\' AND Profilename <> \'\" & Session(\"AuthUser\") & \"\';\" Set Qry = Server.CreateObject(\"ADODB.Connection\") Qry.Open strconnect Set Qry = Qry.Execute(SQL)
Og tælle queryen ser således ud: cSQL = \"SELECT COUNT(*) FROM (\" & SQL & \") AS Taeller;\" Set cQry = Server.CreateObject(\"ADODB.Connection\") cQry.Open strConnect Set cQry = cQry.Execute(cSQL)
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Ja cSQL = \"SELECT COUNT(*) FROM (\" & SQL & \") AS Taeller;\"
Skal være
cSQL = \"SELECT COUNT(*) FROM tblDatingProfiles AS Taeller WHERE Profilename = \'\" & Request.Form(\"Profilename\") & \"\' AND Active = \'Y\' AND Profilename <> \'\" & Session(\"AuthUser\") & \"\';\"
Og tælle queryen ser således ud: cSQL = \"SELECT COUNT(*) AS Taeller FROM \" & SQL & \";\" Set cQry = Server.CreateObject(\"ADODB.Connection\") cQry.Open strConnect Set cQry = cQry.Execute(cSQL)
Der var ikke nogen der virkede... tdaugaards forslag:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14) [Microsoft][ODBC SQL Server Driver][SQL Server]Line 1: Incorrect syntax near \';\'. /soeg.asp, line 17
linie 17 = Set cQry = cQry.Execute(cSQL)
tpii(1): Response-objekt, ASP 0185 (0x8002000E) En standardegenskab for objektet blev ikke fundet. /soeg.asp
tpii(2): Det er en subquery, hvorfor der SKAL paranteser omkring. Subqueryen eksekveres først, hvorefter der tælles på det resultat, jeg fik ud af SQL = \".....\"
Afprøvet... Med cSQL = \"SELECT COUNT(*) AS Taeller FROM (\" & SQL & \");\" får jeg følgende fejl:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14) [Microsoft][ODBC SQL Server Driver][SQL Server]Line 1: Incorrect syntax near \';\' ???!
Med cSQL = \"SELECT COUNT(*) FROM (\" & SQL & \") AS Taeller;\" får jeg: Elementet kan ikke findes i den samling, der svarer til det anmodede navn eller ordenstal.
netsrac: Ja. Problemet er bare, at det SKAL bygges op som en subquery... Brugerne har også mulighed på at søge på et hav af kriterier, så som køn, alder, hvilket område de bor i, hvad de søger, om det er billedprofiler m.v.
cSQL = \"SELECT COUNT(*) FROM (\" & SQL & \") AS Taeller;\"
med
cSQL = \"SELECT COUNT(*) FROM tblDatingProfiles AS Taeller WHERE Profilename = \'\" & Request.Form(\"Profilename\") & \"\' AND Active = \'Y\' AND Profilename <> \'\" & Session(\"AuthUser\") & \"\';\"
Ved udskrift af cSQL får man: SELECT COUNT(*) FROM (SELECT * FROM tblDatingProfiles WHERE Profilename = \'test\' AND Active = \'Y\' AND Profilename <> \'Yezper\') AS Taeller; hvilket jo burde være korrekt...
njaa ... jeg mener at AS taeller skal være FØR FROM .. but i could be wrong ... Desuden mener jeg også osm jeg har skrevet at FROM forventer et tabel navn ..
Uden at have læst samtlige indlæg i dette spg. ville jeg mene at det er fordi at du navngiver din subquery som Tealler og kan derfor ikke referere til den som dit count..... Når man laver et count på et felt i en tabel, returneres der et resultat som du ikke kan tilgå via ASP, med mindre du har navngivet counten, f.eks. \"select count(ID) as taltID from Mytable.\" Hvis du laver et count på alt hvad der er så er jeg ikke lige klar over hvorledes man tilgår eller navngiver counten, Men du kan jo lave det sådan her : Hvis de felter du skal bruge f.eks. hedder navn og adr, eller hvad ved jeg... cSQL = \"SELECT COUNT(Taeller.navn) as taltenavne, COUNT(Taeller.adr) as talteadrs FROM (\" & SQL & \") AS Taeller;\"
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.