Avatar billede steen_hansen Forsker
08. december 2022 - 18:11 Der er 48 kommentarer og
1 løsning

If RS1200.EOF Then - Hvis værdien er 0, forvinder hele linien i tabellen

Jeg forsøger at udskrive brugere i en tabel, kører dem igennem en løkke. De får så præsenteret deres valg i tabellen (3 kolonner, 1 række med 3 submit buttons).

Hvis der  f.eks. er 2 brugere, der har valgt

<button type="submit" name="ActiveChoise" value="200">

og 2 brugere, der har valgt

<button type="submit" name="ActiveChoise" value="300">

Går det fint. Men hvis

0/1 bruger/e i RS1200
1 brugere i RS1230
1 brugere i RS1300

så forsvinder HELE denne linie, når der RS1200("status") ændres til f.eks. 400 eller 1000

<tr>
    <td>-</td>
    <td>-</td>
    <td>-</td>
</tr>

Hvis jeg ser på kildekoden, ser det sådan her ud:

<div class="row mt-5">
    <div class="table-responsive-lg">
        <table class="table table-striped table-hover table-bordered-columns" id="ownevents">
            <thead>
                <tr class="border-0">
                    <th class="text-center"><span id="lb1200" class="lead"></span><br>12:00 - 12:30</th>
                    <th class="text-center"><span id="lb1230" class="lead"></span><br>12:30 - 13:00</th>
                    <th class="text-center"><span id="lb1300" class="lead"></span><br>13:00 - 13:30</th>
                </tr>
            </thead>
            <tbody class="list align-items-center">
                                   
            </tbody>
        </table>
    </div>
</div>

Alt mellem <tbody> og </tbody> forsvinder fuldstændigt:

            <tbody class="list align-items-center">
                                   
            </tbody>

Men KUN hvis RS1200.EOF. Hvis der er mere end én bruger, der har valgt RS1200("status") = 200, virker det fint. Men det er kun hvis der er mere end én bruger, hvor RS1200("status") = 200.

Jeg håber på hjælp, den er for kringlet. Jeg har virkelig lagt timer og forsøgt alt muligt. Spørg, hvis der er noget, der skal uddybes :) På forhånd tak









<%
        Set RSCountTotalOff = Conn.Execute(SQL1)
        SQL2 = "SELECT Count(status) AS Number1200 FROM users WHERE status = " & 200 & ""
        Set RSCountTotal1200 = Conn.Execute(SQL2)
        SQL3 = "SELECT Count(status) AS Number1230 FROM users WHERE status = " & 300 & ""
        Set RSCountTotal1230 = Conn.Execute(SQL3)
        SQL4 = "SELECT Count(status) AS Number1300 FROM users WHERE status = " & 400 & ""
        Set RSCountTotal1300 = Conn.Execute(SQL4)


        ValueOff = Cint(RSCountTotalOff("NumberOff"))
        ValueRetail1200 = Cint(RSCountTotal1200("Number1200"))
        ValueRetail1230 = Cint(RSCountTotal1230("Number1230"))
        ValueRetail1300 = Cint(RSCountTotal1300("Number1300"))


        Set  RS1200 = Conn.Execute("SELECT * FROM users WHERE status = 200 ORDER BY username, category ASC")
        Set  RS1230 = Conn.Execute("SELECT * FROM users WHERE status = 300 ORDER BY username, category ASC")
        Set  RS1300 = Conn.Execute("SELECT * FROM users WHERE status = 400 ORDER BY username, category ASC")

%>

<div class="row mt-5">
    <div class="table-responsive-lg">
        <table class="table table-striped table-hover table-bordered-columns" id="ownevents">
            <thead>
                <tr class="border-0">
                    <th class="text-center"><span id="lb1200" class="lead"></span><br>12:00 - 12:30</th>
                    <th class="text-center"><span id="lb1230" class="lead"></span><br>12:30 - 13:00</th>
                    <th class="text-center"><span id="lb1300" class="lead"></span><br>13:00 - 13:30</th>
                </tr>
            </thead>
            <tbody class="list align-items-center">
                <%
                If Not RS1200.EOF OR RS1230.EOF OR RS1300.EOF Then
                    Do Until RS1200.EOF AND RS1230.EOF AND RS1300.EOF
                %>
                <tr>
                    <td class="reference text-nowrap">
                    <% If Not RS1200.EOF Then %>
                        <svg height="14" width="14"><circle cx="7" cy="7" r="7" stroke="black" stroke-width="1" fill="<% If RS1200("category") = 1 Then %>green<% ElseIf RS1200("category") = 2 Then %>yellow<% Else %>red<% End If %>"></svg> <%=RS1200("username")%>
                    <% Else %>
                        -
                    <%
                    End If
                    %>
                    </td>
                    <td class="reference text-nowrap">
                    <% If Not RS1230.EOF Then %>
                        <svg height="14" width="14"><circle cx="7" cy="7" r="7" stroke="black" stroke-width="1" fill="<% If RS1230("category") = 1 Then %>green<% ElseIf RS1230("category") = 2 Then %>yellow<% Else %>red<% End If %>"></svg> <%=RS1230("username")%>
                    <% Else %>
                        -
                    <% End If %>
                    </td>
                    <td class="reference text-nowrap">
                    <% If Not RS1300.EOF Then %>
                        <svg height="14" width="14"><circle cx="7" cy="7" r="7" stroke="black" stroke-width="1" fill="<% If RS1300("category") = 1 Then %>green<% ElseIf RS1300("category") = 2 Then %>yellow<% Else %>red<% End If %>"></svg> <%=RS1300("username")%>
                    <% Else %>
                        -
                    <% End If %>
                    </td>
                </tr>
                <%
                    If Not RS1200.EOF Then
                        RS1200.MoveNext
                    End If
                    If Not RS1230.EOF Then
                        RS1230.MoveNext
                    End If
                    If Not RS1300.EOF Then
                        RS1300.MoveNext
                    End If
                    Loop
                End If
                %>
            </tbody>
        </table>
    </div>
</div>

<div class="d-flex justify-content-between align-items-center flex-column flex-lg-row">
    <div class="form-group row">
        <div class="col-md-4 mb-1">
            <button type="submit" name="ActiveChoise" value="200" class="btn btn-<%=btnStyleR1200%> btn-block btn-lg" onclick="this.form.submit();"<% If disableAll = "" Then %><%=disabledR1200%><% Else %><%=disableAll%><% End If %>>12:00</button>
        </div>
        <div class="col-md-4">
            <button type="submit" name="ActiveChoise" value="300" class="btn btn-<%=btnStyleR1230%> btn-block btn-lg" onclick="this.form.submit();"<% If disableAll = "" Then %><%=disabledR1230%><% Else %><%=disableAll%><% End If %>>12:30</button>
        </div>
        <div class="col-md-4">
            <button type="submit" name="ActiveChoise" value="400" class="btn btn-<% If RSButtonChosen("status") = 400 Then %>info<% Else %>primary<% End If %> btn-block btn-lg" onclick="this.form.submit();"<%=disableAll%>>13:00</button>
        </div>
    </div>
</div>
Avatar billede arne_v Ekspert
08. december 2022 - 18:48 #1
Det bliver svært at få logikken til at fungere med flere result set.

Hvis du kommer op med en SQL som returnerer de relevante data i et result set, så vil det være nemmere at få logikken til at fungere.
Avatar billede steen_hansen Forsker
08. december 2022 - 19:01 #2
Jeg synes ikke jeg får noget frem på siden med dette:

    If Request("mode") = "ChooseLunchbreak" Then
        Dim tUser, ActiveChoise, SQL
        tUser = Request.QueryString("user")
        ActiveChoise = Request.Form("ActiveChoise")

sqlstr = "UPDATE lbusers SET status = " & ActiveChoise & " WHERE username = '" & tUser & "'"
Response.Write "sqlstr=" & sqlstr
SQL = Conn.Execute(sqlstr)

...............................................................

Tjekker igen
Avatar billede steen_hansen Forsker
08. december 2022 - 19:11 #3
Det kan jeg ikke få til at spille, Arne. Kan du ud fra det ovenstående hvad jeg gør forkert?
Avatar billede steen_hansen Forsker
08. december 2022 - 19:12 #4
Der sker bare ingenting, valget kommer ikke frem lige meget hvad der bliver trykket
Avatar billede steen_hansen Forsker
10. december 2022 - 11:05 #5
Håber at høre fra dig, Arne
Avatar billede steen_hansen Forsker
10. december 2022 - 12:14 #6
Jeg fik det til at virke. Den udskriver værdierne korrekt
Avatar billede steen_hansen Forsker
10. december 2022 - 12:21 #7
Det var noget sludder. Der bliver slet ikke udskrevet noget
Avatar billede arne_v Ekspert
11. december 2022 - 00:40 #8
Jeg kan slet ikke overskue den kode.

Der er brug for noget opsplitning.

To tilfældige stykker kode som måske eller måske ikke kan inspirere.


<%
function getColA()
    ' simulate fetch from DB
    dim res(1)
    res(0) = 11
    res(1) = 12
    getColA = res
end function

function getColB()
    ' simulate fetch from DB
    dim res(2)
    res(0) = 21
    res(1) = 22
    res(2) = 23
    getColB = res
end function

function getColC()
    ' simulate fetch from DB
    dim res(0)
    res(0) = 31
    getColC = res
end function

function getVal(x, i)
    if i <= ubound(x) then
        getVal = x(i)
    else
        getVal = ""
    end if
end function
%>

<%
dim a, b, c
a = getColA()
b = getColB()
c = getColC()
dim n
n = ubound(a)
if ubound(b) > n then
    n = ubound(b)
end if
if ubound(c) > n then
    n = ubound(c)
end if
%>
<table border="1">
<tr>
<th>A</th>
<th>B</th>
<th>C</th>
</tr>
<%
dim i
for i = 0 to n
%>
<tr>
<td><%=getVal(a, i)%></td>
<td><%=getVal(b, i)%></td>
<td><%=getVal(c, i)%></td>
</tr>
<%
next
%>
</table>



<%
function getColA()
    ' simulate fetch from DB
    dim res(1)
    res(0) = 11
    res(1) = 12
    getColA = res
end function

function getColB()
    ' simulate fetch from DB
    dim res(2)
    res(0) = 21
    res(1) = 22
    res(2) = 23
    getColB = res
end function

function getColC()
    ' simulate fetch from DB
    dim res(0)
    res(0) = 31
    getColC = res
end function

function getVal(x, i)
    if i <= ubound(x) then
        getVal = x(i)
    else
        getVal = ""
    end if
end function
%>

<%
dim a, b, c
a = getColA()
b = getColB()
c = getColC()
dim n
n = ubound(a)
if ubound(b) > n then
    n = ubound(b)
end if
if ubound(c) > n then
    n = ubound(c)
end if
%>
<table border="1">
<tr>
<th>A</th>
<th>B</th>
<th>C</th>
</tr>
<tr valign="top">
<td><%=join(a,"<br>")%></td>
<td><%=join(b,"<br>")%></td>
<td><%=join(c,"<br>")%></td>
</tr>
</table>
Avatar billede steen_hansen Forsker
11. december 2022 - 22:47 #9
Du har ret, det er svært at overskue. For at gøre en lang historie kort, har jeg prøvet at lave det så brugervenligt og enkelt som overhovedet muligt. For lige kort at ridse det op:

1. Brugerens navn er automatisk valgt i <select>, når brugeren kommer ind på siden. Den pågældende bruger kan også vælge en anden bruger. Man vælger den bruger, som man ønsker at rette statusen på

2. Man trykker på den submit button med den ønskede status, og det bliver automatisk gemt i databsen ved bare at trykke

3. "status" bliver gemt i databasen. Den næste knap kunne have værdien 900. Det er ligegyldigt, man kan trykke sig frem og tilbage efter behag

4. Når der er trykket på en submit, og status ændres f.eks. 200 til 900, bliver det automatisk gemt

Alt det ovenstående virker perfekt, det er stabilt og solidt. Ingen problemer.

Jeg forfatter lige min udfordring, som udelukkende er at få det korrekt i <table></table>. Øjeblik .....
Avatar billede steen_hansen Forsker
11. december 2022 - 23:07 #10
Min udfordring er så med det nedenstående: Hvis jeg rykker BRUGER1 fra status 200 (første kolonne) til status 400 (sidste kolonne), så forsvinder alt mellem <tbody> og </tbody>. Er der en bruger i 1. kolonne, og en bruger i anden kolonne, er det fint nok.

<table>
    <thead>
        <tr>
            <th>A</th>
            <th>B</th>
            <th>C</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>[BRUGER1],status=200]</td><!-- DENNE KOLONNE BENYTTES TIL status=200 -->
            <td>[BRUGER2],status=300</td><!-- DENNE KOLONNE BENYTTES TIL status=300 -->
            <td></td><!-- DENNE KOLONNE BENYTTES TIL status=400 -->
        </tr>
    </tbody>
</table>


Men trykker jeg BRUGER1 fra 1. kolonne (status=200) til 3. kolonne (status=400), så er det, at alt forsvinder mellem <tbody> og </tbody>

Der burde nu stå


<table>
    <thead>
        <tr>
            <th>A</th>
            <th>B</th>
            <th>C</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td></td><!-- DENNE KOLONNE BENYTTES TIL status=200 -->
            <td>[BRUGER2],status=300</td><!-- DENNE KOLONNE BENYTTES TIL status=300 -->
            <td>[BRUGER1],status=400]</td><!-- DENNE KOLONNE BENYTTES TIL status=400 -->
        </tr>
    </tbody>
</table>


Men der kommer til at stå


<table>
    <thead>
        <tr>
            <th>A</th>
            <th>B</th>
            <th>C</th>
        </tr>
    </thead>
    <tbody>

    </tbody>
</table>


Hvis der er mere end én bruger med status=200 i 1. kolonne, fungerer det fint. Så kan man bare trykke rundt som man lyster.

Det er altså kun, hvis der kun er én bruger med status=200, at kæden hopper af. Måske p.gr.a. noget EOF. Det kan jeg ikke gennemskue.

Det kører gennem en løkke: Hvis der ikke er nogen bruger med status = 200 i første kolonne, så vis en "-". Ellers vis [BRUGER1]. Det er sådan det er tiltænkt. Det samme gælder for kolonne 2 og kolonne 3

Jeg forfatter lige et spørgsmål til dine 2 eksempler, du gav mig (til inspiration), øjeblik ...........
Avatar billede steen_hansen Forsker
11. december 2022 - 23:11 #11
Jeg testede dit øverste eksempel. Men her er værdierne foruddefinerede. Hvordan kan jeg køre alle status fra databsen igennem en løkke på denne måde?

username        status
BRUGER1            200
BRUGER8            1100
BRUGER3            300
BRUGER2            700

Osv .........
Avatar billede steen_hansen Forsker
11. december 2022 - 23:28 #12
' simulate fetch from DB

Menes der

Set  RS = Conn.Execute("SELECT username, status FROM users WHERE username = '" & .................... & "'")

- inde i den function?
Avatar billede arne_v Ekspert
12. december 2022 - 00:37 #13
Ja. Den rigtige kode skal hente værdierne fra databasen og ligge dem ind i et array.

Pointen er at det er lidt nemmere at arbejde med et array end en database forbindelse, så DB->array->HTML table er nemmere at styre ebd DB->HTML table, når det er lidt kompliceret.
Avatar billede steen_hansen Forsker
12. december 2022 - 00:58 #14
Ok. Jeg prøver det af i morgen. Jeg er godt nok i tvivl om hvordan det kan klares rent praktisk. Men jeg prøver mig frem :)
Avatar billede steen_hansen Forsker
13. december 2022 - 20:00 #15
Jeg kan ikke gennemskue hvordan det skal laves.

I det viste eksempel er variablerne defineret på forhånd

Function GetColA()
    Dim res(1)
    res(0) = 11
    res(1) = 12
    GetColA = res
End Function

Hvordan henter jeg alle brugerne fra DB, indtil der ikke er flere? Antallet kan jo variere hele tiden

<%
If Not RS1200.EOF OR RS1230.EOF OR RS1300.EOF Then
    Do Until RS1200.EOF AND RS1230.EOF AND RS1300.EOF
%>
.................................
Avatar billede arne_v Ekspert
13. december 2022 - 21:04 #16
ADODB har en GetRows metode som returnerer et array. Jeg kan godt proeve og bikse et eksempel.
Avatar billede steen_hansen Forsker
13. december 2022 - 21:27 #17
Det ville være smukt, det værdsætter jeg meget :)
Avatar billede arne_v Ekspert
14. december 2022 - 01:25 #18

<%

'CREATE TABLE nums(num INTEGER NOT NULL,PRIMARY KEY(num))
'GO
'INSERT INTO nums VALUES(11)
'GO
'INSERT INTO nums VALUES(12)
'GO
'INSERT INTO nums VALUES(21)
'GO
'INSERT INTO nums VALUES(22)
'GO
'INSERT INTO nums VALUES(23)
'GO
'INSERT INTO nums VALUES(31)
'GO

function query(sqlstr)
    Set con = Server.CreateObject("ADODB.Connection")
    con.Open "Provider=SQLNCLI11; Server=ARNEPC4; Database=Test; Trusted_Connection=yes;"
    Set rs = Server.CreateObject("ADODB.Recordset")
    rs.Open sqlstr, con
    res = rs.GetRows()
    Set rs = Nothing
    Set con = Nothing
    query = res
end function

function getColA()
    getColA = query("SELECT num FROM nums WHERE num BETWEEN 10 AND 19")
end function

function getColB()
    getColB = query("SELECT num FROM nums WHERE num BETWEEN 20 AND 29")
end function

function getColC()
    getColC = query("SELECT num FROM nums WHERE num BETWEEN 30 AND 39")
end function

function getVal(x, i)
    if i <= ubound(x, 2) then
        getVal = x(0, i)
    else
        getVal = ""
    end if
end function
%>

<%
dim a, b, c
a = getColA()
b = getColB()
c = getColC()
dim n
n = ubound(a, 2)
if ubound(b, 2) > n then
    n = ubound(b, 2)
end if
if ubound(c, 2) > n then
    n = ubound(c, 2)
end if
%>
<table border="1">
<tr>
<th>A</th>
<th>B</th>
<th>C</th>
</tr>
<%
dim i
for i = 0 to n
%>
<tr>
<td><%=getVal(a, i)%></td>
<td><%=getVal(b, i)%></td>
<td><%=getVal(c, i)%></td>
</tr>
<%
next
%>
</table>
Avatar billede steen_hansen Forsker
14. december 2022 - 15:50 #19
Et hurtigt sp'rgsmål:

Conn.Open "Provider=SQLNCLI11; Server=mysql109.unoeuro.com; Database=clientside_dk_db; Trusted_Connection=yes;"

Jeg har ledt efter Provider=SQLNCLI11 hos min host, men kan umiddelbart ikke finde det ...........?
Avatar billede steen_hansen Forsker
14. december 2022 - 15:58 #20
Ok, det er bare connection, jeg tror jeg har den på plads
Avatar billede arne_v Ekspert
14. december 2022 - 16:10 #21
Jeg testede med min gamle SQL Server og brugte den ADO provider.

Du skal selvfølgelig bruge den provider der passer til database (SQL Server, MySQL Access eller hvad du nu bruger).

Men du har jo forbindelse til databasen, så du skal bare bruge det der virker hos dig.
Avatar billede steen_hansen Forsker
14. december 2022 - 16:20 #22
I mit functions.asp har jeg nu dette:


<%
    Function query(SQLstr)
        SQLserveradr = "[min_mysql.server.address]"
        SQLdatabase = "[navn_paa_database]"
        SQLlogin = "[brugernavn_paa_SQLlogin]"
        SQLpassword = "[pwd]"

        SET Conn = Server.CreateObject("ADODB.Connection")
 
        strConnection = "driver={MySql}; SERVER = " & SQLserveradr & "; DATABASE = " & SQLdatabase
        strConnection = strConnection & "; UID="& SQLlogin &"; PWD= " & SQLpassword & "; OPTION=NUM"

        Conn.Open strConnection

        Set RSzx = Server.CreateObject("ADODB.Recordset")
        RSzx.Open SQLstr, Conn
        res = RSzx.GetRows()
        Set RSzx = Nothing
        Set Conn = Nothing
        Query = res
    End Function

    Function getColA()
        getColA = query("SELECT username, category, status status FROM users WHERE status = 200")
    End Function

    Function getColB()
        getColB = query("SELECT username, category, status FROM users WHERE status = 300")
    End Function

    Function getColC()
        getColC = query("SELECT username, category, status FROM users WHERE status = 400")
    End Function
%>


ADODB.Recordset error '800a0bcd'

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

/includes/functions.asp, line 17

Linie 17 : res = RSzx.GetRows()

Kræver det en - If Not RSzx.EOF Then - et eller andet sted?
Avatar billede arne_v Ekspert
15. december 2022 - 02:38 #23
Mystisk.

Jeg kan godt få det til at virke med MySQL.


<%

'CREATE TABLE nums(num INTEGER NOT NULL,PRIMARY KEY(num));
'INSERT INTO nums VALUES(11);
'INSERT INTO nums VALUES(12);
'INSERT INTO nums VALUES(21);
'INSERT INTO nums VALUES(22);
'INSERT INTO nums VALUES(23);
'INSERT INTO nums VALUES(31);

function query(sqlstr)
    Set con = Server.CreateObject("ADODB.Connection")
    con.Open "Driver={MySQL ODBC 5.3 ANSI Driver};Database=Test;User Id=root;Password=xxxxxx;"
    Set rs = Server.CreateObject("ADODB.Recordset")
    rs.Open sqlstr, con
    res = rs.GetRows()
    Set rs = Nothing
    Set con = Nothing
    query = res
end function

function getColA()
    getColA = query("SELECT num FROM nums WHERE num BETWEEN 10 AND 19")
end function

function getColB()
    getColB = query("SELECT num FROM nums WHERE num BETWEEN 20 AND 29")
end function

function getColC()
    getColC = query("SELECT num FROM nums WHERE num BETWEEN 30 AND 39")
end function

function getVal(x, i)
    if i <= ubound(x, 2) then
        getVal = x(0, i)
    else
        getVal = ""
    end if
end function
%>

<%
dim a, b, c
a = getColA()
b = getColB()
c = getColC()
dim n
n = ubound(a, 2)
if ubound(b, 2) > n then
    n = ubound(b, 2)
end if
if ubound(c, 2) > n then
    n = ubound(c, 2)
end if
%>
<table border="1">
<tr>
<th>A</th>
<th>B</th>
<th>C</th>
</tr>
<%
dim i
for i = 0 to n
%>
<tr>
<td><%=getVal(a, i)%></td>
<td><%=getVal(b, i)%></td>
<td><%=getVal(c, i)%></td>
</tr>
<%
next
%>
</table>
Avatar billede arne_v Ekspert
15. december 2022 - 02:39 #24
Hmmm.

      getColA = query("SELECT username, category, status status FROM users WHERE status = 200")

har en status for meget.
Avatar billede arne_v Ekspert
15. december 2022 - 02:39 #25
Og status er muligvis et reserveret ord så:

status -> `status`
Avatar billede steen_hansen Forsker
15. december 2022 - 13:49 #26
1. Den ene, overskydende status er fjernet

2. status er rettet til vStatus samtlige steder

Kan det skyldes, at jeg allerede har en Conn.Open på siden? Der bliver jo puttet en ekstra ind. Det eksempel du er kommet med, er vel et unikt eksempel, hvor jeg har forsøgt at implementere det på en eksisterende side, hvor der allerede er åben connection.
Avatar billede steen_hansen Forsker
15. december 2022 - 13:50 #27
ADODB.Recordset error '800a0bcd'

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

/includes/functions.asp, line 17

LINIE 17 = res = RS.GetRows()
Avatar billede steen_hansen Forsker
15. december 2022 - 13:51 #28
LINIE 17:
res = RS.GetRows()
Avatar billede steen_hansen Forsker
15. december 2022 - 14:01 #29
functions.asp ser ud som det nedenstående

<%
    Function query(SQLstr)
        SQLserveradr = "x"
        SQLdatabase = "x"
        SQLlogin = "x"
        SQLpassword = "x"

        SET Conn = Server.CreateObject("ADODB.Connection")
 
        strConnection = "driver={MySql}; SERVER = " & SQLserveradr & "; DATABASE = " & SQLdatabase
        strConnection = strConnection & "; UID="& SQLlogin &"; PWD= " & SQLpassword & "; OPTION=NUM"

        Conn.Open strConnection

        Set RSzx = Server.CreateObject("ADODB.Recordset")
        RSzx.Open SQLstr, Conn
        res = RSzx.GetRows()
        Set RSzx = Nothing
        Set Conn = Nothing
        Query = res
    End Function

    Function getColA()
        getColA = query("SELECT username, category, vStatus FROM users WHERE vStatus = 200 ORDER BY category, username DESC")
    End Function

    Function getColB()
        getColB = query("SELECT username, category, vStatus FROM users WHERE vStatus = 300 ORDER BY category, username DESC")
    End Function

    Function getColC()
        getColC = query("SELECT username, category, vStatus FROM users WHERE vStatus = 400 ORDER BY category, username DESC")
    End Function

    Function getVal(x, i)
        If i <= ubound(x, 2) then
            getVal = x(0, i)
        Else
            getVal = "-"
        End If
    End Function
%>
Avatar billede steen_hansen Forsker
15. december 2022 - 14:03 #30
Jeg prøvede at rette Conn til Conn1 for at se, om det ville ændre noget. Det gjorde det overhovedet ikke:

ADODB.Recordset error '800a0bcd'

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

/includes/functions.asp, line 17
Avatar billede steen_hansen Forsker
15. december 2022 - 14:12 #31
Jeg har også prøvet at "barbere" væk, så der kun laves et tjek på vStatus

<%
    Function query(SQLstr)
        SQLserveradr = "x"
        SQLdatabase = "x"
        SQLlogin = "x"
        SQLpassword = "x"

        SET Conn1 = Server.CreateObject("ADODB.Connection")
 
        strConnection = "driver={MySql}; SERVER = " & SQLserveradr & "; DATABASE = " & SQLdatabase
        strConnection = strConnection & "; UID="& SQLlogin &"; PWD= " & SQLpassword & "; OPTION=NUM"

        Conn1.Open strConnection

        Set RSzx = Server.CreateObject("ADODB.Recordset")
        RSzx.Open SQLstr, Conn1
        res = RSzx.GetRows()
        Set RSzx = Nothing
        Set Conn1 = Nothing
        Query = res
    End Function

    Function getColA()
        getColA = query("SELECT vStatus FROM lbusers WHERE vStatus = 200")
    End Function

    Function getColB()
        getColB = query("SELECT vStatus FROM lbusers WHERE vStatus = 300")
    End Function

    Function getColC()
        getColC = query("SELECT vStatus FROM lbusers WHERE vStatus = 400")
    End Function
%>
Avatar billede arne_v Ekspert
15. december 2022 - 19:20 #32
Du har ogsaa rettet felt navnet i databasen til vStatus?
Avatar billede arne_v Ekspert
15. december 2022 - 19:23 #33
Jeg må indrømme at jeg er lidt på bar bund. Et ligende eksempel virker hos mig. Din kode virker ikke hos dig. Og fejl beskeden er svært at tolke. Jeg tror at den dækker over at query er fejlet men uden at angive hvorfor. Hvis du udfører de eksakte queriews i PHPMyAdmin elle rhvad du nu bruger til at administrere databasen med - hvad sker der så?
Avatar billede steen_hansen Forsker
16. december 2022 - 16:22 #34
Jeg vil prøve som du, at lave denne ene funktion på samme side, en helt ny side uden andre SQL forespørgsler. Virker dét, er der så åbenlyst noget der driller på min nuværende side. Men det er bare mærkeligt, for alt andet styrer uden om dette. Det giver ikke meget mening
Avatar billede steen_hansen Forsker
16. december 2022 - 16:26 #35
1.
Hiv pågældende fra select

2.
Tryk på submit

3.
Hiv vStatus og præsentér det i (nu) DIVs (før I tabel)

Det er i store træk hvad der skal ske på den side
Avatar billede steen_hansen Forsker
16. december 2022 - 20:58 #36
I kolonne A havde jeg en bruger - vStatus = 200
I kolonne B havde jeg en bruger - vStatus = 300

Men jeg havde ingen bruger med vStatus = 400

Dat jeg satte 400 på en bruger, blev alle 3 brugere udskrevet. Men de blev alle 3 udskrevet i kolonne A

Dvs der SKAL være en vStatus = 200, 300 og 400?
Avatar billede arne_v Ekspert
17. december 2022 - 19:56 #37
Der skal nok testes paa om der er data og hvis ikke skal der ikke kaldes GetRows men returneres et tomt array.
Avatar billede steen_hansen Forsker
27. december 2022 - 23:18 #38
Hvordan kan der testes på det, Arne?

Håber du havde en god Jul :)
Avatar billede arne_v Ekspert
28. december 2022 - 02:26 #39
Klassisk EOF test vil jeg tro.
Avatar billede steen_hansen Forsker
30. januar 2023 - 15:05 #40
Jeg giver snart op, og looper en button for hver bruger i en <div></div>. Det ved jeg da virker. Men så skal der laves 3 seperate divs, en for A, B og C.

Men inden da, jeg faldt over dette:
https://www.w3schools.com/xml/tryxslt.asp?xmlfile=cdcatalog&xsltfile=cdcatalog_ex3

Jeg kan bare ikke se hvordan den skal grejes. Og mit gæt er, at det fortsat vil fejle, hvis kolonne A eller B er tom. I det viste eksempel fra w3schools er der jo data i alle felter. Er du også en skrapsak til XML, Arne?
Avatar billede steen_hansen Forsker
30. januar 2023 - 15:06 #41
Sorry, de data bliver ikke loopet. Det er almindelig HTML
Avatar billede arne_v Ekspert
05. februar 2023 - 01:21 #42
Jeg kender også lidt til XSLT konvertering fra XML til HTML, men hvordan hænger det sammen med din problemstilling?
Avatar billede steen_hansen Forsker
07. februar 2023 - 14:31 #43
"Jeg kender også lidt til XSLT konvertering fra XML til HTML, men hvordan hænger det sammen med din problemstilling?"

Jeg er helt bank. Sorry, Arne. Jeg er ikke helt med på hvad du mener
Avatar billede steen_hansen Forsker
07. februar 2023 - 16:44 #44
Jeg fik det delvist til at virke, men får den gammelkendte fejl, hvis der kun er én vStatus 200, eller én vStatus 300:

ADODB.Recordset error '800a0bcd'

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

/includes/lb_functions.asp, line 17

        Set RS = Server.CreateObject("ADODB.Recordset")
        RS.Open sqlstr, con
        res = RS.GetRows() <!-- LINE 17 -->
        Set RS = Nothing
        Set Con = Nothing
        query = res
    End Function

Hvad får du, hvis du kun har én 200, eller én 300?
Avatar billede arne_v Ekspert
07. februar 2023 - 18:54 #45
Lad mig prøve og teste senere idag.
Avatar billede arne_v Ekspert
08. februar 2023 - 16:47 #46
Prøv at rette:

        Set RS = Server.CreateObject("ADODB.Recordset")
        RS.Open sqlstr, con
        res = RS.GetRows()

til:

    Set rs = Server.CreateObject("ADODB.Recordset")
    rs.Open sqlstr, con
    if rs.EOF then
        redim res(0, 2)
    else
        res = rs.GetRows()
    end if
Avatar billede steen_hansen Forsker
09. februar 2023 - 07:39 #47
NU begynder det at ligne noget, fedt, Arne :)

Der er dog stadig et stort issue, hvis bare én af kollonerne ikke har en bruger.

Jeg laver en enkelt HTML side til dig senere. Det er nemmere at vise med screendumps end at forsøge at gengive det her. Jeg vender tilbage :)
Avatar billede steen_hansen Forsker
10. februar 2023 - 16:09 #48
Så er der lavet lidt, og det er absolut uden stiling: https://arne.clientside.dk/

Håber du kan se problemet, det er ret åbenlyst :)
Avatar billede steen_hansen Forsker
09. marts 2023 - 07:02 #49
Jeg takker mange gange for indsatsen, Arne :)

Det lykkedes ikke. Jeg opretter en enkelt <div></div> for hhv A, B og C, hvor alle brugerne bliver listet i én lang række, som jeg har benyttet tidligere. Utroligt, at noget, som bliver benyttet så mange steder på nettet er så besværligt :p Det havde jeg ikke lige set :) Men 1000 tak, din hjælp er som altid værdsat!
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