[ smal @ 12.09.2010. 21:23 ] @
Da bih izbegao prikaz praznih izveštaja, za Report sam postavio sledeći kod:
Code:
Private Sub Report_NoData(Cancel As Integer)
    MsgBox "Nema podataka za štampu!", vbInformation, "Obaveštenje"
    Cancel = True
End Sub

To je sve u redu kada se aplikacija koristi u punoj verziji Accessa (2007 ako je bitno). Message box lepo javi da nema podataka, sa OK se potvrdi da je poruka primljena k znanju, a prazan report se ne otvara.
Ali, u runtime okruženju, nakon OK klika, javlja se i sledeća greška:

[att_img]

Kako da je izbegnem?
[ banem @ 12.09.2010. 21:32 ] @
On Error Resume Next

u kodu koji poziva report.
[ smal @ 12.09.2010. 21:41 ] @
U tom slučaju iskoči ova greška:

[att_img]

U full Accessu je opet sve OK.
[ banem @ 12.09.2010. 22:01 ] @
Liči mi da imaš neku drugu grešku onda.

Princip je da kad koristiš OnNoData događaj da prekineš otvaranje izveštaja (Cancel = True) onda program koji poziva izveštaj dobije od izveštaja grešku da postupak nije uspešno obavljen. Ta greška mora da se "tretira" tj. "hendluje".

Zato ono On Error Resume Next kaže "ako se desi greška, zanemari je i nastavi dalje izvršavanje" jer očekujemo da se desi i znamo koja je. To "On Error Resume Next" ne stavljaš u OnNoData već u Sub koji poziva izveštaj.

Ako ima više linija programa osim one koja poziva izveštaj u toj procedure, onda može ovako:

If Err.Number <> 2501 Then Msgbox Err.Description
Resume Next


Err.Number = 2501 je greška od izveštaja (neuspešno otvaranje).

Provereno radi tako.
[ smal @ 12.09.2010. 22:18 ] @
Ma prilično mi je jasno kako to funkcioniše, bar sam mislio da je tako, i kod sam upisao na pravom mestu, ali jednostavno nešto ne štima
Ako bazu preimenujem u .accdr ekstenziju, ili program porenem kroz "C:\Program Files\Microsoft Office 2007\Office12\Msaccess.exe" /runtime svič, greške postaju fatalne. Opet ponavljam, u punom Access okruženju, sve fercera bez problema...
[ banem @ 13.09.2010. 00:14 ] @
Za Runtime program mora da je čist - sve promenljive da su definisane, sve komande ispravne, sve greške da se presreću, itd.

Za početak uradi Tools > Compile i pogledaj da li negde prijavljuje grešku. Pogledaj da li u svakom modulu na početku ima Option Explicit (svaka promenljiva mora da je definisana).

"Prljavo" programiranje radi u Accessu, ali ne radi u Runtime, zato moraš da napraviš da je program potpuno ispravan. Inače će prijaviti grešku čak i na funkciju Date() - što mi se ranije dešavalo, pa nisam mogao da se načudim, kako može Date() da je neispravno.