?
Solved

Recordset syntax

Posted on 2000-05-17
6
Medium Priority
?
703 Views
Last Modified: 2011-09-20
I have two tables customers and addresses. I want to get all addresses belonging to a given customer using stored procedure, a wrapper function and finaly use this function in my asp file.

here is the customer table.
-------------------------------------------------------------
CREATE PROCEDURE spAddress(@companyName varchar(50) )
as
Select *
From
Customers Inner Join addresses on
Customers.RecNumber = addresses.RecNumber
Where
Customers.CompanyName=@CompanyName
-------------------------------------------------------------

------------------------------------------------------------------------------------
here is the wrapper function

function wrpGetAddress(Conn, CompanyName)
 Dim cmd
 Set cmd = Server.CreateObject("ADODB.Command")
 
  With cmd
   .ActiveConnection = objConn
   .CommandText = "usr.spAddress"
   .CommandType = adCmdStoredProc
 End With
 
Set param = cmd.CreateParameter("companyName", advarchar, adParamInput, 50, CompanyName)
cmd.Parameters.Append param

 set wrpGetAddress = cmd.Execute      
end function

------------------------------------------------------------------------------------

Now I use the above function in my asp page.


Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open Database, User, Password

CompanyName = "IBM"

Set Rst = Server.CreateObject("ADODB.Recordset")
 Rst = wrpGetAddress(Conn, CompanyName)

Rst.moveLast

--------------------------------------------------------------------------------------

Error is

Relationship
 
Microsoft VBScript runtime error '800a01b6'

Object doesn't support this property or method: 'Rst.MoveLast'

/temp/test.asp, line 50
 

I want to use the stored procedure and the wrapper function. But I need to tell that the returned recordset must be dynamic. I don't know the syntax
0
Comment
Question by:yassin092898
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
  • 2
6 Comments
 
LVL 5

Expert Comment

by:aioudine
ID: 2819907
Open RecordSet with Client Side cursor
something like that
-----------------
  sConnection = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=zulu;Data Source=DATACENTER;Connect Timeout=2000"


  Set oConn = Server.CreateObject("ADODB.Connection")
  oConn.Open  sConnection
               
  Set oCmd = Server.CreateObject("ADODB.Command")
  Set oCmd.ActiveConnection = oConn
  oCmd.CommandText =  cProcedureName
  oCmd.CommandType = adCmdStoredProc
  oCmd.CommandTimeout = 120

  Set oRs= Server.CreateObject("ADODB.Recordset")
  oRs.ActiveConnection = oConn
  oRs.CursorLocation = adUseClient
  oCmd.Parameters.Append

oCmd.CreateParameter( "@Id", adInteger, adParamInput, ,iId )                
  oRs.Open oCmd

0
 
LVL 5

Expert Comment

by:aioudine
ID: 2819917
other wise you may use
RsCustomerList.CursorType = adOpenKeyset
RsCustomerList.LockType = adLockOptimistic
0
 

Author Comment

by:yassin092898
ID: 2821232
I have been trying to implement your suggestions but it seems I am having hard time making it work.
All I want is to make the wrapper function return a dynamic recordset and I assign it a record set I declare in the main asp file.
If that can't be done please let me know.
I would appreciate if you can modify my wrapper function and the main asp file separately and show me the result.

Preferably, you may cut and past my entire original question and modify the wrapper function which lives different file than the calling main asp file.

Than you
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Expert Comment

by:ssripathy
ID: 2847042
yassin,
Instead of passing objects as argument parameters which is an inefficient method you could alter your code.
There are many methods you can accomplish what you have asked. But before I elaborate, your error for "rs.MoveLast property not supported" it could be either that your procedure or your cmd.Execute returned an empty recordset or the driver you are using for the connection genuinely does not support the property.
'******************************
'An example wrapper function to assist you
'*******************************
Function GetColumns(Byval strConnectionString , ByVal as_tablename )

    Dim lvar
    Dim intRecord
    Dim cmdcolumnlist
    Dim rscolumnlist
    Dim cn
      
      set cn = Server.CreateObject("ADODB.Connection")
      cn.Open strConnectionString
      set cmdcolumnlist = Server.CreateObject("ADODB.Command")
    Set cmdcolumnlist.ActiveConnection = cn
   
    cmdcolumnlist.CommandText = "sp_columns"
    cmdcolumnlist.CommandType = adCmdStoredProc
    cmdcolumnlist.Parameters.Refresh
    'Check the return codes
    cmdcolumnlist.Parameters(1).Value = as_tablename
    cmdcolumnlist.Parameters(2).Value = "dbo"
    cmdcolumnlist.Parameters(3).Value = "TestDatabase"
    Set rscolumnlist = cmdcolumnlist.Execute()
'return the recordset in a variant array
    lvar = rscolumnlist.GetRows()
    GetColumns = lvar
    cn.Close
   
    Set cn = Nothing
    Set rscolumnlist = Nothing
    Set cmdcolumnlist = Nothing
End Function

You could now use this wrapper function
<%
 Dim ivar_test
 Dim i
 ivar_test = GetColumns("FILEDSN=test.dsn", "Employees")
'lvar is a 2D array
For intRecord = 0 to Ubound(lvar , 2)  
 Response.write lvar(1, intRecord) & " " & lvar(2, intRecord)
'......your code for manipulation
'please remember you could have easily 'returned a ADODB or ADOR Recordset and manipulated the recordset.



Next
%>
'Hope this helps.
0
 

Accepted Solution

by:
ssripathy earned 200 total points
ID: 2847050
'sorry, need a correction in the last part of the code to replace ivar_test with lvar

'You could now use this wrapper function
<%
 Dim lvar
 Dim i
 lvar = GetColumns("FILEDSN=test.dsn", "Employees")
'lvar is a 2D array
For intRecord = 0 to Ubound(lvar , 2)  
 Response.write lvar(1, intRecord) & " " & lvar(2, intRecord)
'......your code for manipulation
'please remember you could have easily 'returned a ADODB or ADOR Recordset and manipulated the recordset.



Next
%>
'Hope this helps.

0
 

Author Comment

by:yassin092898
ID: 2847589
Comment accepted as answer
0

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Have you ever needed to get an ASP script to wait for a while? I have, just to let something else happen. Or in my case, to allow other stuff to happen while I was murdering my MySQL database with an update. The Original Issue This was written…
This demonstration started out as a follow up to some recently posted questions on the subject of logging in: http://www.experts-exchange.com/Programming/Languages/Scripting/JavaScript/Q_28634665.html and http://www.experts-exchange.com/Programming/…
In this brief tutorial Pawel from AdRem Software explains how you can quickly find out which services are running on your network, or what are the IP addresses of servers responsible for each service. Software used is freeware NetCrunch Tools (https…
This tutorial will teach you the special effect of super speed similar to the fictional character Wally West aka "The Flash" After Shake : http://www.videocopilot.net/presets/after_shake/ All lightning effects with instructions : http://www.mediaf…

800 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question