Just nu i M3-nätverket
Jump to content

Punkter i rapport


Krister E

Recommended Posts

Hej

Om man har en rapport i Access, och man vill att vissa fält som har väldigt lång text ska det huggas av efter en viss längd, samt att man lägger till några punkter (.....).

 

T.ex ordet "hälsovårdsingenjör" skulle då se ut "hälsovård...".

 

Jag vet inte om man ska använda code buildern i Access för att skriva något format-liknande för den textbox som innehåller data i detalj-sektionen i rapporten.

 

Är inte så hemma på VBA om det är det som ska gälla.

 

Kodmässigt är det ju inte så svårt, grejen är VAR man ska lägga koden.

 

Någon som vet?

 

 

 

Link to comment
Share on other sites

string=RS("kolumn")

<%=left(string,150)%>

 

vad beträffar punkterna kan du lägga in en if-sats som kollar antalet bokstäver i string och skriver ut punkter vid över 150.

 

<% if string>150 then

response.write ("...")

else

response.write ("")

end if%>

 

eller något liknande.

Hoppas jag förstått dig rätt...

 

Link to comment
Share on other sites

tack för svaret,men det är inte riktigt som jag menar.

 

först så är det inte i ASP jag skriver, utan rapporten anropas från ett VB-program.

 

grejen är att jag vill ändra utseendet av rapporten (åtminstone delvis) så att dom fält som innehåller långa ord ska kortas av och ersättas med ... i slutet.

 

det finns ju i Access både code builder och expression builder (har engelsk variant) men jag vet inte riktigt om det är ngn av dom som jag skall använda.

 

Link to comment
Share on other sites

Jag är inte säker på hur man gör det snyggast men jag testade med en rapport som bygger på en fråga. Antag att du i frågan har ett fält INTEXT. Skapa ett nytt fält i frågan med

UTTEXT: OOM(Längd([iNTEXT])<=25;[iNTEXT];(Vänster([iNTEXT];25) & "..."))

 

Det innebär att om Längden av INTEXT är mindre än 25 blir resultatet hela INTEXT är den längre än 25 kommer de första 25 tecknen med följt av ...

 

Link to comment
Share on other sites

Skrev den här koden i en textbox:

 

=IIf(Len([regnr])=6;[namn]="olle";[namn]="kalle")

 

vad som står är oväsentligt, eftersom jag bara ville testa, men vad som skedde är att som reg nr i rapporten står det nu Error#, och inget hände med varken namn textboxen.

 

förslag på vad som orsakar error?

 

Link to comment
Share on other sites

Jag fick det felet själv när jag testade att göra kontrollen av fältlängden direkt i layouten av rapporten. Gjorde jag det direkt i frågan som rapporten bygger på blir det rätt enligt förra svaret.

 

Link to comment
Share on other sites

ledsen om jag verkar dum i huvudet, men jag förstår inte riktigt var koden ska vara.

 

rapporten öppnas från ett vb-prg med DoCmd.Open.....

och ska sedan skrivas ut direkt.

 

den här frågan som du beskriver, var kommer den in i bilden.

för det är väl knappast mening att man ska fylla i ngn inputbox, eller liknande?

 

jag tyckte det såg bra ut att sätta koden i textboxen för det fält som if-satsen bygger på (reg nr i det här fallet).

 

tacksam om du kan förklara vad som ska göras, eller rättare sagt var.

 

tack på förhand

 

Link to comment
Share on other sites

För att reda ut ev. missförstånd. Har du allt i en Access-databas, tabeller frågor och rapporter eller kommer data någon annanstans ifrån. Du skriver VB-program. Mina förslag bygger på en Accesdatabas med tabeller frågor och rapporter och ev. VBA-kod. Öppnar du rapporten med VBA-kod med DoCmd.OpenReport "Rapporten".......? I egenskaper för rapporten har du fliken Data och raden Datakälla. Vad står det där? Namnet på en fråga? I sådant fall är det där du ska skriva in det. Du måste då även ändra i rapporten så att den tar med fältet UTTEXT istället för det ursprungliga INTEXT.

 

Det här ska vi lösa du kanske får komma med mer info hur ditt projekt ser ut.

 

Link to comment
Share on other sites

Hej

Jo, allt finns i Access.

Vet ej riktigt om man kan kalla det VBA-kod, men det öppnas som sagt från ett VB-program där koden finns under en knapp som när den trycks ner så skrivs rapporten ut.

 

I fliken för Data (och detta är alltså egenskaperna för textboxen Regnr) har jag i datakälla just IIf-koden.

 

Detta är koden från VB som generar utskriften av rapporten:

 

Dim appAccess As Access.Application

 

Set appAccess = New Access.Application

With appAccess

.OpenCurrentDatabase "C:\program\microsoft visual studio\vb98\bil.mdb"

.DoCmd.OpenReport "bilar1", acViewPreview, , "regnr='reg 123'"

.DoCmd.PrintOut , , , acHigh

.Quit

.End With

Set appAccess = Nothing

 

Projektet är helt enkelt ett biluthyrningsprogram och denna del är helt enkelt en sammanställning reg.nr-vis som tar upp viss data (ut-och intid, namn, avd, ansvar).

 

Problemet är då som sagt att vissa namn och avd kan vara längre än vad utrymmet tillåter i rapporten och måste då huggas av, men det ser ju trevligare ut att sätta dom klassiska punkterna i slutet istället för att bara hugga av.

 

Är det fler fakta som behövs så är det bara att fråga.

 

Är väldigt tacksam att du tar dig tid att hjälpa mig.

 

Link to comment
Share on other sites

Du har alltså en rapport Bilar1. Öppna den rapporten i designläge. högerklicka på den svarta fyrkanten uppe till vänster och välj Egenskaper så ser du under Data > Datakälla var rapporten får sina data ifrån. Troligen en fråga. Hur ser den frågan ut. Det är i den frågan jag kan tänka mig att du ska lägga kontrollen av fältlängden.

 

Link to comment
Share on other sites

OK nu ramla åtminstone en liten pollett ner.

 

Eftersom jag inte är så hemma på Access så tittade jag inte på rapportens egenskaper (utan textboxens) och det var därför jag inte kunde hitta någon SQL-sats.

 

Så här ser den ut iaf:

SELECT bilar.regnr, bilar.uttid, bilar.lind AS bilar_lind, person.lind AS person_lind, person.namn, person.avd

FROM person INNER JOIN bilar ON person.lind = bilar.lind WHERE (((bilar.regnr)=IIf("len[regnr]"<6,[namn]="hej",[namn]="olle")));

 

If-satsen la jag till under criteria i regnr-fältet.

Tyvärr så resultera detta i en Type mismatch-fel, vilket jag inte förstår riktigt.

Har jag missat ngt?

Värdena för namn har självklart inget med punkterna att göra utan helt enkelt se att det funkar, sen kan man ju modifiera det till det rätta.

 

Det är fascinerande att se vad mkt man kan göra i en db.

 

Link to comment
Share on other sites

Det är i SELECT satsen du får göra kontrollen typ

 

SELECT IIf(Len([bilar.regnr])<6,[bilar.regnr],(Left([bilar.regnr],8) & "...")) AS regnr_kort,[color="#ff0000"]..övriga fält..[/color]
FROM persson INNER JOIN bilar ON person.lind = bilar.lind 

FROM och INNER JOIN satsen utgår jag från att de är rätt. Du får sedan ändra i rapporten så att den skriver ut regnr_kort istället för regnr

 

Link to comment
Share on other sites

Tusen tack Erki!

 

Du har lagt ner mkt energi för att försöka få en dumskalle som jag att förstå, och det är jag evigt tacksam för.

 

Nu förstår jag iallafall lite mer och kan kanske experimentera med div. satser för att få ett önskat resultat.

 

Tack igen!

 

Link to comment
Share on other sites

Det är så här ett forum ska fungera. Jag hade själv aldrig stött på detta "problem" tidigare. Använder sällan rapporter. Till vardags blir det mest frågor mot en eller flera tabeller. Använder där rätt ofta IIf. Men efter att ha hjälpt dig har jag hittat ett till användningsområde som kanske kan komma till användning i framtiden.

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...