webForumDet fria alternativet

Skicka ett RecordSet som värde från funktion

ASP

11 svar · 275 visningar · startad av daniel_ra

Medlem sedan jan. 2002381 inlägg
Frågan#1

Kan jag på något vis returnera ett Recordset från en funktion
som jag kan använda utanför.

tänkte mig att jag bara skall ange en sql-fråga som parameter till funktionen och sedan få tillbaka ett recordset som jag kan använda hur som helst utanför funktionen.

Medlem sedan aug. 20021 752 inlägg
#2

Långt ifrån en ASP expert men borde inte detta fungera?

Public Sub Hello()
     Dim rs As Recordset
     rs=getRecord("SELECT * FROM users")
     ' Använd rs här
End Sub

Public Function getRecord(ByVal query As String) As Recordset
     Dim rs As Recordset
     ' kör din sql kod och fyll ditt recordset
     getRecord=rs
End Sub

/Viktor

Medlem sedan feb. 200112 078 inlägg
#3

Det är fungerar alldeles utmärkt, Viktor, förutom att man inte kan deklarera datatyper i VBScript, vilket gör att man får ta bort 'As Recordset' (som förövrigt bör föregås av ADODB.) från de ställen där du deklarerar ett recordset.

Medlem sedan jan. 2002381 inlägg
#4

får det inte att fungera, nåt fel gör jag men jag kan inte komma på vad.


sqlfraga = "select * from tabell"

dim test as Recordset
				
test=hamta(sqlfraga)

function hamta(varde)

call opendb()

sql = varde

set RecSet = Server.CreateObject("ADODB.Recordset")
RecSet.CursorLocation = 3
RecSet.open sql, Connect

hamta = RecSet

call closedb()

end function
Medlem sedan feb. 200112 078 inlägg
#5

För det första, ett felmeddelande hade varit bra. Men jag gissar fortfarande på den här raden;

dim test as Recordset

Om du läser mitt ovanstående inlägg så förstår du.

Medlem sedan jan. 2002381 inlägg
#6

men om jag bara skriver

sqlfraga = "select * from tabell"

test=hamta(sqlfraga)

får jag detta felmeddelande

vAsp Scripting Error
Error: 450 Wrong number of arguments or invalid property assignment: 'test'
File:
Source: Microsoft VBScript runtime error
Line: 128
Code: test=hamta(sqlfraga)

förstår inte vad det betyder

Medlem sedan feb. 200112 078 inlägg
#7

Äsch, givetvis! Jag missade det viktigaste!

Du måste ha 'Set' framför de ställen där du skall tilldela ett recordset. T.ex;

set rs = hamta("SELECT * FROM tblBaluba")
'och
set rs = Server.Createobj...[..]
Medlem sedan feb. 200112 078 inlägg
#8

Alltså;

sqlfraga = "select * from tabell"
dim test as Recordset
set test=hamta(sqlfraga)

function hamta(varde)
   call opendb()

   sql = varde
   set RecSet = Server.CreateObject("ADODB.Recordset")
   RecSet.CursorLocation = 3
   RecSet.open sql, Connect
   set hamta = RecSet
   [b]set RecSet = Nothing[/b]   
   call closedb()
   

end function
Medlem sedan jan. 2002381 inlägg
#9

men om man bara skriver såhär:

set test=hamta(sql)

vad blir test för objekt då?

jag kan iallafall inte loopa igenom test eller kolla hur många rader det är eller för den delen skriva ut innehållet.

Error: 438 Object doesn't support this property or method: 'test.Recordcount'
File: 
Source: Microsoft VBScript runtime error
Line: 128
Code: response.tWrite(test.Recordcount)
Medlem sedan jan. 2002381 inlägg
#10

nu har jag skrivit exakt som du föreslog men jag får fortfarande nåt felmeddelande på raden

dim test as Recordset

Error: 1025 Expected end of statement
File:
Source: Microsoft VBScript compilation error
Line: 125
Code: dim test as Recordset

Medlem sedan mars 20041 505 inlägg
#11

Men alltså det ska inte stå dim test as Recordset! Bara dim test...

Medlem sedan feb. 200112 078 inlägg
#12

Ja, all öl igår har npg slagit ut alldeles för många hjärnceller i dag. Givetvis skall det se ut såhär, precis som Troxy säger, dessutom finns det ju faktiskt inte något Connection-objekt som motsvarar din deklaration som heter 'Connect'.

Gör såhär istället;

sql = "select * from tabell"
dim rs
set rs = GetRs(sql)

function GetRs(sql)
   Dim conn, rs
   set conn = getConn() '#returnerar ett ADODB.Connection-objekt

   set rs = Server.CreateObject("ADODB.Recordset")
   rs.CursorLocation = 3
   rs.CursorType = 1
   rs.open sql, conn
   set GetRs = rs

   set rs = Nothing
   Set conn = Nothing   

end function

'# förslag på hur GetConn() kan se ut:
function GetConn()
   Dim conn
   Set conn = Server.Createobject("ADODB.Connection")
   conn.open "Provider=Microsoft.Jet.... [..]"
   Set GetConn = conn
   Set conn = nothing
end function
251 ms totalt · 3 externa anrop · v20260731065814-full.f363f448
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)