error '800a01a8' on ASP processing page for rating item

  I am having problems getting the following form processed on rate.asp and submitted to the database. I have most of elements here and I was hoping someone could help find where I'm getting derailed. ~

This form seems to collect the data alright:

<form name="frmRate<%=Productsrs.Fields.item("ProductID").value%>" action="rate.asp?ID=<%=Productsrs.Fields.item("ProductID").value%>" method="post">
<input type="hidden" name="ProductId" value="<%=Productsrs.Fields.item("ProductID").value%>">omitted for brevity</form>

If I submit it to a page to just display what was posted, it shows the following, which is what was on the form when it was submitted:

Variables passed via QueryString
ID = 1

Variables passed via Post
ProductId = 1
Merchant = 8
Rating = 10
Comment = Test Comment here
frmRate1.x = 33
frmRate1.y = 9

This is rate.asp where I would like to process the results and submit the rating to the database (with connection established with incl.):

Dim ProductId
Dim Rating
Dim Merchant
Dim Comment
Dim IP
Dim cookie
Dim cookieRated

ProductId = Request.querystring("ID")
Rating = Request.Form("Rating")
Merchant = Request.Form("Merchant")
Comment = Request.Form("Comment")
IP = Request.ServerVariables("REMOTE_ADDR")
cookie = Request.Cookies("rate_" & ProductId)
if cookie = "" then
cookieRated = false
cookieRated = true  
end if
Dim RatingRS
Dim RatingRS_numRows

Set RatingRS = Server.CreateObject("ADODB.Recordset")
RatingRS.ActiveConnection = MM_CharonCart_STRING
RatingRS.Source = "SELECT *  FROM Ratings  where ProductID = " & ProductID
RatingRS.CursorType = 0
RatingRS.CursorLocation = 2
RatingRS.LockType = 1

RatingRS_numRows = 0
<%Set MM_Cmd = Server.CreateObject("ADODB.Command")
MM_Cmd.ActiveConnection = MM_CharonCart_STRING
Dim RateCount
<!--Line 49-->RateCount = "SELECT COUNT(*) FROM Ratings WHERE IP='" & IP & "' AND ProductId=" & ProductID
IF RateCount.Value = 0 THEN
IF cookieRated = false THEN
MM_Cmd.CommandText ="INSERT INTO ratings(Rating, Merchant, Comment, IP, ProductId) VALUES(" & Rating & "," & Merchant & ",'" & Comment & "', '" & IP & "', " & ProductID & ")"

Response.Cookies("rate_" & ProductId) = true
Response.Cookies("rate_" & ProductId).expires = Date() + 30

Microsoft VBScript runtime error '800a01a8'

Object required: 'SELECT COUNT(*) FROM'

/rate.asp, line 49

Thanks, the help is appreciated.
Who is Participating?
DireOrbAntConnect With a Mentor Commented:
>>IF RateCount.Value = 0 THEN
What do expect this to return?

RateCount is a strign with a SELECT statement in it...
If your DB is Oracle you need to specify the schema in the from clause:

RateCount = "SELECT COUNT(*) FROM <schema_name>.Ratings WHERE IP='" & IP & "' AND ProductId=" & ProductID
AROCAuthor Commented:
Thanks for reply Dana ~

  The database is Access.

  Also the page is if anyone's interested or it helps..

What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

danataylorConnect With a Mentor Commented:
DireOrbAnt  - You're right.  I didn't notice that.  RateCount never gets submitted to the DB as a query.
AROCAuthor Commented:
Thanks DireOrbAnt, by the sounds of it, that's the problem. I don't understand how to correct it though.

Perhaps I should fire a Newbie alert about now..

If I change IF RateCount.Value = 0 THEN to RateCount = 0 THEN I get

Microsoft VBScript runtime error '800a000d'

Type mismatch: '[string: "SELECT COUNT(*) FROM"]'

/rate.asp, line 49

AROCAuthor Commented:
I see. Thanks.
You need to call the query first. Also, change it to:
"SELECT COUNT(*) AS RateCount FROM Ratings WHERE IP='" & IP & "' AND ProductId=" & ProductID
So you can grab RS("RateCount") or something... You are already calling a SELECT * up top but without the IP part in the WHERE clause... And you don't use RatingRS anywhere else... Maybe you need to stick your other query (with AS RateCount) and then do If (RS("RateCount")) = 0

Again, I'm not sure what you are trying to do and I don't know if all the code is there, so hard to tell.

You just can't query SQL results before first opening a recordset with the query....
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.