Avatar billede killstun Nybegynder
12. august 2005 - 21:29 Der er 24 kommentarer og
1 løsning

Vis notat felt med linieskift

Jeg har en kolonne i min access database, som jeg har lavet til notat felt via designvisning (da jeg gerne vil kunne skrive mere end 255 bogstaver). Via formen har jeg lavet et textarea, så jeg også kan indføre linieskift.

Mit problem er så visningen af feltet. Her skriver jeg normalt Response.write rs("plot"), men dette fungere ikke helt. Hvorledes kan jeg udskrive "plot" så den fx viser 50 bogstaver pr. linie og medtager eventuelle linieskift der er lavet.
Avatar billede softspot Forsker
12. august 2005 - 21:34 #1
Prøv lige at checke dette link: http://www.eksperten.dk/spm/639323

Jeg tror at jeg lige har svaret på nogenlunde det samme spm. der (bare med 25 tegn pr. linie).
Avatar billede softspot Forsker
12. august 2005 - 21:36 #2
Hvis du skriver feltets indhold som HTML-indhold, skal du nok også overveje at udskifte linieskift med <br>, således:

Response.Write(Replace(cstr(rs("plot")), vbcrlf, "<br>"))
Avatar billede killstun Nybegynder
12. august 2005 - 21:49 #3
Det nederste forslag virker virker rigtig. Den udskriver ikke noget. HVis jeg laver feltet om til at være tekst i stedet for notat i designvisning, udskriver den?

Det øverste forslag syntes jeg er lidt for meget kode for sådan en forholdsvis simpel ting...nogle forslag?
Avatar billede softspot Forsker
12. august 2005 - 22:01 #4
Hvis du er ligeglad med om teksten ombrydes ved mellemrum, så kan du vel bare lave et lille loop der klipper teksten i klumper af 50 tegn, men den anden rutine jeg henviste til tager sig af ombrydning ved mellemrum og knækker ord der er længere end linien...

Forstår heller ikke helt argumentet med mængden af kode... du skal jo bare kalde det ikke lave hver gang... :)

Hvad angår dit plot-felt, så er det noget mystisk at det ikke fungerer fordi det er et notatfelt.
Hvordan henter du data ud af databasen?
Hvilken version af Access benytter du?
Avatar billede killstun Nybegynder
12. august 2005 - 22:16 #5
Jeg anvender access 2003. Jeg henter dataen ud således:

<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("/vti_log/etellerandet.mdb")
Conn.Open DSN
strSQL = "Select * From etellerandet where ID =" & Request.querystring("ID")
Set rs = Conn.Execute(strSQL)
Do While NOT rs.EOF

if rs("plot") <> "" then
Response.Write(Replace(cstr(rs("plot")), vbcrlf, "<br>"))
end if

rs.MoveNext
Loop
Conn.Close
Set Conn = Nothing
%>
Avatar billede softspot Forsker
12. august 2005 - 22:26 #6
hmmm... bort set fra at dit check på om rs("plot") indeholder noget umiddelbart er overflødig, kan jeg ikke lige komme i tanke om hvad der skulle være galt (derfor vil jeg da foreslå som det sidste for nu, at du prøver koden uden den if-sætning)...
Avatar billede killstun Nybegynder
12. august 2005 - 22:29 #7
hmm, mystisk. Den vil gerne udskrive hvis jeg fjerner if sætningen...
Avatar billede softspot Forsker
12. august 2005 - 22:31 #8
der er vel som sagt heller ikke behov for den...?
Avatar billede goose Nybegynder
12. august 2005 - 23:27 #9
Hvad nu hvis du bruger:

if not len(rs("plot")) = 0 then
Response.Write(Replace(cstr(rs("plot")), vbcrlf, "<br>"))
end if

Det kan vel godt blive et problem med at replace hvis nu feltet er tomt, kan det ikke ?

/Goose
Avatar billede stigdk Nybegynder
12. august 2005 - 23:28 #10
Jeg kan heller ikk se hvad du vil med dem if sætning...

Jeg vil lige undersøge noget

//eXe out - I just love ASP, SO WHAT?
Avatar billede softspot Forsker
12. august 2005 - 23:42 #11
goose >> det skulle jeg ikke mene - der kan dog blive problemer hvis feltet indeholder null (men hvis feltet i databasen ellers er sat op til "allow zero length" og "not nullable" så burde det egentlig ikke være et problem).
Avatar billede goose Nybegynder
12. august 2005 - 23:45 #12
softspot >> jeg har bare tidligere været ude for det med beskeden "Invalid use of replace" eller noget i den stil og det løste jeg med len.

/Goose
Avatar billede softspot Forsker
12. august 2005 - 23:55 #13
goose >> jeg vil umiddelbart tro det har været af andre årsager, for hvis man laver en simpel test:

replace("", vbcrlf, "<br>")

så kommer der ikke nogen fejl.
Avatar billede goose Nybegynder
13. august 2005 - 00:09 #14
Ja det er muligt, jeg kan som sagt ikke huske hvorfor :o/

/Goose
Avatar billede killstun Nybegynder
13. august 2005 - 13:47 #15
Jamen softspot, der kan være mange grunde til at man gerne vil anvende if sætningen. I mit tilfælde har jeg to kolonner fra en table, hvor jeg i den ene skrive:

Plot:

og i den anden udskriver jeg strengen plot. Men hvis der ikke findes noget i strengen plot, vil jeg ikke have at den første kolonne vises hvor der står Plot:

Jeg kan udmiddelbart ikke få nogen af idéer til at virke. MEn jeg vender lige tilbage når jeg finder løsningen.
Avatar billede softspot Forsker
13. august 2005 - 13:53 #16
Det er da klart killstun, men jeg kan jo forholde mig til den kode du viser mig og der kunne jeg ikke se nogen grund til at bruge den. Andet ligger der såmænd ikke i min betragtning.
Avatar billede killstun Nybegynder
13. august 2005 - 14:15 #17
Jeps softspot. Jeg er dog kommet uden om problemet ved at lave et ekstra tekstfelt i databasen, som sættes til Ja eller Nej alt efter om der findes noget i plot feltet. Lidt omstændigt, men kunne ikke se andre muligheder. Vil prøve at lege lidt med det første link du gav mig, selvom det er meget kode for sådan en forholdsvis simpel ting som sagt.
Avatar billede killstun Nybegynder
13. august 2005 - 14:27 #18
Jeg har nu fundet dette script:

<%
function DelOrd(txt,antalTegn,linjeskift)
   
    if Len(txt) > int(0) then
        mySplit = split(txt,linjeskift)
       
        thetxt = ""
       
        for i = 0 to UBound(mySplit)
            if Len(mySplit(i)) > int(antalTegn) then
                thetxt = thetxt & Left(mySplit(i),antalTegn) & "-" & linjeskift
                if Mid(mySplit(i),antalTegn+1,Len(mySplit(i))-antalTegn) > int(antalTegn) then
                    thetxt = thetxt & DelOrd(Mid(mySplit(i),antalTegn+1,Len(mySplit(i))-antalTegn),antalTegn,linjeskift) & " "
                else
                    thetxt = thetxt & Mid(mySplit(i),antalTegn+1,Len(mySplit(i))-antalTegn) & " "
                end if
            else
                thetxt = thetxt & mySplit(i) & " "
            end if
        next
       
        DelOrd = Left(thetxt,Len(thetxt)-1)
    else
        DelOrd = ""
    end if

end function
%>

Første kolonne i tabellen:

dim plotfelt
plotfelt = rs("plot")
if plotfelt <> "" then
Response.write "Plot:"
Response.write "<br />"
end if

Anden kolonne i tabel hvor jeg udskriver strengen:

if plotfelt <> "" then
Response.write DelOrd(plotfelt,50,"<br />")
end if

- På denne vis kan jeg anvende if-sætningen korrekt. Men jeg får så et andet problem. Nåt jeg laver et linieskift i formen, bliver det til et mellemrum når jeg udskriver strengen? Kan du hjælpe med at rette dette, da jeg bare har fundet scriptet og kan ikke hitte ud af hvad der skal rettes.
Avatar billede softspot Forsker
13. august 2005 - 14:49 #19
Et umiddelbar indfald: Er du sikker på at linieskift (dem du selv kan lave i editor) altid er "<br />", kunne det risikere at være "<br>" i stedet og dermed et linieskift som ikke fanges i opsplitningen af strengen...?

Jeg antager at du gemmer data i plot med html-liniebreaks... eller nej?

Hvis ja, så vil jeg umiddelbart mene at det var lettere at styre, hvis du gemte det med alm. linieskift som textarea indsætter og så formatterer teksten når den skal udskrives (primært pga. de format-forskelle jeg antyder ovenfor).

Kan du ikke prøve at vise en tekst hvor du har problemet med ekstra linieskift? Det kan være problemet bliver tydligt, hvis man ser teksten...
Avatar billede killstun Nybegynder
13. august 2005 - 15:10 #20
Jeg laver ikke linieskift med kode, men anvender bare enter i form felt. Prøver lige at skrive <br> ell. <br /> og ser om det fungere.
Avatar billede killstun Nybegynder
13. august 2005 - 15:13 #21
Ja, det virker hvis jeg laver linieskift kode i stedet for bare at anvende enter. Kunne ellers godt tænke mig at man ikke behøves at anvende kode i formen. Smider du ikke lige et svar så du kan få veltjente points.
Avatar billede softspot Forsker
13. august 2005 - 15:33 #22
Hvis du benytter textarea til at vedligeholde din tekst med, så er det tegnene der svarer til vbcrlf som bliver indsat, men de vil ikke kunne ses hvis man skriver det ud som HTML... Hmm... nå, jeg kan ikke helt følge med i hvad har og hvad du ikke har, men jeg håber du selv finder ud af det alligevel (ellers hjælper jeg gerne lidt mere :)).
Avatar billede killstun Nybegynder
13. august 2005 - 23:40 #23
Jeg udskriver strengen som asp, ikke ren html. Kan man undgå at skulle lave koder i textarea feltet, eller skal man anvende koderne før det registreres?
Avatar billede softspot Forsker
14. august 2005 - 19:07 #24
Når du siger at du udskriver den som ASP, så antager jeg det er fordi du benytter Response.Write til at skrive teksten ud med, er det ikke korrekt? Hvorvidt det bliver renderet som HTML eller som tekst i et textarea afhænger mere af hvor du udskriver teksten end hvordan. Du kan f.eks. udskrive teksten således (konteksten er vigtig):

<p><% Response.Write(rs("plot")) %></p>

og det vil blive renderet som ren HTML (herunder tilhørende fortolkning af de tags der måtte ligge i teksten), eller du kan udskrive det således:

<textarea><% Response.Write(rs("plot")) %></textarea>

og det bliver renderet som tekst i et tekstfelt, hvor man kan se html-tags som klartekst uden fortolkning af disse.

I det første eksempel skal du udskifte linieskift med <br> hvis du bruger de linieskift som textarea-kontrollen genererer når du trykker enter:

<p><%= Replace(rs("plot"), vbcrlf, "<br>") %></p>

og ikke noget når du indsætter teksten i textarea-kontrollen.

Jeg er sikker på at du allerede ved dette, men jeg vil bare sikre mig at vi snakker samme sprog (nu ved du i det mindste hvilket sprog jeg snakker :))...
Avatar billede softspot Forsker
25. februar 2006 - 21:24 #25
Tak for point :)
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