webForumDet fria alternativet

Object required

1 svar · 183 visningar · startad av OveRRidE

OveRRidEMedlem sedan feb. 200112 078 inlägg
#1

Jag försöker skapa en komponent som returnerar ett recordset åt mig, men får det inte att fungera..

I min komponent:
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
Public Function returnRecordset(ByVal SQL As String) As ADODB.Recordset
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=H:\webroot\data.mdb")
Set returnRecordset = Connect.execute(SQL)
End Function

I asp-filen
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
dim objRs
set objRs = Server.CreateObject("DB.openDb")

set rs = objRs.returnRecordset("SELECT * FROM data") <-- FELMESS

<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
Error Type:
DB (0x800A01A8)
Object required
/default.asp, line 5

Jag har kompilerat och reggat den. WinXP Pro, IIS 5.1.

------------------
"-Of all the things i´ve lost, i miss my mind the most.-Ozzy

[Redigerat av OveRRidE den 18 jan 2002]

fredrikMedlem sedan dec. 19991 072 inlägg
#2

Om du gör en test-applikation i VB (nytt projekt som standard-EXE) där du testar din komponent, fungerar den då?

Det är mycket enklare att felsöka komponenter från ett test-program då du kan stega dig igenom komponenten med F8.

En annan sak är att du i detta fallet inte stänger din Connection mot databasen. Den öppnas ju bara och då kommer den att ligga kvar mot databasen och det är mycket tidsödande och medverkar ofta till IIS kraschar.

Vidare så är det inte alltid så smidigt att hårdkoda in databassträngen utan kanske bättre att ta den som inparameter på antingen metoden eller som egenskap i klassen.

Att använda ett vanligt Recordset är inte heller så bra utan i detta fallet hade det nog varit bättre om du hade returnerat ett "bortkopplat" (disconnected) Recordset.

Du skulle då kunna skriva:
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
public function rsReturnFromSQL(byVal strSQL as string, vntDBcn as variant) as adodb.recordset
dim rsObj as adodb.recordset
set rsObj = new Adodb.recordset
rsObj.open strSQl, vntDbCn
set rsObj.activeConnection = Nothing
set rsReturnFromSQL = rsObj
end function

Det gör att när du erhåller objektet i ASP är redan databas-kopplingen avstängd och du får bara ett recordset med data utan databaskoppling.

Men glöm för det inte att stänga och radera objekts-instansen i din ASP-sida.

Hoppas det funkar bättre!

------------------
Fredrik Klarqvist
f.klarqvist@spray.se
http://server.webwerkstaden.se/fredde/

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