vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Access   |   VB-Versionen: VBA30.09.05
Datensatz-Ansicht beim Öffnen festlegen II

Dieser Tipp beschreibt, wie man selbst festlegen kann, wie viele Datensätze in der Datensatz-Ansicht beim Öffnen eines Formulars prozentual zur Formulargröße angezeigt werden.

Autor:   Richard MittelstädtBewertung:     [ Jetzt bewerten ]Views:  10.358 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Win8, Win10, Win11 Beispielprojekt auf CD 

Vor einiger Zeit habe ich einen Tipp veröffentlicht, mit dem es möglich war festzulegen, welche und wie viele Datensätze in der Datensatz-Ansicht beim Öffnen eines Access-Formulars angezeigt werden sollen. Heute möchte ich Ihnen eine verbesserte Variante des Tipp vorstellen, bei dem man die Anzahl der Datensätze nicht direkt durch eine Wertzuweisung festlegt, sondern prozentual zur aktuellen Formgröße!

Modul mit Beispiel-Aufruf:

Option Compare Database
Option Explicit
 
Public Function ZeigeDatensätze2(Form_1 As Form, PROZ_VON_DETAIL As Integer)
  ' ************************************************************************
  ' *** 9/2005 verbesserte Funktion                                     
  ' ************************************************************************
  ' Funktion füllt den Bildschirm eines Formulars Form_1 so aus,
  ' dass PROZ_VON_DETAIL % des Formular-Detail-Bereiches mit
  ' Datensätzen gefüllt werden.
  ' (Der aktuelle Datensatz soll %-ual immer an einer "bestimmten" Stelle stehen.)
  ' Der aktuelle Datensatz soll (richtig!) markiert werden !
  ' Parameter:
  ' Form_1             geöffnetes! Formular (nicht nur der Form-Name! )
  ' PROZ_VON_DETAIL    Prozentangabe ganzzahlig
  ' 
  ' Die Funktion sollte wie folgt aufgerufen werden :
  ' 
  '  - aus Code heraus, wenn Form gerade geöffnet wurde also offen ist :
  '     zB.  "Call ZeigeDatensätze2(Forms![For_HauptFormular], 66)"
  ' 
  ' Achtung ! die Funktion NICHT beim Laden des Formulars aufrufen,
  ' weil dann immer nur die Normal-Fenster-Höhe des Formulars berücksichtigt
  ' wird, auch dann,
  ' wenn (vom letzten Mal gemerkt) maximiert geöffnet wurde.
  ' ************************************************************************
 
  On Error GoTo ERR_01
  Dim rst1 As Recordset, i, n
  Dim FH_FORM         ' Form-Fenster-Höhe
  Dim FBH_DETAIL      ' Form-Bereichs-Höhe  Detailbereich , ="Datensatz"-Höhe
  Dim FBH_KOPF        ' Form-Bereichs-Höhe  FormularKopf
  Dim FBH_FUSS        ' Form-Bereichs-Höhe  FormularFuss
 
  ' Bemerkung:
  '    Formular SeitenKopf und -Fuss sind nur beim Drucken relevant ?
  Dim PLATZ_IN_DETAIL ' Platz(-Höhe) im Gesamt-Detailbereich,
                      ' also zwischen Kopf und Fuss ...
  Dim SATZ_ZAHL_PMAX  ' Satzzahl, die max. entsprechend angegebenem Parameter
                      ' "PROZ_VON_DETAIL" (sicher) in den Detailbereich passt.
  Dim AUSF_PLATZ      ' entsprechend Proz.-Angabe auszufüllende Höhe im Det.Bereich
 
  FH_FORM = Form_1.InsideHeight                ' Form-Fenster-Innen-Höhe gesamt !
  FBH_DETAIL = Form_1.Section(acDetail).Height ' "Datensatz"-Höhe
  FBH_KOPF = Form_1.Section(acHeader).Height   ' Form-Kopf-Höhe
  FBH_FUSS = Form_1.Section(acFooter).Height   ' Form-Fuss-Höhe
  ' ----------------------------------------------
  PLATZ_IN_DETAIL = FH_FORM - FBH_KOPF - FBH_FUSS ' Höhe des Gesamt-Detailbereichs
  ' ----------------------------------------------
 
  ' *** Anzahl der aktuellen Sätze ermitteln *****************************
 
  ' ******************************* 2005-09-22 ***************************************
  ' *** Ist die Form-Source eine evtl. "wilde" Abfrage ? -> dann DCount benutzen !
  ' *** (Abblocken eventueller Fehlermeldung  "zu wenig Parameter..." !!!)        
  ' **********************************************************************************
  Dim qdf1 As QueryDef
  For Each qdf1 In CurrentDb.QueryDefs
    If qdf1.Name = Form_1.RecordSource Then
      i = DCount("*", Form_1.RecordSource)    ' Source ist Abfrage --> DCount nutzen!
      GoTo i_IS_OK    ' Datensätze - Anzahl ist ermittelt
    End If
  Next qdf1
 
  ' ---- Normale Ermittlung der Satz-Zahl direkt Aus Form-Record-Source ----
  Set rst1 = CurrentDb.OpenRecordset(Form_1.RecordSource, dbOpenSnapshot)
  Do Until rst1.EOF
    rst1.MoveNext
  Loop
  i = rst1.RecordCount        ' Anzahl der aktuellen Sätze aus Form-RecordSource
  rst1.Close
  Set rst1 = Nothing
 
i_IS_OK:
  ' **********************************************************************
  AUSF_PLATZ = (PROZ_VON_DETAIL / 100) * PLATZ_IN_DETAIL  ' %-Bereich
 
  ' --- Wieviele Sätze passen denn nun rein in den %-Bereich ? ********************
  SATZ_ZAHL_PMAX = Fix(AUSF_PLATZ / FBH_DETAIL) - 1       ' -1 ist zur Sicherheit...
 
  ' Dim X       ' TEST-Meldungs-Text
  ' X = ""
  ' X = X & FH_FORM & " Fenster-Innen-Höhe" & vbNewLine & vbNewLine
  ' X = X & FBH_DETAIL & " Satz-Höhe" & vbNewLine
  ' X = X & FBH_KOPF & " Kopf-Höhe" & vbNewLine
  ' X = X & FBH_FUSS & " Fuss-Höhe" & vbNewLine
  ' X = X & PLATZ_IN_DETAIL & " Platz füer Sätze" & vbNewLine
  ' X = X & Fix(PLATZ_IN_DETAIL / FBH_DETAIL) & " Sätze passen rein bei 100 %" & _
  '    vbNewLine & SATZ_ZAHL_PMAX & " Sätze passen rein bei " & " = " & _
  '    PROZ_VON_DETAIL% & " %" & vbNewLine
  ' MsgBox X
 
  ' ///////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
  DoCmd.GoToPage 1, 0, PLATZ_IN_DETAIL       ' 2005-09-18
  ' DoCmd.GoToPage [pagenumber][, right, down]
  ' right A numeric expression that's a valid horizontal offset for the page.
  ' down A numeric expression that's a valid vertical offset for the page.
 
  DoCmd.GoToRecord acForm, Form_1.Name, acLast
 
  ' *** 2005-05-17 Vorher Satz schwarz markieren !!,
  ' dabei Steuerelemente verlassen !!! ***
  DoCmd.RunCommand acCmdSelectRecord
 
  ' If i >= SATZ_ZAHL_PMAX - 1 Then
  If i > SATZ_ZAHL_PMAX - 1 Then ' 2005-10-01 !!!!!!
    For n = 1 To SATZ_ZAHL_PMAX - 1 
      DoCmd.GoToRecord acForm, Form_1.Name, acPrevious
    Next n
  Else
    For n = 1 To i - 1
      DoCmd.GoToRecord acForm, Form_1.Name, acPrevious
    Next n
  End If
 
  Form_1.Repaint      ' notwendig ?
  If Form_1.AllowAdditions = True Then
    ' Fehler 2105, wenn Form keine neuen erlaubt !!!
    DoCmd.GoToRecord acForm, Form_1.Name, acNewRec
  Else
    ' neuer geht nicht, dafür letzten Satz !
    DoCmd.GoToRecord acForm, Form_1.Name, acLast
  End If
  Form_1.Repaint      ' notwendig ?
  Exit Function
 
ERR_01:
  If Err.Number = 2105 Then
    ' neuer geht nicht, dafür letzten Satz !
    DoCmd.GoToRecord acForm, Form_1.Name, acLast
  Else
    MsgBox "ZeigeDatensätze2(Form_1 As Form, PROZ_VON_DETAIL As Integer): " & _
      Err.Number & "   " & Err.Description
  End If
End Function
Public Function AufrufZeigeDatensätze2()
  ' Das Bild so "verschieben", dass der Bildschirm
  ' vernünftig ausgefüllt wird
  Call ZeigeDatensätze2(Forms![For_HauptFormular], 66)
End Function

Dieser Tipp wurde bereits 10.358 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel