RecordCount showing -1

     strSQL = "SELECT * FROM tbl_Registration where username = '" & Trim(strUserName) & "'" & " and passwd ='" & Trim(strPassWord) & "'"
      'response.write strSQL
      'Response.End
      Set Query = objConnection.Execute(strSQL)

      response.write Query.RecordCount
      response.end


with the code above, the RecordCount returns a -1 but I know if I paste the select into Query analyzer, it brings back one record
LVL 1
dba123Asked:
Who is Participating?
 
hongjunConnect With a Mentor Commented:
to get RecordCount is to use a adOpenStatic, adOpenKeyset or adOpenDynamic CursorType. When you use <i>Set objRs = objConn.Execute("select * from your_table") ' firehose method</i>, it is using adOpenForwardOnly by default. That's why you get RecordCount -1. But using the firehose method will make execution faster. Use it if you do not need the RecordCount property.


Example
=======
<%@ Language=VBScript %>
<%
Option Explicit
Response.Buffer = true
%>

<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
</HEAD>
<BODY>

<font face="Verdana">
Another method to get RecordCount is to use a adOpenStatic, adOpenKeyset or adOpenDynamic CursorType. When you use <i>Set objRs = objConn.Execute("select * from your_table") ' firehose method</i>, it is using adOpenForwardOnly by default. That's why you get RecordCount -1. But using the firehose method will make execution faster. Use it if you do not need the RecordCount property.
<br><br>

<%
Dim objConn, objRs
Const adOpenStatic = 3
Const adLockReadOnly = 1
Const adCmdText = &H0001

set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Driver={Microsoft Access Driver (*.mdb)};dbq=" & server.MapPath("record_cnt.mdb") & ";uid=sa;pwd=;"

set objRs = Server.CreateObject("ADODB.Recordset")
objRs.Open "select * from your_table", objConn, adOpenStatic, adLockReadOnly, adCmdText

Response.Write "Record Count = <b>" & objRs.RecordCount & "</b>"

objRs.Close
objConn.Close
set objRs = nothing
set objConn = nothing
%>

</font>


</BODY>
</HTML>



hongjun
0
 
hongjunConnect With a Mentor Commented:
Another method to get RecordCount is to use a adUseClient CursorLocation. When you use <i>Set objRs = objConn.Execute("select * from your_table") ' firehose method</i>, it is using adUseServer by default. That's why you get RecordCount -1. But using the firehose method will make execution faster. Use it if you do not need the RecordCount property.

Using adUseClient
=================
<%
Dim objConn, objRs
Const adUseClient = 3
Const adLockReadOnly = 1
Const adCmdText = &H0001

set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Driver={Microsoft Access Driver (*.mdb)};dbq=" & server.MapPath("record_cnt.mdb") & ";uid=sa;pwd=;"

set objRs = Server.CreateObject("ADODB.Recordset")
objRs.CursorLocation = adUseClient
objRs.Open "select * from your_table", objConn, , adLockReadOnly, adCmdText

Response.Write "Record Count = <b>" & objRs.RecordCount & "</b>"

objRs.Close
objConn.Close
set objRs = nothing
set objConn = nothing
%>



hongjun
0
 
hongjunCommented:
0
Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

 
hongjunConnect With a Mentor Commented:
Another simple method is something like this

    strSQL = "SELECT count(*) as cnt FROM tbl_Registration where username = '" & Trim(strUserName) & "'" & " and passwd ='" & Trim(strPassWord) & "'"
     'response.write strSQL
     'Response.End
     Set Query = objConnection.Execute(strSQL)

     response.write Query("cnt")
     response.end
0
 
hongjunCommented:
Just simple change the sql statement and variable names accordingly.
0
 
dba123Author Commented:
I open my recordset like this, which requires less codeing:

Set Query = objConnection.Execute(strSQL)

I don't believe I have done it this way for about 2 years and don't understand why people still use this syntax:

objRs.Open "select * from your_table", objConn, adOpenStatic, adLockReadOnly, adCmdText

with that, what syntax can I use....how can I add a different cursor type to the way I am opening my recordset?  I don't want to use the recordset.Open method, I like the recordset = objectconnection.Execute method
0
 
hongjunCommented:
>> I don't want to use the recordset.Open method, I like the recordset = objectconnection.Execute method
If you use Set rs = Conn.Execute (...), then you are using a firehost recordset. Then you got to use this to get the recordcount.


    strSQL = "SELECT count(*) as cnt FROM tbl_Registration where username = '" & Trim(strUserName) & "'" & " and passwd ='" & Trim(strPassWord) & "'"
     'response.write strSQL
     'Response.End
     Set Query = objConnection.Execute(strSQL)

     response.write Query("cnt")
     response.end


hongjun
0
 
dba123Author Commented:
strSQL = "SELECT count(*) as cnt, username, passwd FROM tbl_Registration where username = '" & Trim(strUserName) & "'" & " and passwd ='" & Trim(strPassWord) & "'"

Column 'tbl_Registration.Username' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause
0
 
hongjunCommented:
sorry try this

strSQL = "SELECT count(*) as cnt FROM tbl_Registration where username = '" & Trim(strUserName) & "'" & " and passwd ='" & Trim(strPassWord) & "'"



hongjun
0
 
dba123Author Commented:
I need to pull those other 2 fields....username and password in the query
0
 
hongjunCommented:
then you can try this


Dim cnt

strSQL = "SELECT count(*) as cnt FROM tbl_Registration where username = '" & Trim(strUserName) & "'" & " and passwd ='" & Trim(strPassWord) & "'"
Set Query = objConnection.Execute(strSQL)
cnt = Query("cnt")

strSQL = "SELECT username, passwd FROM tbl_Registration where username = '" & Trim(strUserName) & "'" & " and passwd ='" & Trim(strPassWord) & "'"
Set Query = objConnection.Execute(strSQL)



Now, you can use your Query recordset as per normal.
0
 
dba123Author Commented:
yea, that is inefficient.  I want it all in one query.  why should I code 2 separate queries which just creates more calls to the server?
0
 
gladxmlCommented:
if this is regarding login maybe you can try this approach...  assuming that you recordobject is rs and your connection is oConn then

'check the user name in the db
sqlrsLogin = "select username, password From tblUsers Where userName = '"& Trim(strUserName) &"'
  rs.Open sql, oConn, 0, 2
if not rs.EOF then
'compare the password in the db and the password enetered by the user..
  if UCase(rs("password ")) = UCase(Trim(strPassWord)) then

     response.write "password verified.."
'retrieve the values
 
  else

  response.write "Please check hter is some problem..."

   end if
end if

HTH...

HAppy programming....
0
 
dba123Author Commented:
I just want to get rid of that error....I know I need to group by, but by what?  I hate that error
0
 
dba123Author Commented:
got it

strSQL = "SELECT count(*) as cnt, username, passwd FROM tbl_Registration where username = '" & Trim(strUserName) & "'" & " and passwd ='" & Trim(strPassWord) & "'" & "group by username, passwd"
0
All Courses

From novice to tech pro — start learning today.