webForumDet fria alternativet

Syntaxfel

8 svar · 201 visningar · startad av Bendro

BendroMedlem sedan jan. 20013 039 inlägg
#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.

SebbeMedlem 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? :)

BendroMedlem 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 ;)

BendroMedlem 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
SebbeMedlem 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?

BendroMedlem 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....

BendroMedlem 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?

SebbeMedlem 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
BendroMedlem sedan jan. 20013 039 inlägg
#9

Yes! Nu funkar det kanon!
Stort tack Sebbe!

128 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)