webForumDet fria alternativet

Print-funktion i Access-databas?

Kontorsprogram

14 svar · 273 visningar · startad av AndreasC

Medlem sedan mars 20011 964 inlägg
Frågan#1

Jag har en printfunktion i en Access-databas. Två knappar, trycker man på den ena så ska endast den aktuella posten skrivas ut och trycker man på den andra så ska alla poster skrivas ut.
Problemet är bara att alla poster skrivs ut vilken knapp man än trycker på. I hjälpen i Access står det att man kan använda sig utav OpenReport för att tala om vilka poster som ska skrivas ut.

Så här ser koden ut för tillfället och den skriver alltså ut samtliga poster. Hur ska det se ut ifall jag istället vill at endast den aktuella posten ska skrivas ut?

Private Sub Image99_Click()
On Error GoTo Err_Image99_Click

Dim stDocName As String

stDocName = "Faktablad"
DoCmd.OpenReport stDocName, acNormal

Exit_Image99_Click:
Exit Sub

Err_Image99_Click:
MsgBox Err.Description
Resume Exit_Image99_Click

End Sub

Medlem sedan maj 2000194 inlägg
#2

Skapa en fråga som returnerar önskad post som sedan rapporten Faktablad baseras på. Skriv in ett villkor för ID-fältet enligt Formulär![Formulärnamn]![Kontrollnamn] i din fråga.

Medlem sedan mars 20011 964 inlägg
#3

Kan du specifera det där? När det gäller databaser och programmering så har jag en del att lära. Jav vet ju hur man gör en fråga, men jag förstod ändå inte vad du menade riktigt. Kan du kanske specifera lite mer i detalj?

Medlem sedan maj 2000194 inlägg
#4

Hej igen!

Skapa först en fråga där du anger alla de fält som skall vara med i din rapport (Faktablad). Se till att ett av fälten har unika värden, förslagsvis ett räknarefält med namnet ID. I detta ID-fält anger du ett villkor som refererar till motsvarande ID-kontroll (t ex en osynlig textruta)i ditt formulär (om du nu har skapat ett sådant som utskriften skall styras ifrån...). Om du i din fråga skriver in en referens som villkor till denna textruta enligt exemplet i mitt tidigare inlägg så blir rapporten begränsad till denna enda post.
Jag brukar själv alltid tillämpa denna metod.

Mvh
/SB

Medlem sedan mars 20011 964 inlägg
#5

Ok, då förstår jag. Men kan man inte göra detta med en Rapport lika gärna? Jag menar, kan man inte länka ihop rapporten med formuläret på det sättet du beskrev?

MVH Andreas

Medlem sedan mars 20011 964 inlägg
#6

Förlåt, jag kom just på varför detta inte skulle gå. Då kan man ju inte skriva ut alla rapporterna vid behov.

Jag ska testa det du sa.

Medlem sedan mars 20011 964 inlägg
#7

Jag har testat det du sa men förstår inte riktigt hur jag ska få det att fungera. Jag kom att tänka på en annan sak. Jag har en knapp för att förhandsgranska en rapport, och när man trycker på den så förhandsgranskas bara den aktuella posten. Så här ser koden ut för detta:

Private Sub Filgranskning_Click()
On Error GoTo Err_Filgranskning_Click
If IsNull(Me![ID]) Then
MsgBox "Skriv adressinfo innan du förhandsgranskar faktablad."
Else
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
DoCmd.OpenReport "Faktablad", acPreview, , "[ID] = " & [ID]
End If

Exit_Filgranskning_Click:
Exit Sub

Err_Filgranskning_Click:
MsgBox Err.Description
Resume Exit_Filgranskning_Click
End Sub

Eftersom ID finns med i koden och detta fält även finns med i tabellen där uppgifterna hämtas så visas ju endast den aktuella posten. Jag kom nu att tänka på ifall man kan konvertera denna kod till att skriva ut istället för att förhandsgranska. Då skulle man ju kunna skriva ut rapporten med information för bara den aktuella posten. Kan man göra så häroch hur ska koden se ut?

Medlem sedan maj 2000194 inlägg
#8

Utan att själv ha prövat...byt ut 'acPreview' mot 'acNormal'.

Medlem sedan mars 20011 964 inlägg
#9

Det funkade finfint. Tack för det.

Medlem sedan mars 20011 964 inlägg
#10

Kanske du kan hjälpa mig med en sak till. Hur kan man göra mouseovers i en Access-databas. Du kan kolla in detta i mitt tidigare inlägg, hjälp med on_click event. Jag skrev det i detta forumet men bad sedan att få det flyttat till Visual Basic forumet, så det ligger där numera.

Medlem sedan maj 2000194 inlägg
#11

Det enklaste torde vara att använda två lika stora knappar (med olika bilder på)och använda visible-egenskapen ihop med händelserna MouseDown och MouseUp (eller på svenska Vid musknapp ned resp. Vid musknapp upp)

T ex:
Private Sub cmdChange_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

cmdChange1.Visible=False
cmdChange2.Visible=True
End Sub

och

Private Sub cmdChange_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

cmdChange1.Visible=True
cmdChange2.Visible=False

End Sub

/SB

Medlem sedan mars 20011 964 inlägg
#12

Ok. Vad jag börjar med är alltså att infoga en knapp eller en bild och sedan skriver koden du gav mig för den. Men hur får jag sedan in den andra bilden. Vill du förklara lite mer om bilderna, hur jag ska få in dem och vilken kod som ska gå för vilken knapp? Detta är säkert hur lätt som helst men just nu är jag alldeles för sliten för att fatta det.

Medlem sedan maj 2000194 inlägg
#13

Du skapar två exakt lika stora knappar med två olika bilder på som du sedan infogar på exakt samma ställe.

/SB

Medlem sedan mars 20011 964 inlägg
#14

Namnet på dessa bilder ska alltså vara cmdChange1 resp. cmdChange2?

Medlem sedan mars 20011 964 inlägg
#15

Det löste sig. Tack för hjälpen :)

264 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)