Avatar billede yezper Nybegynder
01. december 2000 - 21:12 Der 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)


Jeg henter resultatet således:
Response.Write cQry.Fields(\"Taeller\")


Når jeg efterfølgende prøver at udføre scriptet, får jeg I IIS5 følgende fejl:

Elementet kan ikke findes i den samling, der svarer til det anmodede navn eller ordenstal.
/soeg.asp, line 316

Linie 316 er den linie, hvori jeg skriver antallet af resultater.

Er der nogen, der kan se, hvad jeg gør forkert?
Avatar billede tdaugaard Nybegynder
01. december 2000 - 21:16 #1
cSQL = \"SELECT COUNT(*) AS taeller FROM (\" & SQL & \");\"

??
Avatar billede tpiil Nybegynder
01. december 2000 - 21:17 #2
Prøv at udskrive sådan her:
Response.Write cQry
Avatar billede netsrac Praktikant
01. december 2000 - 21:17 #3
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\") & \"\';\"

Cirka....er ik helt sikker
Avatar billede tpiil Nybegynder
01. december 2000 - 21:20 #4
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)


Jeg henter resultatet således:
Response.Write cQry(\"Taeller\")
Avatar billede tdaugaard Nybegynder
01. december 2000 - 21:21 #5
tpiil.... der skal vist () rundt om når du bruger nestede SELECT\'s..
Avatar billede yezper Nybegynder
01. december 2000 - 21:35 #6
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 = \".....\"

Ander forslag? (PLEEEEASE!)
Avatar billede tpiil Nybegynder
01. december 2000 - 21:37 #7
cSQL = \"SELECT COUNT(*) AS Taeller FROM (\" & SQL & \");\"
Set cQry = Server.CreateObject(\"ADODB.Connection\")
cQry.Open strConnect
Set cQry = cQry.Execute(cSQL)
Avatar billede yezper Nybegynder
01. december 2000 - 21:40 #8
Så er vi jo tilbage ved tdaugaards forslag :-(
Avatar billede tpiil Nybegynder
01. december 2000 - 21:41 #9
cSQL = \"SELECT COUNT(*) AS Taeller FROM (\" & SQL & \")\"
Avatar billede tpiil Nybegynder
01. december 2000 - 21:43 #10
så prøv sådan:
cSQL = \"SELECT COUNT(*) AS Taeller FROM \" & SQL & \"\"
Avatar billede tdaugaard Nybegynder
01. december 2000 - 21:43 #11
hmm .. SKAL MSSQL/MySQL ikke have afsluttende ; ?
Avatar billede tpiil Nybegynder
01. december 2000 - 21:44 #12
jeg prøver bare alle mulighederne!
Avatar billede yezper Nybegynder
01. december 2000 - 21:45 #13
Det er også allerede afprøvet. Som sagt så skal der parantes omkring subqueries.
Avatar billede yezper Nybegynder
01. december 2000 - 21:45 #14
tdaugaard: ikke nødvendigvis. Men jeg gør det altid for en sikkerhedsskyld.
Jeg har allerede prøvet både med og uden afsluttende ;
Avatar billede tpiil Nybegynder
01. december 2000 - 21:46 #15
så prøv det du startede med og så udskriv sådan:
Response.Write cQry(\"Taeller\")
Avatar billede netsrac Praktikant
01. december 2000 - 21:47 #16
Har du prøvet min ??
Avatar billede yezper Nybegynder
01. december 2000 - 21:49 #17
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.
Avatar billede yezper Nybegynder
01. december 2000 - 21:51 #18
Ja, jeg har prøvet uden ; i første eks. Så 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 \')\'

Mystisk...

Avatar billede tdaugaard Nybegynder
01. december 2000 - 21:51 #19
Har du prøvet at udskrive cSQL ? Prøv at vise os den ..
Avatar billede tdaugaard Nybegynder
01. december 2000 - 21:52 #20
Hmm .. FROM forventer vel egentlig også et tabel navn .. !?
Avatar billede yezper Nybegynder
01. december 2000 - 21:53 #21
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.
Avatar billede netsrac Praktikant
01. december 2000 - 21:53 #22
Argh....har du prøvet at udskifte

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\") & \"\';\"


Avatar billede yezper Nybegynder
01. december 2000 - 21:56 #23
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...
Avatar billede yezper Nybegynder
01. december 2000 - 21:57 #24
netsrac: Hvordan vil du udskifte WHERE Profilename = \'\" ...... med en SQL query, som bliver bygget dynamisk op alt efter brugerens valg?
Avatar billede netsrac Praktikant
01. december 2000 - 21:58 #25
tmpsql = replace (sql, \"SELECT * FROM tblDatingProfiles\", \"SELECT COUNT(*) FROM tblDatingProfiles AS Taeller\")

csql = tmpsql



Avatar billede tdaugaard Nybegynder
01. december 2000 - 21:59 #26
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 ..
Avatar billede yezper Nybegynder
01. december 2000 - 22:02 #27
tdaugaard: hvis jeg sætter AS før FROM 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 \';\'.
Avatar billede yezper Nybegynder
01. december 2000 - 22:03 #28
netsrac: Det virkede ikke alligevel...
Avatar billede yezper Nybegynder
01. december 2000 - 22:14 #29
tdaugaard: Hvordan skulle jeg sætte tabelnavnet ind?
Avatar billede tdaugaard Nybegynder
01. december 2000 - 22:17 #30
Ja ... det er jo det ...
Avatar billede yezper Nybegynder
01. december 2000 - 22:33 #31
darn... kender kun problemet alt for godt...
når man endelig skal bruge det...
Avatar billede kasseper Nybegynder
02. december 2000 - 11:24 #32
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;\"




Avatar billede kasseper Nybegynder
02. december 2000 - 11:30 #33
Så kan du referere til Response.Write cQry.Fields(\"taltenavne\")
og Response.Write cQry.Fields(\"talteadrs\")





Avatar billede kasseper Nybegynder
02. december 2000 - 11:30 #34
og hvorfor får jeg altid en 6-8 newlines i røven på mine svar ?
Avatar billede yezper Nybegynder
02. december 2000 - 12:51 #35
Heeeeeeey! Det virkede!
Mange tak!
Her er dine point! Grib!
Avatar billede kasseper Nybegynder
02. december 2000 - 12:52 #36
Tak tak...
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