Avatar billede annettef Nybegynder
22. februar 2005 - 09:03 Der er 9 kommentarer og
2 løsninger

Træls fejl i IF sætning - hvad gør jeg forkert?

Hej

Jeg har en side hvorpå jeg udskriver nogle data fra en database.
Jeg har blandt andet en tabel i databasen som hedder [pdffil] herfra henter jeg nogle pdffiler som hører sammen med en tekst i en anden tabel i DB.

Hvis der ikke er nogen pdf fil til den pågældende tekst skal der udskrives et bestemt stykke grafik, men hvis der er en pdf fil skal der udskrives et andet stykke grafik med et link på.

Til det har jeg lavet følgende ifsætning
::::IF SÆTNING::::
97    ' SQL forespørgsel
98    strSQL = "Select * From pdffil Where tekstNr = " & intTekstNr & " Order By pdfId"
99
100  ' Udfør strSQL (rs1 kommer til at indeholde dataen fra tabellen underkategori)
101    Set rs3 = Conn.Execute(strSQL)
102   
103    Response.Write "<tr><td align='right'>"
104   
105    if rs3("PDFfil")&"" = "" then
106    Response.Write "<img src='gfx/ingen_pdf_ikon.gif' border='0' >"
107    else
108    Response.Write "<a href='" & rs3("PDFfil") & "' target='blank'><img src='gfx/pdf_ikon.gif' alt='Læs som PDF fil' border='0' width='50' height='50'></a>"   
109    end if
110   
111    Response.Write "</td></tr>"
::::SLUT::::

Mit problem er nu at hvis der ingen pdf fil er, så får jeg følgende fejl:
error '80020009'
Exception occurred.

/tele-it/www/apparater2.asp, line 105

Hvad er det jeg gør forkert?

Her er hele koden til siden
::::HELE SIDEN::::
<!--
*************************************************************
***** Development by Datronic NetDesign ApS            *****
*****                                                  *****
***** Datronic NetDesign ApS                            *****
***** Marselis Boulevard 175                            *****
***** DK-8000 Aarhus C                                  *****
***** Denmark                                          *****
***** Tel: +45 86256343                                *****
*****                                                  *****
***** www.dnd.dk                                        *****
***** mail@dnd.dk                                      *****
*****                                                  *****
*************************************************************
-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%
intTekstNr = Request.QueryString("intTekstNr")
%>
<!--#include file="dbconn.inc"--><!-- Database forbindelse oprettes via ekstern fil-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<Link Rel="stylesheet" href="tele-it.css" Type="text/css" > <!-- link til eksternet stylesheet-->
<title>TELE IT COMMUNICATION ApS</title>
<STYLE TYPE="text/css">
BODY{
    background-attachment: fixed;
    background-image: url();
    background-repeat: no-repeat;
    margin-left: 4px;
    margin-top: 4px;
    margin-right: 0px;
    margin-bottom: 0px;
}
</style>
</head>

<body>
<table width="550" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td colspan="2">&nbsp;</td>
  </tr>
  <tr>
    <td valign="top"><!--start kolonne med tekst-->
    <%
  ' Indholdstabel til tekst start
      Response.Write "<table width='350'>"
 
  ' SQL forespørgsel
    strSQL = "Select * From tekst Where tekstNr = " & intTekstNr & " Order By tekstId"

  ' Udfør strSQL (rs1 kommer til at indeholde dataen fra tabellen underkategori)
    Set rs1 = Conn.Execute(strSQL)

  'Tjekker om der er noget i databasen
    If rs1.EOF Then

  ' Hvis der ingen tekster er i DB afsendes følgende meddelse.
    Response.Write "<br><br><center>Siden er under opdatering...</center><br><br>"

    Else

  ' Men hvis DB ikke er tom, udskrives data.
    Do While Not rs1.EOF

    Response.Write "<tr><td>"

  ' Udskriv Titel
    Response.Write "<p>" & rs1("overskrift") & "</p>"

    Response.Write "</td></tr>"
    Response.Write "<tr><td>"

  ' Udskriv indhold
    Response.Write Replace (rs1("indhold"), vbCrLf, "<br>"&vbCrLf) 'Erstatter databasens kode for linieskift vbCrlf med html break
       
    Response.Write "<br><br></td></tr>"

  ' Gå til næste record i rs
    rs1.MoveNext

' Gå i loop indtil rs1 ikke indeholder flere records (= EOF)
  Loop

End If
'Indholdstabel til tekst slut
  Response.Write "</table>"
%>
</td> <!--kolonne med tekst slut-->
<td valign="top"> <!--start kolonne med foto-->
<%
  ' Indholdstabel til foto start
      Response.Write "<table width='200'>"

    ' SQL forespørgsel
    strSQL = "Select * From pdffil Where tekstNr = " & intTekstNr & " Order By pdfId"

  ' Udfør strSQL (rs1 kommer til at indeholde dataen fra tabellen underkategori)
    Set rs3 = Conn.Execute(strSQL)
   
    Response.Write "<tr><td align='right'>"
   
    if rs3("PDFfil")&"" = "" then
    Response.Write "<img src='gfx/ingen_pdf_ikon.gif' border='0' >"
    else
    Response.Write "<a href='" & rs3("PDFfil") & "' target='blank'><img src='gfx/pdf_ikon.gif' alt='Læs som PDF fil' border='0' width='50' height='50'></a>"   
    end if
   
    Response.Write "</td></tr>"

  ' SQL forespørgsel
    strSQL = "Select * From foto2 Where tekstNr = " & intTekstNr & " Order By fotoId"

  ' Udfør strSQL (rs1 kommer til at indeholde dataen fra tabellen underkategori)
    Set rs2 = Conn.Execute(strSQL)
   
  ' Hvis DB ikke er tom, udskrives data.
    Do While Not rs2.EOF

    Response.Write "<tr><td>"

  ' Udskriv foto
    if rs2("foto")&"" = "" then
    Response.Write "<img src='foto/intet_foto.jpg' border='0' >"
    else
    Response.Write "<img src=""" & rs2("foto") & """ border='0' width='200' height='150'>"
    end if
   
    Response.Write "</td></tr>"

  ' Gå til næste record i rs
    rs2.MoveNext

' Gå i loop indtil rs2 ikke indeholder flere records (= EOF)
      Loop
   
'Indholdstabel til tekst slut
  Response.Write "</table>"
%>   
</td> <!--kolonne med foto slut-->
</tr>
 
 
<%
' Luk forbindelse fra dbconn.inc
Conn.Close
Set Conn = Nothing
%> 
  </tr>
</table><!--hovedtabel slut-->
</body>
</html>
::::SLUT::::
Avatar billede ldanielsen Nybegynder
22. februar 2005 - 09:39 #1
Prøv at rette
if rs3("PDFfil")&"" = "" then

til
if CStr(rs3("PDFfil")) = "" then
Avatar billede annettef Nybegynder
22. februar 2005 - 09:54 #2
Det giver stadig samme fejl...
Avatar billede ldanielsen Nybegynder
22. februar 2005 - 10:36 #3
hvilket dataformat er databasefeltet PDFfil?
Avatar billede annettef Nybegynder
22. februar 2005 - 10:38 #4
Det er notat.
I feltet står der en sti (f.eks. pdf/test.pdf). Den sti bruger jeg så til at hente filen med.
Avatar billede ldanielsen Nybegynder
22. februar 2005 - 10:53 #5
Så er det derfor.

Notat er et ganske særligt format der benyttes til meget store tekstmængder. Du burde benytte Tekst, men naturligvis skal du overveje om det er nok med 255 tegn, som er max for tekst. Husk selv at vælge feltstørrelsen, standard er 50 tegn

Er du sikker på at rs3 ikke er tomt:

if not rs3.BOF then
  if rs3("PDFfil")&"" = "" then
    Response.Write "<img src='gfx/ingen_pdf_ikon.gif' border='0' >"
    else
    Response.Write "<a href='" & rs3("PDFfil") & "' target='blank'><img src='gfx/pdf_ikon.gif' alt='Læs som PDF fil' border='0' width='50' height='50'></a>"   
    end if
end if

Hvis du vil beholde feltet som Notat skal du hente rs3("PDFfil") over i en variabel, og så referere til den efterfølgende:
strPDFfil = rs3("PDFfil")
if strPDFfil  & "" = "" then
    Response.Write "<img src='gfx/ingen_pdf_ikon.gif' border='0' >"
    else
    Response.Write "<a href='" & strPDFfil & "' target='blank'><img src='gfx/pdf_ikon.gif' alt='Læs som PDF fil' border='0' width='50' height='50'></a>"   
    end if


Dette er HELT nødvendigt med Notatfelter, for du kan kun regne med at kunne læse dem én gang. Hvis du først spørger om feltet er tomt, og derefter udskriver feltet, så er det to gange, og Access driveren har lov til at "glemme" indholdet at notatfelter efter første læsning.
Avatar billede annettef Nybegynder
22. februar 2005 - 11:03 #6
Nu har jeg lavet dataformat om til tekst - og ændret feltstørrelsen til 255.

På den side hvor fejlen kommer er rs3 tomt. Det jeg ville med siden var at tjekke om rs3 var tomt og hvis det er det så udskrive et bestemt stykke grafik.

Hvis det ikke er tomt skal det andet grafik udskrives med et link på.
Avatar billede cpufan Juniormester
22. februar 2005 - 12:39 #7
hvad med:

105    if rs3("PDFfil")&"" = "" OR rs3("PDFfil") is null then
Avatar billede cpufan Juniormester
22. februar 2005 - 12:40 #8
eller mere simpelt

105    if rs3("PDFfil") is null then
Avatar billede annettef Nybegynder
22. februar 2005 - 13:06 #9
Nu har jeg løst problemet - skrev i stedet for

if rs3.EOF then
    Response.Write "<img src='gfx/ingen_pdf_ikon.gif' border='0' >"
    else
    Response.Write "<a href='" & rs3("PDFfil") & "' target='blank'><img src='gfx/pdf_ikon.gif' alt='Læs som PDF fil' border='0' width='50' height='50'></a>"   
    end if

Idanielsen får point fordi jeg blev gjort opmæsrksom på problemet med dataformatet i databasen og ledte mig i den rigtige retning...

/Annette
Avatar billede ldanielsen Nybegynder
22. februar 2005 - 13:08 #10
Nu snakker v ijo ikke mere om at rs3 (recordsettet) er tomt, men om feltet PDFfil er tomt.

Får du stadig fejl, og hvis ja, hvad er fejlen og må vi se koden?
Avatar billede annettef Nybegynder
22. februar 2005 - 13:16 #11
Altså jeg tror jeg har gjort jer mere forvirret en nødvendigt var ;o)

Da jeg oprettede mit spørgsmål troede jeg at det var nok at tjekke om feltet PDFfil i databasen var tomt, men så fandt jeg ud af at det jo faktisk var hele recordsettet (rs3) jeg skulle tjekke på.

Så derfor endte det hele med at jeg skrev min IFsætning sådan at den tjekker om rs3 er tomt.

Fejlen opstod fordi jeg kun tjekkede om et bestemt felt var tomt og ikke hele recordsettet. Men der blev aldrig lagt nogle værdier i mit recordset, fordi selve tabellen pdffil ingen poster indeholdt, så derfor er jeg jo nødt til at tjekke på hele recordsettet i stedet for.

Så det lange af det korte er - jeg får ingen fejl mere...

Tak for hjælpen

/Annette
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