webForumDet fria alternativet

ADODB.Recordset error '800a0cc1'

4 svar · 308 visningar · startad av Mav

MavMedlem sedan juni 2000117 inlägg
#1

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....

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Vilken rad är 38?

Vad har du för krånglig datamodell egentligen?

MavMedlem sedan juni 2000117 inlägg
#3

Rad 38 är:
ProfileArray(intRow,3) = rs("attribute_"&intRow)
Jo, jag vet datamodellen kom på köpet....

@ndersMedlem sedan juni 200032 969 inlägg
#4

Hmm
Har du lika många kolumner som poster i recordsetet?

MavMedlem sedan juni 2000117 inlägg
#5

ja, det jag inte kan förstå är att det fungerar när jag kör mot en annan tabell i databasen men helt plötsligt inte mot andra....

132 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)