Avatar billede turbo2000 Nybegynder
20. september 2011 - 08:14 Der er 10 kommentarer og
1 løsning

Invalid use of Null: 'replace'

Er der nogen der ved hvordan jeg undgår denne fejl?

<% if language = "" Then %>

    <% = Replace(x("beskrivelse"),vbCrLf,"<br />") %>

<% elseif language = "de" Then %>

    <% If Replace(x("beskrivelse_de"),vbCrLf,"<br />") = "0" Then %><% = Replace(x("beskrivelse"),vbCrLf,"<br />") %><% Else %><% = Replace(x("beskrivelse_de"),vbCrLf,"<br />") %><% End If %>

<% elseif language = "en" Then %>

    <% If Replace(x("beskrivelse_en"),vbCrLf,"<br />") = "0" Then %><% = Replace(x("beskrivelse"),vbCrLf,"<br />") %><% Else %><% = Replace(x("beskrivelse_en"),vbCrLf,"<br />") %><% End If %>

<% End If %>
Avatar billede softspot Forsker
20. september 2011 - 08:29 #1
Det sker typisk fordi den streng du forsøger at udskifte noget i ikke er erklæret eller indeholder null (fordi den kommer fra et databasefelt der er nullable). Du kan nok komme omkring problemet med følgende metode:

Replace(x("beskrivelse_en")&"", vbCrLf, "<br />")

Det sørger for at feltet, selvom det indeholder null, bliver lavet om til en gyldig streng.
Avatar billede turbo2000 Nybegynder
20. september 2011 - 12:42 #2
Hej Softspot mange tak for svaret :) Dog kan jeg ikke rigtig få det til at virke... nedestående eksempel vil ikke udskrive <% = Replace(x("tysk_de")&"",vbCrLf,"<br />") %>



<% If x("tysk") = "" then %>

    <% = Replace(x("dansk")&"",vbCrLf,"<br />") %>

<% Else %>

    <% = Replace(x("tysk")&"",vbCrLf,"<br />") %>

<% End If %>
Avatar billede turbo2000 Nybegynder
20. september 2011 - 12:42 #3
hov den vil ikke udsrkive: <% = Replace(x("tysk")&"",vbCrLf,"<br />") %> mener jeg :)
Avatar billede softspot Forsker
20. september 2011 - 12:55 #4
Udskriver den noget overhovedet?

Du har umiddelbart samme udfordring med din if-sætning, da "" <> null. Dermed vil en null-værdi i x("tysk") medføre at den tyske alligevel forsøges udskrevet.

Prøv evt.

<%
If x("tysk") & "" = "" then

    Response.Write Replace(x("dansk")&"",vbCrLf,"<br />")

Else

    Response.Write Replace(x("tysk")&"",vbCrLf,"<br />")

End If
%>

Hvis dette ikke er problemet, må du lige give noget mere info om, hvilke data du arbejder med, dvs. hvad er der i de enkelte felter i dit recordset x...?
Avatar billede turbo2000 Nybegynder
20. september 2011 - 13:18 #5
Det var underligt.. Hvis jeg bruger din kode:
<%
If x("tysk") & "" = "" then

    Response.Write Replace(x("dansk")&"",vbCrLf,"<br />")

Else

    Response.Write Replace(x("tysk")&"",vbCrLf,"<br />")

End If
%>

så vil den ikke udskrive:

    Response.Write Replace(x("tysk")&"",vbCrLf,"<br />")


MEN hvis jeg fjerne din kode og bare skriver:
<% Response.Write Replace(x("tysk")&"",vbCrLf,"<br />") %>

så vil den gerne udskrive det :/
Avatar billede softspot Forsker
20. september 2011 - 13:26 #6
Hvordan ser den kode der fungerer så ud?
Avatar billede turbo2000 Nybegynder
20. september 2011 - 13:33 #7
Den ser sådan ud:
<% Response.Write Replace(x("tysk")&"",vbCrLf,"<br />") %>

men hvis jeg erstatter dette med din kode vil den ikke udskrive "tysk"
Avatar billede turbo2000 Nybegynder
20. september 2011 - 13:36 #8
Kan det være noget i databasen der gør det?

Det virker umiddelbart også hvis feltet ikke er et memo
Avatar billede softspot Forsker
20. september 2011 - 13:50 #9
Kan du ikke lige prøve at vise hele den if-sætning, hvor koden fungerer (hvis ellers det er det du mener med det du skriver)...?

Det er utroligt svært at hjælpe dig, når du ikke er mere meddelsom end du er. Du er nød til at vise den kode du arbejder med (det er ikke nok bare at vise én linje, som er taget ud af en kontekst). Samtidig er det også meget vigtigt hvilke data der ligger i den record din kode arbejder med, dvs. du skal altså have fortalt mig, hvilke data der helt konkret ligger i den record for de relevante felter.

Du kan bruge simple response.writes til at vise data med. Vær opmærksom på at null udskrives som blank, så du skal nok lave en eller anden form for tjek inden du udskriver værdien, f.eks.:

Response.Write "x(""tysk""): " & SkrivVaerdi(x("tysk")) & "<br>"
Response.Write "x(""dansk""): " & SkrivVaerdi(x("dansk")) & "<br>"

og så definer en funktion der hedder SkrivVaerdi i samme asp-side, således denne kan kaldes for hert felt du skal udskrive. Denne kunne se således ud:

function SkrivVaerdi(v)
  if isnull(v) then
    SkrivVaerdi = "NULL"
  elseif isempty(v) then
    SkrivVaerdi = "EMPTY"
  else
    SkrivVaerdi = v
  end if
end function
Avatar billede turbo2000 Nybegynder
21. september 2011 - 08:59 #10
Hej Softspot, jeg fandt ud af at memo felter åbenbart kun kan kaldes 1 gang. Det samme gælder tilsyneladene ikke for text felter så derfor virkede det fint.

Jeg fandt selv en løsning på problemet her:
    <%
dansk = x("beskrivelse")
    If Len(dansk) > 0 And IsNull(dansk) = False Then
    response.write replace(dansk, vbCrLf, "")
    End If
    %>

Smid et svar så for du point fordi du gad bruge din tid på at hjælpe mig (igen) ;)
Avatar billede softspot Forsker
21. september 2011 - 09:35 #11
Ja, OK, det var jo en af de mere eksotiske :-)

Det kan være du kan finde noget interessant om hvordan man håndterer memo og blob-felter i øvrigt, hvis du søger efter noget med ReadChunk og WriteChunk sammen med ADO...

Det er ikke noget jeg selv har haft problemer med og derfor har jeg ikke brugt ovenstående.
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