VB Function to return array to ASP
Web Server forum
Back To The Forum Home!Search!Private Messaging System

Web Server Talk Web Server Talk > Web Servers reviews > IIS server support > IIS ASP > VB Function to return array to ASP




Pages (2): [1] 2 »   Last Thread   Next Thread Next
  Show Printable Version Email this Page Subscribe to this Thread      Post New Thread    Post A Reply      

    VB Function to return array to ASP  
Raj


View Ip Address Report This Message To A Moderator Edit/Delete Message


 
03-23-07 12:24 PM

I need a VB function to return array of collections like

Private Type Employee
empname as string
address as string
salary as integer
deptno as integer
End Type

dim employees() as Employee

Public Function getEmployees() as Employee()
getEmployees=employees
End Function

I will call that function in ASP.

This was not working any other method is welcomed.

Regards,

Raj.







[ Post a follow-up to this message ]



    Re: VB Function to return array to ASP  
Anthony Jones


View Ip Address Report This Message To A Moderator Edit/Delete Message


 
03-23-07 12:24 PM


"Raj" <raj@track-mate.net> wrote in message
news:elhHDhRbHHA.208@TK2MSFTNGP05.phx.gbl...
> I need a VB function to return array of collections like
>
> Private Type Employee
>   empname as string
>   address as string
>   salary as integer
>   deptno as integer
> End Type
>
> dim employees() as Employee
>
> Public Function getEmployees() as Employee()
>   getEmployees=employees
> End Function
>
> I will call that function in ASP.
>
> This was not working any other method is welcomed.
>
> Regards,
>
> Raj.
>

First off the code above doesn't compile.  You can't expose a private type
as a return value of a public member.  You would need make the Employee type
public to get it to compile.  Unfortunately that still doesn't help a great
deal with ASP.

ASP only has one data type, the variant (or two if you count an array of
variants as a type).  Now whilst it is possible to re-arrange the VB code to
pass a reference to User-Defined type into a variant and thus into VBScript
you can't access the members of the type.  The VBScript parsing doesn't
allow for the 'type.member' notation to work both for objects and for UDTs
as it does in VB6.

If the ASP merely needs to hold reference to a type that is passed to
another component then that is possible as long as appropriate measures are
taken to ensure the interfaces are compatible with Script in this way (I.E.
takes a variant ByRef).

If you need the ASP code to be able to access the members of the type then
you will need to use a class instead:-

'Class Employee
Public empname as string
Public address as string
Public salary as integer
Public deptno as integer


'Your class

Dim employees() as Variant  ' Actuall contains employess objects

Public Function getEmployees() As Variant
getEmployees = employees
End Public

However that can get expensive.  It may be better to turn your class into a
form of a collection.  E.g.,

Dim employess() as Employee
Dim mlCount as Long

Public Property Get Item(ByVal Index As Long) As Employee
Set Item = employees(Index)
End Property

Public Property Get Count() as Long
Count = mlCount
End Property









[ Post a follow-up to this message ]



    Re: VB Function to return array to ASP  
Raj


View Ip Address Report This Message To A Moderator Edit/Delete Message


 
03-23-07 12:24 PM

Thanx indeed for the valuable input, but I still have problems:

Here's what I did:

Have created a standard exe project with two classes:

Employee:
Public empname As String
Public address As String
Public salary As Integer
Public deptno As Integer

Company:
Dim employess() As Employee
Dim mlCount As Long

Public Property Get Count() As Long
Count = mlCount
End Property

I had a form with Command Button. On it's click event I wrote like:

Private Sub Command1_Click()
Dim cmp1 As New Company

cmp1.Item(1) = New Employee
cmp1.Item(1).deptno = "10"
cmp1.Item(1).empname = "Raj"

cmp1.Item(2) = New Employee
cmp1.Item(2).deptno = "20"
cmp1.Item(2).empname = "Ram"

Print cmp1.Count
End Sub

Then I got a compile error at:
Public Property Get Item(ByVal Index As Long) As Employee
Set Item = employees(Index)
End Property

Error Message: Sub or Function not defined.

It seems I am missing something.

Please let me know.

Thank you very much.

Regards,

Raj.


----- Original Message -----
From: "Anthony Jones" <Ant@yadayadayada.com>
Newsgroups: microsoft.public.inetserver.asp.general
Sent: Friday, March 23, 2007 4:32 AM
Subject: Re: VB Function to return array to ASP


>
> "Raj" <raj@track-mate.net> wrote in message
> news:elhHDhRbHHA.208@TK2MSFTNGP05.phx.gbl... 
>
> First off the code above doesn't compile.  You can't expose a private type
> as a return value of a public member.  You would need make the Employee
> type
> public to get it to compile.  Unfortunately that still doesn't help a
> great
> deal with ASP.
>
> ASP only has one data type, the variant (or two if you count an array of
> variants as a type).  Now whilst it is possible to re-arrange the VB code
> to
> pass a reference to User-Defined type into a variant and thus into
> VBScript
> you can't access the members of the type.  The VBScript parsing doesn't
> allow for the 'type.member' notation to work both for objects and for UDTs
> as it does in VB6.
>
> If the ASP merely needs to hold reference to a type that is passed to
> another component then that is possible as long as appropriate measures
> are
> taken to ensure the interfaces are compatible with Script in this way
> (I.E.
> takes a variant ByRef).
>
> If you need the ASP code to be able to access the members of the type then
> you will need to use a class instead:-
>
> 'Class Employee
> Public empname as string
> Public address as string
> Public salary as integer
> Public deptno as integer
>
>
> 'Your class
>
> Dim employees() as Variant  ' Actuall contains employess objects
>
> Public Function getEmployees() As Variant
>    getEmployees = employees
> End Public
>
> However that can get expensive.  It may be better to turn your class into
> a
> form of a collection.  E.g.,
>
> Dim employess() as Employee
> Dim mlCount as Long
>
> Public Property Get Item(ByVal Index As Long) As Employee
>    Set Item = employees(Index)
> End Property
>
> Public Property Get Count() as Long
>    Count = mlCount
> End Property
>
>
>
>
"Anthony Jones" <Ant@yadayadayada.com> wrote in message
news:Ot%23by4SbHHA.1216@TK2MSFTNGP03.phx.gbl...
>
> "Raj" <raj@track-mate.net> wrote in message
> news:elhHDhRbHHA.208@TK2MSFTNGP05.phx.gbl... 
>
> First off the code above doesn't compile.  You can't expose a private type
> as a return value of a public member.  You would need make the Employee
> type
> public to get it to compile.  Unfortunately that still doesn't help a
> great
> deal with ASP.
>
> ASP only has one data type, the variant (or two if you count an array of
> variants as a type).  Now whilst it is possible to re-arrange the VB code
> to
> pass a reference to User-Defined type into a variant and thus into
> VBScript
> you can't access the members of the type.  The VBScript parsing doesn't
> allow for the 'type.member' notation to work both for objects and for UDTs
> as it does in VB6.
>
> If the ASP merely needs to hold reference to a type that is passed to
> another component then that is possible as long as appropriate measures
> are
> taken to ensure the interfaces are compatible with Script in this way
> (I.E.
> takes a variant ByRef).
>
> If you need the ASP code to be able to access the members of the type then
> you will need to use a class instead:-
>
> 'Class Employee
> Public empname as string
> Public address as string
> Public salary as integer
> Public deptno as integer
>
>
> 'Your class
>
> Dim employees() as Variant  ' Actuall contains employess objects
>
> Public Function getEmployees() As Variant
>    getEmployees = employees
> End Public
>
> However that can get expensive.  It may be better to turn your class into
> a
> form of a collection.  E.g.,
>
> Dim employess() as Employee
> Dim mlCount as Long
>
> Public Property Get Item(ByVal Index As Long) As Employee
>    Set Item = employees(Index)
> End Property
>
> Public Property Get Count() as Long
>    Count = mlCount
> End Property
>
>
>
>







[ Post a follow-up to this message ]



    Re: VB Function to return array to ASP  
Anthony Jones


View Ip Address Report This Message To A Moderator Edit/Delete Message


 
03-23-07 12:24 PM


"Raj" <raj@track-mate.net> wrote in message
news:%23t8blPTbHHA.4772@TK2MSFTNGP05.phx.gbl...
> Thanx indeed for the valuable input, but I still have problems:
>
> Here's what I did:
>
> Have created a standard exe project with two classes:
>
> Employee:
> Public empname As String
> Public address As String
> Public salary As Integer
> Public deptno As Integer
>
> Company:
> Dim employess() As Employee
> Dim mlCount As Long
>
> Public Property Get Count() As Long
>     Count = mlCount
> End Property
>
> I had a form with Command Button. On it's click event I wrote like:
>
> Private Sub Command1_Click()
> Dim cmp1 As New Company
>
> cmp1.Item(1) = New Employee
> cmp1.Item(1).deptno = "10"
> cmp1.Item(1).empname = "Raj"
>
> cmp1.Item(2) = New Employee
> cmp1.Item(2).deptno = "20"
> cmp1.Item(2).empname = "Ram"
>
> Print cmp1.Count
> End Sub
>
> Then I got a compile error at:
> Public Property Get Item(ByVal Index As Long) As Employee
>     Set Item = employees(Index)
> End Property
>
> Error Message: Sub or Function not defined.
>
> It seems I am missing something.
>
> Please let me know.
>
> Thank you very much.
>
> Regards,
>
> Raj.
>

Yeah you spelt employees wrong in the Dim.  However here is a more complete
solution:-

Company:
Private maoEmployees() As Employee
Private mlCount As Long

Public Property Get Count() As Long
Count = mlCount
End Property

Public Function AddEmployee() as Employee

If mlCount = UBound(maoEmployees) Then
ReDim Preserve maoEmployess(mlCount * 2) As Employee
End If

mlCount = mlCount + 1

Set AddEmployee = New Employess

Set maoEmployees(mlCount) = AddEmployee

End Function

Public Function Item(ByVal Index as Long) As Employee
Set Item = maoEmployees(Index)
End Public

Private Sub Class_Initialise()

ReDim maoEmployees(16) As Employee

End Sub

Now you populate with:-

Dim cmp1 As New Company

With cmp1.AddEmployee
.deptno = "10"
.empname = "Raj"
End With

With cmp1.AddEmployee
.deptno = "20"
.empname = "Ram"
End With

My question now is why VB6?
Why not just use VBScripts own Classes etc?











[ Post a follow-up to this message ]



    Re: VB Function to return array to ASP  
Raj


View Ip Address Report This Message To A Moderator Edit/Delete Message


 
03-24-07 12:26 PM

I am in the making of some component

I appreciate very much your help.
"Anthony Jones" <Ant@yadayadayada.com> wrote in message
news:OJyqGDUbHHA.4476@TK2MSFTNGP03.phx.gbl...
>
> "Raj" <raj@track-mate.net> wrote in message
> news:%23t8blPTbHHA.4772@TK2MSFTNGP05.phx.gbl... 
>
> Yeah you spelt employees wrong in the Dim.  However here is a more
> complete
> solution:-
>
> Company:
> Private maoEmployees() As Employee
> Private mlCount As Long
>
> Public Property Get Count() As Long
>    Count = mlCount
> End Property
>
> Public Function AddEmployee() as Employee
>
>    If mlCount = UBound(maoEmployees) Then
>        ReDim Preserve maoEmployess(mlCount * 2) As Employee
>    End If
>
>    mlCount = mlCount + 1
>
>    Set AddEmployee = New Employess
>
>    Set maoEmployees(mlCount) = AddEmployee
>
> End Function
>
> Public Function Item(ByVal Index as Long) As Employee
>    Set Item = maoEmployees(Index)
> End Public
>
> Private Sub Class_Initialise()
>
>    ReDim maoEmployees(16) As Employee
>
> End Sub
>
> Now you populate with:-
>
> Dim cmp1 As New Company
>
> With cmp1.AddEmployee
>    .deptno = "10"
>    .empname = "Raj"
> End With
>
> With cmp1.AddEmployee
>    .deptno = "20"
>    .empname = "Ram"
> End With
>
> My question now is why VB6?
> Why not just use VBScripts own Classes etc?
>
>
>
>
>
>







[ Post a follow-up to this message ]



    Re: VB Function to return array to ASP  
Raj


View Ip Address Report This Message To A Moderator Edit/Delete Message


 
03-24-07 12:26 PM

With cmp1.AddEmployee
.deptno = "20"
.empname = "Ram"
End With

Putting ? cmp1.Count return Subscript out of range error at line:

If mlCount = UBound(maoEmployees) Then


"Anthony Jones" <Ant@yadayadayada.com> wrote in message
news:OJyqGDUbHHA.4476@TK2MSFTNGP03.phx.gbl...
>
> "Raj" <raj@track-mate.net> wrote in message
> news:%23t8blPTbHHA.4772@TK2MSFTNGP05.phx.gbl... 
>
> Yeah you spelt employees wrong in the Dim.  However here is a more
> complete
> solution:-
>
> Company:
> Private maoEmployees() As Employee
> Private mlCount As Long
>
> Public Property Get Count() As Long
>    Count = mlCount
> End Property
>
> Public Function AddEmployee() as Employee
>
>    If mlCount = UBound(maoEmployees) Then
>        ReDim Preserve maoEmployess(mlCount * 2) As Employee
>    End If
>
>    mlCount = mlCount + 1
>
>    Set AddEmployee = New Employess
>
>    Set maoEmployees(mlCount) = AddEmployee
>
> End Function
>
> Public Function Item(ByVal Index as Long) As Employee
>    Set Item = maoEmployees(Index)
> End Public
>
> Private Sub Class_Initialise()
>
>    ReDim maoEmployees(16) As Employee
>
> End Sub
>
> Now you populate with:-
>
> Dim cmp1 As New Company
>
> With cmp1.AddEmployee
>    .deptno = "10"
>    .empname = "Raj"
> End With
>
> With cmp1.AddEmployee
>    .deptno = "20"
>    .empname = "Ram"
> End With
>
> My question now is why VB6?
> Why not just use VBScripts own Classes etc?
>
>
>
>
>
>







[ Post a follow-up to this message ]



    Re: VB Function to return array to ASP  
Anthony Jones


View Ip Address Report This Message To A Moderator Edit/Delete Message


 
03-25-07 06:21 PM


"Raj" <raj@track-mate.net> wrote in message
news:%23GDHyVebHHA.4808@TK2MSFTNGP04.phx.gbl...
> With cmp1.AddEmployee
>     .deptno = "20"
>     .empname = "Ram"
>  End With
>
> Putting ? cmp1.Count return Subscript out of range error at line:
>
>     If mlCount = UBound(maoEmployees) Then
>

You need to fix my spelling mistake;  this :-

ReDim Preserve maoEmployess(mlCount * 2) As Employee

Should be this:-

ReDim Preserve maoEmployees(mlCount * 2) As Employee

You should also ensure that all your modules start with the line:-

Option Explicit








>
> "Anthony Jones" <Ant@yadayadayada.com> wrote in message
> news:OJyqGDUbHHA.4476@TK2MSFTNGP03.phx.gbl... 
>
>







[ Post a follow-up to this message ]



    Re: VB Function to return array to ASP  
Raj


View Ip Address Report This Message To A Moderator Edit/Delete Message


 
03-27-07 12:15 PM

I did that already
"Anthony Jones" <Ant@yadayadayada.com> wrote in message
news:OBFipzvbHHA.4140@TK2MSFTNGP06.phx.gbl...
>
> "Raj" <raj@track-mate.net> wrote in message
> news:%23GDHyVebHHA.4808@TK2MSFTNGP04.phx.gbl... 
>
> You need to fix my spelling mistake;  this :-
>
> ReDim Preserve maoEmployess(mlCount * 2) As Employee
>
> Should be this:-
>
> ReDim Preserve maoEmployees(mlCount * 2) As Employee
>
> You should also ensure that all your modules start with the line:-
>
> Option Explicit
>
>
>
>
>
>
>
> 
>
>







[ Post a follow-up to this message ]



    Re: VB Function to return array to ASP  
Raj


View Ip Address Report This Message To A Moderator Edit/Delete Message


 
03-27-07 12:15 PM

It seems the Class_Initialize event of the Company class is never triggered.

"Anthony Jones" <Ant@yadayadayada.com> wrote in message
news:OBFipzvbHHA.4140@TK2MSFTNGP06.phx.gbl...
>
> "Raj" <raj@track-mate.net> wrote in message
> news:%23GDHyVebHHA.4808@TK2MSFTNGP04.phx.gbl... 
>
> You need to fix my spelling mistake;  this :-
>
> ReDim Preserve maoEmployess(mlCount * 2) As Employee
>
> Should be this:-
>
> ReDim Preserve maoEmployees(mlCount * 2) As Employee
>
> You should also ensure that all your modules start with the line:-
>
> Option Explicit
>
>
>
>
>
>
>
> 
>
>







[ Post a follow-up to this message ]



    Re: VB Function to return array to ASP  
Anthony Jones


View Ip Address Report This Message To A Moderator Edit/Delete Message


 
03-27-07 06:18 PM


"Raj" <raj@track-mate.net> wrote in message
news:OV8uRvFcHHA.4352@TK2MSFTNGP03.phx.gbl...
> It seems the Class_Initialize event of the Company class is never
triggered.
>

Another spelling error I used the english Class_Initialise.

Your spelling above is correct is that what your code is using?







[ Post a follow-up to this message ]



    Sponsored Links  




 





   All times are GMT. The time now is 08:02 AM.      Post New Thread    Post A Reply      
Pages (2): [1] 2 »   Last Thread   Next Thread Next


Most Popular forums 

Forum Jump:
Rate This Thread:

Forum Rules:
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is OFF
vB code is ON
Smilies are ON
[IMG] code is OFF
 
Medical and Health forum | Computer Games Reviews | Graphics design forum

Back To The Top
Home | Usercp | Faq | Register