Multidesk.be » Forums » ASP » recordset = geen object terwijl recordset.open (gesloten)

Helpinformatie
Dit onderwerp bevindt zich in het archief.
Het is bijgevolg niet mogelijk er nog op te reageren.
  • Pagina
  • [1]
  • 2
  • RSS
  • Eerste ongelezen reactie
  • Plaats een reactie
  • Abonneer mij
  • Onderwerp sluiten
0 gasten lezen dit onderwerp.
^ Onderwerp geschreven door Suriv op woensdag 6 december 2006 om 22:01:46.
Suriv's avatar
Multiviteit: 7607
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Kzit met een wreed probleem waar ik niet aan uitgeraak.

Telkens wanneer ik onderstaande code aanroep, krijg ik error
Runtimefout Microsoft VBScript (0x800A01A8)
Object vereist
pagina.asp, line 215


line 215 is de (onderstreepte) lijn met rs.movenext.
Wat ik vreemd vind is dat ik geen error krijg bij if not rs.eof then response.Write("<h4>Reacties</h4>")...

Hier is de (ingekorte) code die ik gebruik:
ASP
  1. <%
  2. dim intNummer
  3.  
  4. set conn = server.CreateObject("ADODB.connection")
  5. db = application("dbProc")
  6. conn.open db
  7.  
  8. set rs = Server.CreateObject("ADODB.recordset")
  9. sql = "SELECT * FROM tblReacties WHERE Fieldname='" & strNaam & "'"
  10. rs.Open sql, conn
  11.  
  12. if not rs.eof then response.Write("<h4>Reacties</h4>") 
  13.  
  14. do while not rs.eof
  15.         intNummer = rs("Nummer") %>
  16.         <table width="620px" cellspacing="0">   
  17.                 <tr>
  18.                         <th id="Tabel">
  19.                                 <%                 
  20.                                 response.Write("<p>Door <strong>" & rs("Naam") & "</strong> op " & rs("Datum") & "<br /><small>")
  21.                                 %>
  22.                         </th>
  23.                 </tr>
  24.                 <tr>           
  25.                         <th id="Tabel"
  26.                                 <p class="Reactie">
  27.                                 <% response.Write(vervang(rs("Reactie"))) %>
  28.                                 </p>
  29.                         </th>
  30.                 </tr>
  31.                 <% if session("blnAdmin") = true then %>
  32.                         <tr>
  33.                                 <th id="Tabel">   
  34.                                         <p>&bull; <a href="admin/reactie_verwijderen.asp?r=<%=intNummer%>">Deze reactie verwijderen</a><br />
  35.                                         &bull; <a href="admin/reactie_bewerken.asp?r=<%=intNummer%>">Deze reactie bewerken</a></p>                                   
  36.                                 </th>
  37.                         </tr>
  38.                 <% end if %>
  39.         </table>
  40.         &nbsp;
  41.         <%                 
  42.         [u]rs.movenext[/u]
  43. loop
  44.  
  45. rs.close
  46. conn.close
  47.  
  48. set rs = nothing
  49. set conn = nothing
  50. %>


Alvast bedankt :)
Deze tekst werd het laatst bewerkt voor 0.44 % door Suriv op woensdag 6 december 2006 om 22:02:07.
^ Reactie #1 geschreven door Martijn op woensdag 6 december 2006 om 22:33:28.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Ik zie ook niet meteen een fout. Hoeveel records haal je op via de query? Misschien dat dat een fout aan het licht brengt...
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #2 geschreven door thekid op woensdag 6 december 2006 om 23:41:12.
thekid's avatar
Multiviteit: 5273
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Suriv, eens uitvoeren zonder de recordset te declareren. dat is meestal al genoeg ;)

dus
CODE
  1.  
  2. <%
  3.  dim db, rs, sql, con
  4.  con = "connectiestring"
  5.  
  6.  set db = server.createobject("adodb.connection")
  7.  db.open con
  8.  sql = "select * from table where categorie = 1"
  9.  set rs = db.execute(sql)
  10. %>
  11.  


is al genoeg, vroeger ook problemen daarmee gehad
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #3 geschreven door Suriv op donderdag 7 december 2006 om 19:58:00.
Suriv's avatar
Multiviteit: 7607
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Helaas, je methode helpt niet thekid...
Ik heb
CODE
  1. set conn = server.CreateObject("ADODB.connection")
  2. db = application("dbProc")
  3. conn.open db
  4.  
  5. set rs = Server.CreateObject("ADODB.recordset")
  6. sql = "SELECT * FROM tblReacties WHERE Fieldname='" & strNaam & "'"
  7. rs.Open sql, conn


vervangen door

CODE
  1. set conn = server.CreateObject("ADODB.connection")
  2. db = application("dbProc")
  3. conn.open db
  4.                
  5. sql = "SELECT * FROM tblReacties WHERE Proces='" & strNaam & "'"
  6. set rs = conn.execute(sql)


Geen resultaat :(

@ Martijn, met 1 record lukt het niet, met 2 ook niet.... dus volgens mij ligt het daar niet aan.
Deze tekst werd het laatst bewerkt voor 0.53 % door Suriv op donderdag 7 december 2006 om 19:58:30.
^ Reactie #4 geschreven door Martijn op donderdag 7 december 2006 om 20:04:42.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Zet die hele lus eens in die if not rs.EOF. Verandert dat iets aan de zaak?
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #5 geschreven door Suriv op donderdag 7 december 2006 om 20:06:20.
Suriv's avatar
Multiviteit: 7607
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Dat had ik al eens geprobeerd, maar helaas, geen verandering.
^ Reactie #6 geschreven door SMG op donderdag 7 december 2006 om 20:20:22.
SMG's avatar
Multiviteit: 12000
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Nu weet ik niet of dit het zal oplossen maar wat moet dit voorstellen:
ASP
  1. <%=intNummer%>
  2. en
  3. <%=intNummer%>
Moet dit niet response.write zijn?

Lost dit het op?
^ Reactie #7 geschreven door Martijn op donderdag 7 december 2006 om 20:25:33.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Is de verkorte versie. Niet echt netjes gecodeerd vinden sommigen, maar in principe werkt het wel.
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #8 geschreven door SMG op donderdag 7 december 2006 om 20:30:21.
SMG's avatar
Multiviteit: 12000
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Ah oke weer iets bijgeleerd :p
^ Reactie #9 geschreven door thekid op donderdag 7 december 2006 om 21:53:51.
thekid's avatar
Multiviteit: 5273
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
suriv

zet anders eens een response.flush() voor je rs.movenext en bovenaan je pagina (als die er al niet staat) <%response.buffer = true%>. Uw response.flush zal dat alles al uitspuwen alvorens de pagina volledig verwerkt is (kan je dus wat response.write("test stap 1...2...3") er tussen zetten om te kijken (da's buggy debugging, maar all, werkt bij mij meestal :D)

Verder, heb je ergens een option explicit in je code staan? Ik vind het raar dat het op die lijn zou zijn, aangezien je in je loop geraakt. Dit is wel degelijk op je IIS uitgevoerd en niet op Chilisoft ASP (of Sun Active Pages). Op die laatste klopt de lijnnr nl niet altijd :s

en als laatste maar dit is puur uit voorkeur, ik gebruik liefst vanal een while not rs.eof : ' code : wend , in plaats van een do while loop. Dit is puur subjectief natuurlijk :D
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #10 geschreven door Suriv op donderdag 7 december 2006 om 22:12:28.
Suriv's avatar
Multiviteit: 7607
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Ah, kheb met <% response.buffer = true %> (waarvoor dient dat?) en <% response.flush %> een resultaat bereikt:

Als er 2 records in de database staan, zie ik alleen het eerste record, en daarna geeft hij een error.

PS Wat zijn de voordelen van do ... loop tov while ... wend?
^ Reactie #11 geschreven door thekid op donderdag 7 december 2006 om 22:15:52.
thekid's avatar
Multiviteit: 5273
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
een Response.Buffer doet zoals zijn naam voorstelt, hij buffert uw pagina alvorens deze door te zender naar de client. Met een flush clear je die buffer.

Wel op letten, als je een response.buffer gebruikt, moet je wel response.clear gebruiken alvorens je een response.redirect gebruikt (drunk)

steek een je lus in een while ... wend, en zie of er voordelen zijn, h ;)
Deze tekst werd het laatst bewerkt voor 0.53 % door thekid op donderdag 7 december 2006 om 22:19:16.
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #12 geschreven door Suriv op vrijdag 8 december 2006 om 08:03:21.
Suriv's avatar
Multiviteit: 7607
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Kheb geprobeerd om voor die rs.movenext (dus met de foutmelding) if rs.eof then exit do te zetten, maar dat lukt gelijk nie, dan krijg ik mn foutmelding daarop. :(

En thekid, er is geen verschil of ik nu do...loop of while...wend gebruik.

PS Is er een nadeel als je je variabelen op deze manier (zowel in ASP als VB) declareert:
dim xxx, xxx1, xxx2, xxx3 (as string)?

En als je dit doet:
if rs.eof then exit do
ipv
if rs.eof then
exit do
end if
^ Reactie #13 geschreven door thekid op vrijdag 8 december 2006 om 12:30:12.
thekid's avatar
Multiviteit: 5273
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
bwoa in asp moet je zelfs niet declareren (tenzij je met arrays wilt werken, of als je option explicit boven aan je pagina zet (dan ben je verplicht alle variabelen te declareren)).

Vroeger was dat een nadeel in Qbasic/VB6 omdat je dan geen valuetype gaf aan objecten, alleen als de laaste
dim X, Y as integer ' geeft dus enkel Y as integer, X as object
maar nu maakt dat niet meer uit.

Da maakt niet uit of je nu checked in je loop, hij mag sowieso geen fout geven (want je leest nog niks in van je lege datarow, en je loop zou dan alles moeten verbreken).

Is dit de volledige versie van je code (in die zin bedoel ik, gebruik je nog ergens een include, of een stuk die je eruitgehaald hebt waar je toevallig de rs sluit of met nothing vervangt?)

kan je gewoon eens testen als je hetvolgende uitvoert:

CODE
  1.  
  2.     Dim i
  3.         Response.Write("<table><tr>")
  4.         for each i in rs.fields
  5.                 Response.Write("<td>" & i.name & "</td>")
  6.         next
  7.         Response.Write("</tr>")
  8.         while not rs.eof
  9.                 Response.Write("<tr>")
  10.                 for each i in rs.fields
  11.                         Response.Write("<td>" & i & "</td>")
  12.                 next
  13.                 Response.Write("</tr>")
  14.                 rs.movenext
  15.         wend
  16.         Response.Write("</table>")
  17.        
  18.         rs.close
  19.         set rs = nothing
  20.  


Deze zal je resultatenset overlopen, en dus eerst alle labels bovenaan in een tabel zetten, en daarna alle records per rij in de tabel plaatsen. Alles in 1 lange <% %> asp quote plaatsen (zoveel mogelijk je HTML codering in ASP proberen te plaatsen, uiteindelijk is het veel leesbaarder, en een ASP is een interpreter, de pagina wordt niet gecompileerd. iedere keer als de ASP quotes zich openen "<%" wordt de interpreter gestart en op het einde weer gestopt %>. 1 grote asp code blok is dus veel sneller uit te voeren, dan vele kleintjes, en zeker eenvoudiger te debuggen :D

Ik heb die code op mijnen IIS ier uitgevoerd, en, bij mij werkte ze
resultaat:
CODE
  1.  
  2. ID      MODEL Variant  Chassis   Km Pk       Cc     Kw   Referentie Brandstof        Kleur   Registratie        ingevoerdOp     onlineTot    Opmerking   Prijs      UserID
  3. 1       11537  Ambiente  CCDFQDSFDDEEE     2500000      74    1796        55      VAL624        DIESEL  Blue      11/10/1999    4/12/2006   13/12/2006 Vehicle in good condition        6000    1
  4. 2       11268    VWVDFQSDF45687    25000       300    3796        221     DSM001       BENZINE        Black   11/01/2005 5/12/2006        12/12/2006      Car available at once Direct purchase of this vehicle for 37.000      36000 1
  5.  
Deze tekst werd het laatst bewerkt voor 8.9 % door thekid op vrijdag 8 december 2006 om 12:32:43.
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #14 geschreven door Suriv op vrijdag 8 december 2006 om 18:52:02.
Suriv's avatar
Multiviteit: 7607
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Deze code werkt wl.
Hoe in godsnaam is het dan mogelijk dat mijn code niet werkt:s
^ Reactie #15 geschreven door thekid op vrijdag 8 december 2006 om 18:59:52.
thekid's avatar
Multiviteit: 5273
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
wat doet uw functie vervang juist? ontbreken er stukken uit uw geplakte code hier? wie weet staat er ergens een set rs = nothing in de code die ie dan toevallig meeneemt?
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #16 geschreven door Suriv op vrijdag 8 december 2006 om 19:08:18.
Suriv's avatar
Multiviteit: 7607
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
In de stukken die ik ingekort heb in mn code staat nergens rs.close of set rs = nothing.

In de functie vervang wordt de functie ReplaceEmoticons aangesproken, das de enige functie met iets met databases:
ASP
  1.  
  2. function ReplaceEmoticons(strString)
  3.         dim txt
  4.         txt = strString
  5.  
  6.         set conn = server.CreateObject("ADODB.connection")
  7.         db = application("dbUsers")
  8.         conn.open db
  9.  
  10.         set rs = Server.CreateObject("ADODB.recordset")
  11.         sql = "SELECT * FROM tblSmilies"
  12.         rs.Open sql, conn
  13.        
  14.         do while not rs.eof
  15.                 if rs("Key1") <> "" then txt = replace(txt, rs("Key1"), "<img src=""" & rs("Locatie") & """ alt=""" & rs("Key1") & """ title=""" & rs("Titel") & """ />")
  16.                 if rs("Key2") <> "" then txt = replace(txt, rs("Key2"), "<img src=""" & rs("Locatie") & """ alt=""" & rs("Key2") & """ title=""" & rs("Titel") & """ />")
  17.                 if rs("Key3") <> "" then txt = replace(txt, rs("Key3"), "<img src=""" & rs("Locatie") & """ alt=""" & rs("Key3") & """ title=""" & rs("Titel") & """ />")
  18.                
  19.                 rs.movenext
  20.         loop
  21.  
  22.         rs.close
  23.         conn.close
  24.        
  25.         set rs = nothing
  26.         set conn = nothing
  27.        
  28.         ReplaceEmoticons = txt
  29. end function


PS Moest je suggesties hebben, of fouten of onnauwkeurigheden vinden, weet het me te zeggen h ;)
Deze tekst werd het laatst bewerkt voor 2.79 % door Suriv op vrijdag 8 december 2006 om 19:09:27.
^ Reactie #17 geschreven door thekid op vrijdag 8 december 2006 om 19:12:36.
thekid's avatar
Multiviteit: 5273
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
ik zou eens iets anders dan rs voor uw replaceEmoticons recordset gebruiken :D

hernoemt hier gewoon in deze functie uw rs naar emoRs ofzo en da zal werken ;)
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #18 geschreven door Suriv op vrijdag 8 december 2006 om 19:19:39.
Suriv's avatar
Multiviteit: 7607
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
_o_ thx thekid :)
Tis gelukt

Heb je ook antwoord op deze vraag:
Is er een nadeel aan als je dit doet:
if rs.eof then exit do
ipv
if rs.eof then
exit do
end if
^ Reactie #19 geschreven door thekid op vrijdag 8 december 2006 om 19:48:19.
thekid's avatar
Multiviteit: 5273
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
ik verkies toch wel met een end if erachter.

Reden daarvoor is dat het je code een stuk leesbaarder maakt :D
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
  • Pagina
  • [1]
  • 2
  • RSS
  • Eerste ongelezen reactie
  • Plaats een reactie
  • Abonneer mij
  • Onderwerp sluiten