Avatar billede jhoumann Nybegynder
15. maj 2003 - 11:46 Der er 6 kommentarer

Brug af flere recordsæt

Dette script består af en while-løkke, som kører indtil EOF på et Recordsæt.
Inde i løkken laves et opslag på en anden DB for at finde en tekst til en given kode.
Det fungerer fint når jeg bruger samme recordsæt. Når jeg ændrer recordsættet i funktionen FindSvarText til noget andet end hovedløkkens - får jeg EOF ("Knas med værditabel")
Umiddelbart kunne jeg godt bruge samme recordsæt - så ville problemet være løst, men det betyder at der er EOF, når jeg har behandlet første evaluering.


Hva' hulen er forkert???
-----------------------------------
<%Option Explicit %>
<!--#include File="include/adovbs.inc"-->
<!--#include File="include/Standard.inc"-->
<!--#include file="include/DatabaseConnect.asp"-->
<!--#include file="include/ValueKoderConnect.asp"-->

<!-- Opsætning af standardparametre -->
<% Response.Expires = 0 %>
<% Response.Buffer= True %>

<html>

<head><!-- Minus AutoDato -->

<META NAME="Generator" CONTENT="Stone's WebWriter 3.5">
<link rel="stylesheet" type="text/css" href="Styles/styles.css" />
<title>Vis Evalueringer</title>
</head>

<body>

<p>Dato: <% =Date %> </p>

<h2>Vis Evalueringer </h2>
<table align="center">
<p>
<!-- Vis de indtastede data fra formen -->
<%Response.Write "<tr><td>Klasse:</td><td> " %>
<%Response.Write Session("Klasse") & "</td></tr>" %>
<%Response.Write "<tr><td>Fag: </td><td>" %>
<%Response.Write Session("Fagbetegnelse") & "</td></tr>" %>
</p>

</table>
<!-- Start på hovedrutinen -->
<!-- Først indlæses alle spørgsmålene i en tabel -->
<%
            Dim arrSpgm(20), arrBesvar(30), arrSvarTxt(65)
            Dim ix, spgIx, strSQL, objRS, objRS1
            Dim txtSvar

            strSQL = "SELECT * FROM Sporgsmaal "
           
            Set objRS1 = objConnSpoergsmaal.Execute(strSQL)
           
            If (objRS1.EOF = TRUE) Then
                Session("FejlTxt") = "<h2>Spørsmål-DB findes ikke</h2>"
                Response.Redirect("Visfejl1.asp")
            End If

            ix = 0
            Do While Not (objRS1.EOF)
                arrSpgm(ix) = objRS1("Tekst")
                ix = ix + 1
                objRS1.MoveNext
            Loop
            objRS1.Close
%>



<!-- Herunder kører et loop med evalueringer -->
<%
            strSQL = "SELECT * FROM Evaluering WHERE Klasse = '"
            strSQL = strSQL & Session("Klasse")  & "' "
            strSQL = strSQL & "AND Fagbetegnelse = '"
            strSQL = strSQL & Session("Fagbetegnelse") & "' "

            Set objRS1 = objConn.Execute(strSQL)
           
   
            If (objRS1.EOF = TRUE) Then
                Session("FejlTxt") = "<h2>Ingen evalueringer</h2>"
                Response.Redirect("Visfejl1.asp")
            End If
            Do While Not (objRS1.EOF)
                LaegEvalTabel()
                Response.Write("<Table><tr><td>")
                ix = 3
           
                Response.Write("Navn: </td><td>")
                Response.Write(arrBesvar(ix))
                ix = 6
                Response.Write("</td></tr>")
                For SpgIx = 0 to 12
                    Response.Write("<tr><td>")
                    Response.Write(arrSpgm(SpgIx))
                    Response.Write("</td><td>")
                    Response.Write(FindSvarText(arrBesvar(ix)))
                    Response.Write("</td></tr>")
                    ix = ix + 1
                Next
               
                Response.Write("</Table>")
                objRS1.MoveNext
            Loop
       

%>
<!-- Vi lukker og slukker pænt efter os -->
<%
            'If objRS.State = adStateOpen Then
            '    objRS.Close
            'End If
            Set objRS = Nothing

            If objRS1.State = adStateOpen Then
                objRS1.Close
            End If
            Set objRS1 = Nothing

            objConn.Close
            Set objConn = Nothing
            objConnValueKoder.Close
            Set objConnValueKoder = Nothing
           
%>

       





<!-- Function til at finde Teksten til en given svarværdi -->
<%
            Function FindSvarText(Vaerdi)
                strSQL = "SELECT Tekst FROM VaerdiTabel WHERE "
                strSQL = strSQL & "Vaerdi = '"
                strSQL = strSQL & Vaerdi & "'"
           
                Set objRS = objConnValueKoder.Execute(strSQL)
               
               
                If (objRS.EOF) Then
                    Session("FejlTxt") = "<h2>Knas med Værditabel</h2>"
                    Response.Redirect("Visfejl1.asp")
                End If
               
                FindSvarText = objRS("Tekst")   
                   
               
            End Function
%>

<!-- Subrutine til at lægge en evaluering i tabel -->
<%
            Sub LaegEvalTabel()
                    For ix = 0 to objRS1.Fields.Count - 1
                        arrBesvar(ix) = objRS1.Fields(ix).Value
                    Next
            End Sub
%>

<p align="center"><a href="Besvarmenu.asp"><img src="Figurer/Tilbage.jpg" border="0"
width="107" height="25" alt="Tilbage.jpg (2150 bytes)"></a></p>
<p align="center"><a href="VisBesvarelser3.asp"><img src="Figurer/Videre.jpg" border="0"
</body>
</html>
Avatar billede eagleeye Praktikant
15. maj 2003 - 12:18 #1
Hvis du bruger samme navn så overskriver du vel det oprindelige recordset og dermed når du EOF før tid, og det er ikke alle som bliver udskriver.

Prøv at definere recordsetet i selv functionen sådan her:


<%
            Function FindSvarText(Vaerdi)
                strSQL = "SELECT Tekst FROM VaerdiTabel WHERE "
                strSQL = strSQL & "Vaerdi = '"
                strSQL = strSQL & Vaerdi & "'"
           
                Set objRS = Server.CreateObject("ADODB.RecordSet")
                Set objRS = objConnValueKoder.Execute(strSQL)
               
                If (objRS.EOF) Then
                    Session("FejlTxt") = "<h2>Knas med Værditabel</h2>"
                    Response.Redirect("Visfejl1.asp")
                End If
               
                FindSvarText = objRS("Tekst")   
                   
                'Husk at lukke recordsetet
                objRS.Close
                Set objRS = Nothing
            End Function
%>
Avatar billede jhoumann Nybegynder
15. maj 2003 - 13:07 #2
Samme resultat: Knas med VærdiTabel

Herunder er min DB-definition - hvis den kan bruges til noget.
----------------------------
<!-- Minus AutoDato -->
<%
  ' Oprettelse af connectionobject evalueringsdatabase

  Dim objConn
 
  Set objConn = Server.CreateObject("ADODB.Connection")
  objConn.ConnectionString = "DSN=Evaluering.dsn"
  objConn.Open

   
%>
------------------------------------------------------
og den anden (valuekoder)
-----------------------------------------------------
<!-- Minus AutoDato -->
<%
    'Connection til Valuekoder.dsn

    Dim objConnValueKoder
 
  Set objConnValueKoder = Server.CreateObject("ADODB.Connection")
  objConnValueKoder.ConnectionString = "DSN=Valuekoder.dsn"
  objConnValueKoder.Open
       
        Dim objConnSpoergsmaal
 
  Set objConnSpoergsmaal = Server.CreateObject("ADODB.Connection")
  objConnSpoergsmaal.ConnectionString = "DSN=Valuekoder.dsn"
  objConnSpoergsmaal.Open
%>
Avatar billede eagleeye Praktikant
15. maj 2003 - 13:19 #3
Er det så den rigtige connection du bruger?  objConnValueKoder

Eller så prøv at udskrive den SQL som laves i functionen for at se den får overført rigtige værdier:

<%
            Function FindSvarText(Vaerdi)
                strSQL = "SELECT Tekst FROM VaerdiTabel WHERE "
                strSQL = strSQL & "Vaerdi = '"
                strSQL = strSQL & Vaerdi & "'"
        Response.write strSQL

'                Set objRS = Server.CreateObject("ADODB.RecordSet")
'                Set objRS = objConnValueKoder.Execute(strSQL)
               
'                If (objRS.EOF) Then
'                    Session("FejlTxt") = "<h2>Knas med Værditabel</h2>"
'                    Response.Redirect("Visfejl1.asp")
'                End If
               
'                FindSvarText = objRS("Tekst")   
                   
                'Husk at lukke recordsetet
'                objRS.Close
'                Set objRS = Nothing
            End Function
%>
Avatar billede jhoumann Nybegynder
15. maj 2003 - 13:27 #4
Den får overført de rigtige værdier, da det jo virker når jeg  bruger samme recordsæt.
Avatar billede eagleeye Praktikant
15. maj 2003 - 17:00 #5
Et eller andet gør at dit recordset bliver tomt.
Navnet er totalt lige meget.

Har du et recordset som hedder objRS et andet sted i koden.
Avatar billede jhoumann Nybegynder
15. maj 2003 - 20:29 #6
Dét her er hele koden. Hvis jeg bruger objRS alle steder, så virker det, men så er det oprindelige recordset jo ved EOF. - så får jeg kun udskrevet (helt korrekte data) for den første post.
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