Avatar billede susanne_larsen Nybegynder
24. maj 2006 - 23:58 Der er 12 kommentarer og
2 løsninger

Ikke åbne form HVIS ingen data

Dumt spørgsmål herfra.... Er gået helt i sort -- vil undgå at en form vises hvis der ikke er nogen data. Bruger skal bare se en msgbox og ikke andet. Men er løbet tør for ideer.

Ved rapporter er det jo simpelt bare sætte lidt kode på "Ved åbning"

a la

Private Sub Report_NoData(Cancel As Integer)
        MsgBox "en besked, vbInformation, "Ingen data registreret"         
    Cancel = True
End sub

Vodden kringler jeg lige den i en form??
Avatar billede susanne_larsen Nybegynder
25. maj 2006 - 00:10 #1
vises = åbnes self ;)
Avatar billede Slettet bruger
25. maj 2006 - 00:56 #2
Lav noget i retningen af!~)

dim antal as integer
antal = DCount("*", "forespørgslens navn")
if antal = 0 then
msgbox
else
docmd.openform
endif
Avatar billede kjulius Novice
25. maj 2006 - 02:46 #3
Faktisk kan man også gøre som du foreslår, nemlig at teste om der er records at vise i Open event rutinen, noget a.la.

Private Sub Form_Open(Cancel As Integer)
    If Me.Count = 0 Then
        Cancel = True
    End If
End Sub
Avatar billede kjulius Novice
25. maj 2006 - 02:54 #4
Sorry, forget that, please. :-(

Jeg huskede forkert mht. brugen af Me.Count property.
Avatar billede kjulius Novice
25. maj 2006 - 03:28 #5
Okay, nu har jeg undersøgt det lidt mere, og det eneste jeg kan tilbyde er en variation over det svar som spg allerede har givet. Det er lidt kode man kan lægge i Open event:

Private Sub Form_Open(Cancel As Integer)
    If DCount("*", Me.Recordset.Name) = 0 Then
        Cancel = True
    End If
End Sub
Avatar billede terry Ekspert
25. maj 2006 - 09:58 #6
Private Sub Form_Open(Cancel As Integer)

If Me.RecordsetClone.RecordCount = 0 Then Cancel = True

End Sub
Avatar billede susanne_larsen Nybegynder
25. maj 2006 - 11:28 #7
For pokker da -- selvfølgelig... 10000 tak.

På formen der skal åbnes.....

Private Sub Form_Open(Cancel As Integer)
'Åbn ikke form hvis ingen records - plus kode på cmd der kalder formen
     
    If Me.RecordsetClone.RecordCount = 0 Then Cancel = True
   
End Sub

.....og på den cmd der kalder formen....


Private Sub cmdCallfrmFindPDAuBruger_Click()
    On Error GoTo ErrHandler
    Dim sFormular As String
   
        sFormular = "frmFindPDAuBruger"
   
        DoCmd.Close
   
        DoCmd.OpenForm sFormular, acNormal, , , acFormReadOnly, acWindowNormal
   
    Exit Sub
   
    'hvis ingen records annuller åbning af form
    If Form_frmPDAdataUBruger.RecordsetClone.RecordCount = 0 Then Cancel = True
   
   
ErrHandler:
' Err_Handler er nødvendig da form kun åbnes hvis der er nogen records.
' Hvis der ikke er oprettet ErrHandler og der ikke er ledige tider => RunTime Error
  If Err = 2501 Then
   
    MsgBox "Alle enheder er tilknyttet til en bruger.", vbInformation, "Alt OK!"
   
    DoCmd.OpenForm "frmMenu", acNormal, , , acFormEdit, acWindowNormal
   
    Exit Sub
 
  Else
   
    MsgBox Err & vbNewLine & Err.Description
   
  End If
   
End Sub
Avatar billede susanne_larsen Nybegynder
25. maj 2006 - 11:30 #8
Takker for hjælpen...
Giver terry de fleste af p spg. håber det er ok :)
Avatar billede susanne_larsen Nybegynder
25. maj 2006 - 11:44 #9
hehe og så er jeg også tumpet.. ROFL er selvfølgelig IKKE nødvendigt at oprette en string .....

kan jo bare skrive
DoCmd.OpenForm 2frmFindPDAuBruger", acNormal, , , acFormReadOnly, acWindowNormal

i stedet for
DoCmd.OpenForm sFormular, acNormal, , , acFormReadOnly, acWindowNormal
Avatar billede Slettet bruger
25. maj 2006 - 12:16 #10
He's a champ!~)
Avatar billede kjulius Novice
25. maj 2006 - 16:28 #11
Jeg ved terry's løsning lyder besnærende, og han har jo også fået point for den, men jeg tror ikke du har testet den, for jeg kan ikke få den til at virke. Den vil, i hvert fald nogen gange, kun returnere en RecordCount på 0, selvom den underliggende forespørgsel faktisk vil returnere data. Hvorfor ved jeg ikke, men jeg har som sagt testet det. I mit tilfælde skal en underliggende forespørgsel returnere 1 række, men kun hvis jeg bruger DCount funktionen, vil den også vise det. Dvs. du kan risikere, at din form ikke vil blive vist, selv om der faktisk er rows at vise.
Avatar billede kjulius Novice
25. maj 2006 - 17:33 #12
Hmm.. jeg må vist give en halv undskyldning. Jeg havde sat postsættypen til Snapshot. Det var derfor det ikke virkede. I øvrigt kan man også bruge me.recordset.recordcount i stedet for me.recordsetclone.recordcount, men det er vist bare en detalje.
Avatar billede kjulius Novice
25. maj 2006 - 17:41 #13
Okay, fuld undskyldning herfra, terry, for nu virker det også med Snapshot. For pokker da! I nat gjorde det altså ikke... Honestly!
Avatar billede terry Ekspert
25. maj 2006 - 18:14 #14
thanks Susanne

and no need for apologies kjulius.

Using Dcount can also fail if your not carefull. Lets say you open the form with a filter criteria.
For example: DoCmd.OpenForm "SomeFormOrOther, , , "ID = 12345678"

If the criteria wasnt included in your DCount then it wouldnt work, in this case .RecordCount would always work.
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

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