webForumDet fria alternativet
Logga in / Bli medlem

Syntaxfel

Databaser & SQL

8 svar · 201 visningar · startad av Bendro

Medlem sedan jan. 20013 039 inlägg
Trådstart#1

Behöver hjälp... :x

Kan inte MySQL men har på min site ett forum som använder MySQL. Har funkat bra tills jag uppgraderade med ett mod-paket. Det mesta flyter fortfarande helt ok men jag får ett felmeddelande på den här kodsnutten:

strSql = "SELECT pmtotal1=(SELECT Count(M_TO) FROM " & strMemberTablePrefix & "MEMBERS M, " & strTablePrefix & "PM P WHERE M.M_NAME = '" & strDBNTUserName & "' AND M.MEMBER_ID = P.M_TO), pmtotal2=(SELECT Count(M_FROM) FROM " & strMemberTablePrefix & "MEMBERS M, " & strTablePrefix & "PM P WHERE M.M_NAME = '" & strDBNTUserName & "' AND M.MEMBER_ID = P.M_FROM)"

Felmeddelandet ser ut så här:

Microsoft OLE DB Provider for ODBC Drivers error '80040e09' 

[TCX][MyODBC]You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT Count(M_TO) FROM FORUM_MEMBERS M, FORUM_PM P WHERE M.M_N

Jag ligger på Aleborgs webbhotell och han kör med MySQL 4.

Medlem sedan jan. 20032 285 inlägg
#2

Kan det kanske bero på att MySQL endast stödjer sub-selects från och med version 4.1? :)

Medlem sedan jan. 20013 039 inlägg
#3

Ser man på....det visste jag inte som sagt :)
Så nu gäller det bara att klura ut ett alternativ till detta då....eller be Aleborg uppgradera ;)

Medlem sedan jan. 20013 039 inlägg
#4

Jag har försökt, men dels var det för länge sedan jag kodade överhuvudtaget...dels har jag aldrig jobbat med MySQL.
Undrar därför om någon skulle kunna förbarma sig och hjälpa mig att fixa så att detta funkar?

		strSql = "SELECT pmtotal1=(SELECT Count(M_TO) FROM " & strMemberTablePrefix & "MEMBERS M, " & strTablePrefix & "PM P WHERE M.M_NAME = '" & strDBNTUserName & "' AND M.MEMBER_ID = P.M_TO), pmtotal2=(SELECT Count(M_FROM) FROM " & strMemberTablePrefix & "MEMBERS M, " & strTablePrefix & "PM P WHERE M.M_NAME = '" & strDBNTUserName & "' AND M.MEMBER_ID = P.M_FROM)"
	
	Set rsPM = my_Conn.Execute(strSql)
	pmtotal1 = rsPM("pmtotal1")
	pmtotal2 = rsPM("pmtotal2")

	rsPM.close
	set rsPM = nothing
Medlem sedan jan. 20032 285 inlägg
#5

Jag förstår inte riktigt vad det är du vill göra när du använder "=" i din SELECT-sats?

Medlem sedan jan. 20013 039 inlägg
#6

Fråga mig inte....det är inte jag som skrivit den här kodsnutten utan den ingår i det Snitz-forum jag har lagt upp på min hemsida.
Det är detta som är en del av mitt problem...jag förstår inte riktigt hur han som gjort detta har tänkte, och eftersom jag har så dålig koll på MySQL lyckas jag inte få till det.

Jag tolkar det i alla fall så att rsPM skall innehålla värden för både pmtotal1 och pmtotal2 och att det skall göras genom sub-selects. Men hur man bryter loss detta och skriver för att få samma slutresultat fast utan sub-selects är mer än jag lyckas klara av just nu....

Medlem sedan jan. 20013 039 inlägg
#7

Jag testade med en sådan här version:

strSql="SELECT Count(M_TO) FROM " & strMemberTablePrefix & "MEMBERS M, " & strTablePrefix & "PM P WHERE M.M_NAME = '" & strDBNTUserName & "' AND M.MEMBER_ID = P.M_TO"

Set rsPM = my_Conn.Execute(strSql)
pmtotal1 = rsPM("M_TO")
	rsPM.close
	set rsPM = nothing

strSql="SELECT Count(M_FROM) FROM " & strMemberTablePrefix & "MEMBERS M, " & strTablePrefix & "PM P WHERE M.M_NAME = '" & strDBNTUserName & "' AND M.MEMBER_ID = P.M_FROM"

Set rsPM = my_Conn.Execute(strSql)	
pmtotal2 = rsPM("M_FROM")
	rsPM.close
	set rsPM = nothing

Men fick följande fel:

ADODB.Recordset error '800a0cc1' 

Item cannot be found in the collection corresponding to the requested name or ordinal

Någon som ser var jag har tänkt fel?

Medlem sedan jan. 20032 285 inlägg
#8

Jag undrar jag... Är det kanske så här du vill ha det?

strSql="SELECT Count(M_TO) FROM " & strMemberTablePrefix & "MEMBERS M, " & strTablePrefix & "PM P WHERE M.M_NAME = '" & strDBNTUserName & "' AND M.MEMBER_ID = P.M_TO"

Set rsPM = my_Conn.Execute(strSql)
pmtotal1 = rsPM(0)
	rsPM.close
	set rsPM = nothing

strSql="SELECT Count(M_FROM) FROM " & strMemberTablePrefix & "MEMBERS M, " & strTablePrefix & "PM P WHERE M.M_NAME = '" & strDBNTUserName & "' AND M.MEMBER_ID = P.M_FROM"

Set rsPM = my_Conn.Execute(strSql)	
pmtotal2 = rsPM(0)
	rsPM.close
	set rsPM = nothing
Medlem sedan jan. 20013 039 inlägg
#9

Yes! Nu funkar det kanon!
Stort tack Sebbe!

280 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
131 ms — deklarationer (db)
0 ms — hämta statistik (cache)
143 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)