12. august 2005 - 21:29Der 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.
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?
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?
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
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)...
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).
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.
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.
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.
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.
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...
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.
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 :)).
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?
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:
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 :))...
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.