Avatar billede fuxi Nybegynder
03. marts 2001 - 16:02 Der er 8 kommentarer og
1 løsning

Functioner og Recordset

Jeg har et lille problem, jeg har lavet en funktion der ser ud som følgende:

Function getAllCountries()   
    Set objCon = Server.CreateObject(\"ADODB.Connection\")
    Set rs = Server.CreateObject (\"ADODB.Recordset\")   
    strConnection = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\" & server.mappath(\"test.mdb\") & \"\"
    objCon = strConnection
    strSQL = \"SELECT id, international_name FROM Destinations WHERE destination_type = 3\"
    rs.Open strSQL, objCon
    getAllCountries = rs
End Function

Ideen er at funktionen skal hente en række lande ud af en database.
Nu vil jeg så gerne kalde den funktion og dermed få en kopi af det RecordSet der bliver returneret via funktionen.

Normalt ville jeg bare sige at man skulle lave følgende:

rstest = Server.CreateObject (\"ADODB.Recordset\")   
rstest = getAllCountries()

Jeg kan ikke få det til at virke, hvad pokker gør jeg forkert ???
Kan det overhovedet lade sig gøre ???



Avatar billede tpiil Nybegynder
03. marts 2001 - 16:07 #1
prøv dette:
strSQL = \"SELECT * FROM Destinations WHERE destination_type = 3\"
Avatar billede tpiil Nybegynder
03. marts 2001 - 16:07 #2
Avatar billede fuxi Nybegynder
03. marts 2001 - 16:20 #3
Hej Tpiil

Jeg tror ikke helt du forstod spørgsmålet... Jeg er 100% sikker på der ikke er noget galt med SQL\'en eftersom det virker uden for en funktion....

Problemet ligger i at jeg ikke kan finde ud af hvordan jeg for lavet et RecordSet ud fra min funktion.

Jeg havde håbet på at jeg kunne kalde funktionen med følgende kode:

rstest = Server.CreateObject (\"ADODB.Recordset\")   
rstest = getAllCountries()

While Not rstest.eof
  response.Write rstest(\"ID\")
  rstest.MoveNext
Wend
Avatar billede jespernaur Nybegynder
03. marts 2001 - 16:25 #4
Jeg mener du skal bruge Set til alle operationer, der involverer objekter, altså noget i retning af:

Function getAllCountries()   
    Set objCon = Server.CreateObject(\"ADODB.Connection\")
    Set rs = Server.CreateObject (\"ADODB.Recordset\")   
    strConnection = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\" & server.mappath(\"test.mdb\") & \"\"
    objCon = strConnection
    strSQL = \"SELECT id, international_name FROM Destinations WHERE destination_type = 3\"
    rs.Open strSQL, objCon
    Set getAllCountries = rs
End Function

Derudover er den første af de følgende 2 linier skønne spildte kræfter, da rstest bliver overskrevet umiddelbart efter af linie 2

rstest = Server.CreateObject (\"ADODB.Recordset\")    !! denne linie er overflødig
Set rstest = getAllCountries()

(har ikke testet det, så prøv selv)

Mvh
Jesper Naur
Avatar billede fuxi Nybegynder
03. marts 2001 - 16:34 #5
Hej Naur

Det ser ud til at virke, og så alligevel ikke...
Jeg får en kopi af objectet men får følgende fejl når jeg prøver på at køre en while på recordsetet

Error Type:
Microsoft VBScript runtime (0x800A01B6)
Object doesn\'t support this property or method: \'rs.bof\'
/bplanet/back/test.asp, line 8

Min kode ser nu ud som følgende:
Set rs = getAllCountries()

While Not (rs.bof or rs.eof)
response.write rs(\"id\")&\"<br>\"
rs.MoveNext
Wend

Avatar billede horsmark Nybegynder
03. marts 2001 - 22:43 #6
Do While Not RS.eof
response.write rs(\"id\")&\"<br>\"
rs.MoveNext
Loop
?? måske?
Avatar billede fuxi Nybegynder
03. marts 2001 - 23:55 #7
Nope, men jeg har selv fundet ud af det...

Dog giver jeg mine point til Jesper Naur, eftersom det var meget meget tæt på løsningen
Avatar billede horsmark Nybegynder
03. marts 2001 - 23:58 #8
Fuxi kan du hjælpe mig med at svare på nedenstående spørgsmål, jeg er ret presset :-(

Mvh.
Jesper HorsMark

http://www.eksperten.dk/spm/54101
Avatar billede jpe Nybegynder
22. maj 2003 - 16:36 #9
det ville være rart hvis svaret blev skrevet her. Bare lige for en ordens skyld
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester