Hej!
Jag försöker hämta värden på en mottagare och publicera dem på en "profil" sida. Jag använder mig av en stored procedure för det. Problemet är att allt fungerar perfekt mot vissa tabeller och mot andra får jag felmeddelandet:
===============
ADODB.Recordset error '800a0cc1'
Item cannot be found in the collection corresponding to the requested name or ordinal.
profile.asp, line 38
===============
Det är ingen skillnad på tabellerna, de gör samma sak och jag försöker hämta på samma sätt.
Kör jag de stored procedures som jag har via Query analyzer fungerar det oxå men kör jag samma via asp sidan blir det fel.
Så här ser asp koden ut och stored procedure. Den rad jag får felmeddelandet på är "ProfileArray(intRow,3) = rs("attribute_"&intRow)":
<%
'global variabel (en array) som håller i profilen
Dim ProfileArray(200,200)
Dim emaildb
'rutin som hämtar profilen och kolumn-namnen från databasen och lägger i arrayen. Anropas endast 1 gång per profil.
Sub GetProfileFromDatabase(acount_nr, email)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'kopplar upp mot db
set conn = Server.Createobject("adodb.connection")
conn.Open = "Provider=sqloledb;" & _
"Data Source=xxxxxxxx;" & _
"Initial Catalog=xxxxxxxxxx;" & _
"User Id=xxxxxxxxxx;" & _
"Password=xxxxxxxxxx"
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'hämtar data från db om profilen och kolumnerna
set rs = Server.CreateObject("ADODB.RecordSet")
set rs=conn.execute("execute sp_maila_get_profile " & acount_nr &",'" & email & "'")
set rs_column = Server.CreateObject("ADODB.RecordSet")
set rs_column=conn.execute("execute sp_maila_get_column_name " & acount_nr)
'profilens data
if not rs.EOF then
Dim intRow
intRow=1
'skapar en array med columnnamn, attributenamn och värdet
while not rs_column.EOF
emaildb=rs("member_email")
column=rs_column("column_name")
attribute=rs_column("attribute_name")
ProfileArray(intRow,1) = rs_column("column_name")
ProfileArray(intRow,2) = rs_column("attribute_name")
ProfileArray(intRow,3) = rs("attribute_"&intRow)
intRow = intRow + 1
rs_column.movenext
wend
end if
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'kopplar ner från db och stänger recordset
rs.close
rs_column.close
conn.close
set conn = nothing
End Sub
'funktion som tar in ett kolumnanmn ex "city",
'letar upp vad kolumnen heter på riktigt, ex "attribute_37", och returnerar profilens värde, ex "stockholm"
Function GetAttribute(attribute_name)
Dim j, k, value
if attribute_name = "email" then
value = emaildb
else
For j = LBound(ProfileArray,1) To UBound(ProfileArray,1)
k = instr((ProfileArray(j,2)),attribute_name)
value = ProfileArray(j,3)
if k<>0 then exit for
next
end if
GetAttribute = value
End Function
%>
Stored procedure:
CREATE procedure dbo.sp_maila_get_column_name
@acount_id varchar(10)
as
set nocount on
declare @selectstring varchar(400), @table_owner int, @table_name varchar(255)
--KOLLAR OM DET ÄR VEM SOM ÄR ÄGARE TILL TABELLEN.
select @table_name = 'c' +@acount_id + '_member'
EXECUTE inxmail.dbo.sp_maila_get_table_owner @table_name, @table_owner OUTPUT
if @table_owner = 1
begin
select @selectstring = 'select attribute_name, column_name from inxmail.inxmail_db.c' + @acount_id + '_attribute order by attribute_id'
exec (@selectstring)
end
else
begin
select @selectstring = 'select attribute_name, column_name from inxmail.dbo.c' + @acount_id + '_attribute order by attribute_id'
exec (@selectstring)
end
GO
Hoppas ngn kan hjälpa mig, har snart bara gråa hår....