Avatar billede wolfgang Praktikant
18. marts 2006 - 16:29 Der er 27 kommentarer og
1 løsning

Loop springer 1. post over

Hej Eksperter,
- Jeg kan simpelthen ikke finde fejlen.

Database platform: MS SQL

I mit loop vil jeg udskrive 5 datafelter for hver post i min database. Lige meget hvordan jeg gør det (med 1 eller flere felter), springer den konsekvent 1. post over???
- Det har jeg aldrig oplevet før.

Jeg håber at I kan hjælpe mig her.

MVH
Henrik
Avatar billede wolfgang Praktikant
18. marts 2006 - 16:32 #1
SQL-streng:

sqlReviews = "select Phase1, Phase2,Phase3,Phase4,Phase5, " & _
        "(select Manufacturer from tbl_RManufacturers where tbl_RManufacturers.ManufacturerID=tbl_Reviews.ManufacturerID)as brand, " & _
        "(select Model from tbl_RModels where tbl_RModels.ModelID=tbl_Reviews.ModelID)as model " & _
        "from tbl_Reviews where ReviewActive=1 and ManufacturerID="& qsBrandID &" and ModelID="& qsModelID &" order by ReviewID desc"
        set rsReviews = connect.execute(sqlReviews)
Avatar billede kalp Novice
18. marts 2006 - 16:32 #2
må man se din kode? det er sikkert første sætning i løkken som mangler noget
Avatar billede wolfgang Praktikant
18. marts 2006 - 16:33 #3
Lidt mere information...
Det er også lige meget om der skal udskrives 2,7 eller 102 poster - den 1. post bliver sprunget over.
Avatar billede wolfgang Praktikant
18. marts 2006 - 16:33 #4
<%
            do while not rsReviews.eof
            %>
            <tr>
                <td>
                <strong>Phase 1:</strong>
                  <%=rsReviews("Phase1")%><br />
                <strong>Phase 2:</strong>
                <%=rsReviews("Phase2")%><br />
                <strong>Phase 3:</strong>
                <%=rsReviews("Phase3")%><br />
                <strong>Phase 4:</strong>
                <%=rsReviews("Phase4")%><br />
                <strong>Phase 5:</strong>
                <%=rsReviews("Phase5")%>
                </td>
            </tr>
            <tr>
              <td>&nbsp;</td>
              </tr>
            <%
            rsReviews.movenext
            loop
            %>
Avatar billede mortenbock Nybegynder
18. marts 2006 - 16:50 #5
et skud i tågen: Hvad sker der hvis du i stedet bruger dette?

do until rsReviews.eof
Avatar billede mortenbock Nybegynder
18. marts 2006 - 16:52 #6
mener der er et eller andet med at man skal forholde sig til både EOF og BOF, men kan sgu ikke huske noget præcist.
Avatar billede erikjacobsen Ekspert
18. marts 2006 - 16:53 #7
Og koden før linien:  do while not rsReviews.eof    ??
Avatar billede kalp Novice
18. marts 2006 - 16:59 #8
synes det er lidt svært, at overskue html'en for mit vedkommende, men hvis der er fejl i din html.. måske forkert placering af tags så kan det godt være problemet.
Avatar billede wolfgang Praktikant
18. marts 2006 - 17:18 #9
I får lige hele siden.

<%

    'catch QS - convert to var
    qsCatID = request.queryString("cID")
    qsBrandID = request.queryString("bID")
    qsModelID = request.queryString("mID")
   
    sqlCat =     "select Category from tbl_RCategories where CatID="&qsCatID&""
                    set rsCat = connect.execute(sqlCat)
   
    if request.queryString <> "" then
   
    sqlReviews =    "select Phase1, Phase2,Phase3,Phase4,Phase5, " & _
                    "(select Manufacturer from tbl_RManufacturers where tbl_RManufacturers.ManufacturerID=tbl_Reviews.ManufacturerID)as brand, " & _
                    "(select Model from tbl_RModels where tbl_RModels.ModelID=tbl_Reviews.ModelID)as model " & _
                    "from tbl_Reviews where ReviewActive=1 and ManufacturerID="& qsBrandID &" and ModelID="& qsModelID &" order by ReviewID desc"
                        set rsReviews = connect.execute(sqlReviews)
           
    end if
%>

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>GearFreak Version 2.0</title>
<link href="_PublicCore/Styles/public.css" rel="stylesheet" type="text/css" />
</head>

<body>
<table width="100%" border="0" cellpadding="0" cellspacing="0" id="mainTable">
  <tr>
    <td height="100" align="left" valign="top">&nbsp;</td>
  </tr>
  <tr>
    <td height="35" align="left" valign="top" bgcolor="#739900">&nbsp;</td>
  </tr>
  <tr>
    <td height="1" align="left" valign="top" bgcolor="#FFFFFF"><img src="_grfx/spacer.gif" alt="Spacer" width="1" height="1" /></td>
  </tr>
  <tr>
    <td align="left" valign="top" bgcolor="#FFFFFF">
    <table width="100%" border="0" cellpadding="0" cellspacing="0" id="contentTable">
      <tr>
        <td valign="top" id="contentTable_tdbg">&nbsp;</td>
        <td valign="top" id="contentTable_Left">
        <!--#include file="inc_categories.asp" -->
        <!--#include file="inc_stats.asp" -->       
        </td>
        <td valign="top" id="contentTable_Content">
       
        <table width="520" border="0" align="center" cellpadding="5" cellspacing="0">
            <tr>
                <td class="h1"><%=FixString(rsCat("Category"))%>:<br /><%=FixString(rsReviews("brand"))%>&nbsp;<%=FixString(rsReviews("model"))%></td>
              </tr>
            <tr class="listBlankRow">
                <td class="listReviewItem">- Sorteret efter dato </td>
                </tr>
            <tr class="listBlankRow">
              <td class="listReviewItem"><img src="_grfx/spacer.gif" alt="Spacer" width="5" height="5" /></td>
              </tr>
           
            <%
            do while not rsReviews.eof
            %>
            <tr>
                <td>
                <strong>Phase 1:</strong>
                  <%=rsReviews("Phase1")%><br />
                <strong>Phase 2:</strong>
                <%=rsReviews("Phase2")%><br />
                <strong>Phase 3:</strong>
                <%=rsReviews("Phase3")%><br />
                <strong>Phase 4:</strong>
                <%=rsReviews("Phase4")%><br />
                <strong>Phase 5:</strong>
                <%=rsReviews("Phase5")%>
                </td>
            </tr>
            <tr>
              <td>&nbsp;</td>
              </tr>
            <%
            rsReviews.movenext
            loop
            %>
        </table>
           
        </td>
        <td valign="top" id="contentTable_Right">
        <!--#include file="inc_forum.asp" --></td>
      </tr>
    </table>
    </td>
  </tr>
</table>
Avatar billede wolfgang Praktikant
18. marts 2006 - 17:19 #10
Jeg har også prøvet med "do until rsReviews.eof".
- Det ændrer ikke resultatet.
Avatar billede wolfgang Praktikant
18. marts 2006 - 18:57 #11
Er der nogen, der kan se nogle pinlige fejl :)
Avatar billede mortenbock Nybegynder
18. marts 2006 - 19:12 #12
Jeg er blank....
Avatar billede erikjacobsen Ekspert
18. marts 2006 - 19:15 #13
Din ASP kode springer vel ikke noget over. Hvad sker der hvis du bruger sql-sætningen direkte på databasen?
Avatar billede kalp Novice
18. marts 2006 - 19:31 #14
virker det her ?



<table width="39%" border="0" cellspacing="0" cellpadding="0" align="center">
  <tr>
    <td><%=FixString(rsCat("Category"))%>:<br />
      <%=FixString(rsReviews("brand"))%>&nbsp;<%=FixString(rsReviews("model"))%></td>
  </tr>
  <tr>
    <td>- Sorteret efter dato </td>
  </tr>
  <tr>
    <td><img src="_grfx/spacer.gif" alt="Spacer" width="5" height="5" /></td>
  </tr>
  <tr>
                  <%
            do while not rsReviews.eof
            %>
    <td><strong>Phase 1:</strong> <%=rsReviews("Phase1")%><br />
      <strong>Phase 2:</strong> <%=rsReviews("Phase2")%><br />
      <strong>Phase 3:</strong> <%=rsReviews("Phase3")%><br />
      <strong>Phase 4:</strong> <%=rsReviews("Phase4")%><br />
      <strong>Phase 5:</strong> <%=rsReviews("Phase5")%> </td>
          <%
            rsReviews.movenext
            loop
            %>     
  </tr>
</table>
Avatar billede wolfgang Praktikant
18. marts 2006 - 19:35 #15
Jeg har lige prøvet at "paste" ovenstående ind - det gør ingen forskel.
Avatar billede wolfgang Praktikant
18. marts 2006 - 19:40 #16
erikjacobsen -> Hvis jeg kører sql-strengen i MS SQL Enterprise Manageren, kommer alt med.

Kan det have noget med Datatypen at gøre?
Pt. et de valgte felter "ntext".
Avatar billede erikjacobsen Ekspert
18. marts 2006 - 23:00 #17
Jo, måske. Hvad mener du med "springer 1. post over", sådan helt helt præcist?
Avatar billede wolfgang Praktikant
19. marts 2006 - 09:50 #18
Eksempel:
Hvis resultatet af sql-forespørgsel skal returnere 10 records (5 felter pr. rec.), bliver der ikke skrevet noget ud for record #1, men der gør for de andre 9.
- Om der så er 117 poster, bliver den første ikke skrevet ud

Fejlen er ret konsekvent :)
Avatar billede erikjacobsen Ekspert
19. marts 2006 - 10:00 #19
Ikke skrevet noget ud i betydningen:

1) <strong>Phase 1:</strong> <br />        ---altså hvor der er tomt hvor rsReviews sku' have været

eller

2) Linien med strong>Phase 1:</strong> <br />  mangler helt

Det betaler sig at være præcis :)

Det er nok nummer 1) for du er ramt ind i en klassisker i MSSQL med visse drivere (findes også andre steder). Jeg prøver at forklare:

Når der er store felter  TEXT, NTEXT, blobs af diverse slags men større end ints og varchar, skal man gøre noget bestemt for at få dem ud. Man må for det første kun aflæse dem een gang, anden gang er de tomme (noget med effektivitet), og man skal gøre det i den rækkefølge de står i SELECT-sætningen (hvis der står "SELECT *" så i den rækkefølge de står i SQL-serveren).

Alt dette bøvl for at kunne lave en lidt mere effektiv driver - vi sparer masser af millisekunder, men spilder timer og dage af programmørens tid.

Du skal for at få det til at virke her og nu sådan set bare lave din sql sætning om:

    sqlReviews =    "select " & _
                    "(select Manufacturer from tbl_RManufacturers where tbl_RManufacturers.ManufacturerID=tbl_Reviews.ManufacturerID)as brand, " & _
                    "(select Model from tbl_RModels where tbl_RModels.ModelID=tbl_Reviews.ModelID)as model " & _
                    "Phase1, Phase2,Phase3,Phase4,Phase5, " & _
                    "from tbl_Reviews where ReviewActive=1 and ManufacturerID="& qsBrandID &" and ModelID="& qsModelID &" order by ReviewID desc"

(og så bagefter se om det hele ikke kunne laves lidt smartere. Du slæber rundt på større og flere data end du har brug for - senere!)

Jeg tror på det virker. Og læg så mærke til, at hvis du havde beskrevet meget præcist hvad der var problemet, så havde du haft løsningen i går ;)
Avatar billede erikjacobsen Ekspert
19. marts 2006 - 10:00 #20
Ja
      "Phase1, Phase2,Phase3,Phase4,Phase5, " & _
skal lige være
      ",Phase1, Phase2,Phase3,Phase4,Phase5 " & _
Avatar billede wolfgang Praktikant
19. marts 2006 - 10:03 #21
Så er problemet løst.
Da jeg benytter recordset'et uden for loop, "snupper" det den første post :(

rsReviews.movefirst <---- ÆNDRING
do while not rsReviews.eof

Tak for jeres tid mv...
Avatar billede wolfgang Praktikant
19. marts 2006 - 10:12 #22
Hov, Ser først din kommentar nu Erik.
- Tror ikke din løsning ville afhjælpe mit problem.

Jeg tester det dog lige af.
Avatar billede erikjacobsen Ekspert
19. marts 2006 - 10:13 #23
Movefirst vil dog også løse det i dette tilfælde, da du fylder posten op igen.
Avatar billede wolfgang Praktikant
19. marts 2006 - 10:26 #24
Hej Erik, Så e det testet og det virker.
Dit eksempel ser ud til at skære 0,1 sek. af renderingstiden samtidig med.

Det fortjener da points.
- Opret venligst et svar.

Kan uddybe dine kommentarer omkring optimering af SQL-strengen?
Avatar billede erikjacobsen Ekspert
19. marts 2006 - 10:34 #25
Jeg samler slet ikke på point, tak.

Men det jeg synes jeg kan se, er at du har et resultat:

brand model  phase1 phase2  etc

BBB  MMM    1 2 ...
bbb  mmm    2 3 ...
bbb  mmm    4 3 ...
bbb  mmm    5 3 ...
bbb  mmm    6 3 ...

(sådan ca.) Og så bruger du kun BBB, MMM fra første række, og ingen af bbb, mmm fra de efterfølgende. Men alligevel skal de beregnes og overføres. Jeg ville overveje at lave 2 sql-sætninger, men om det kan betale sig i tid afhænger af mængden af data - det vil dog være kønnere ;)
Avatar billede wolfgang Praktikant
21. marts 2006 - 11:22 #26
Erik > Jeg syntes da at du har fortjent pointene.

Har du evt. et par links til ressurcer omkring SQL og optimering?
Avatar billede erikjacobsen Ekspert
21. marts 2006 - 11:54 #27
Jeg samler slet ikke på point - har ikke gjort det de sidste 2-3 år.

Næh, links til "SQL og optimering" - jeg har ikke nogen. Prøv at lede efter "denormalizing" på tabeller. Normalisering, 1., 2., 3. normalform, siger noget om hvordan man stiller det pænt op. De-normalisering gør man efterfølgende mhb effektivitet.
Avatar billede wolfgang Praktikant
21. marts 2006 - 11:59 #28
OK - Det vil jeg kigge nærmere på.

Endnu en gang - tusind tak for hjælpen.
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