Hallo zusammen,
habe folgendes Problem.
Mein Bericht produziert 4-5 Datensätze pro Seite. Leider ist der letzte auf der Seite ohne Bilder (siehe Anhang).
Ich habe gerade noch einen 7 Seiten langen Bericht mir angesehen, auch dort ist auf der 2ten Seite und 3ten Seite (alle restlichen Seiten werden aufgrund eines Speicherüberlaufes (Acces hat lt. Taskmanager ca 1.200.000 Kb) nicht mehr angezeigt, ist aber ein anderes Problem).
Hier mal mein Code
Private Sub Detailbereich_Format(Cancel As Integer, FormatCount As Integer)
Dim BildAnzeige(5) As Object
Set BildAnzeige(1) = Me.BildAnzeige1
Set BildAnzeige(2) = Me.BildAnzeige2
Set BildAnzeige(3) = Me.BildAnzeige3
Set BildAnzeige(4) = Me.BildAnzeige4
Set BildAnzeige(5) = Me.BildAnzeige5
Me.Text4 = ""
For Z = 1 To 5
Textstring = ""
Textstring = Bildpfad_suchen(Me.[Artikel.ID], Z)
Textstring = Bild_Verkleinern(Textstring)
' MsgBox Textstring
BildAnzeige(Z).Picture = ""
' MsgBox Textstring & " " & Me.[Artikel.ID]
If Textstring <> "" Then ' And Textstring <> Systemeinstellungen_Feld_lesen("SysKeinBildVorhanden") Then
BildAnzeige(Z).Picture = Textstring
DoEvents
Me.Text4 = Me.Text4 & Z & " " & Textstring & vbCrLf
End If
Next Z
End Sub
Textstring beinhaltet, wie man in Anhang ja sehen kann, am Ende den richtigen Pfad.
Meine Frage ist nun, warum werden vom letzten Datensatz keine Bilder angezeigt? Was ich ja noch verstehen könnte, wenn nur das erste Bild nicht angezeigt werden würde. Aber alle 5 fünf nicht, obwohl doch die Bilder 2-5 die gleichen sind wie bei den andern DS auch.
ich arbeite mit Windows 7 32Bit und Access 2007 mit einem 4 GB Arbeitspeicher?
Vielen Dank schon einmal an alle, die mir antworten.
Volker
P.S. So nebenbei: Bei welcher Arbeitsspeicherauslastung ist bei Access eigentlich Schluss?
[Anhang gelöscht durch Administrator]
Hallo,
ist nur ein Versuch, eine vermutuzng zu äußern ...
Kann es sein, dass unten der Seitenrand des Berichts zu knapp an den Bilder-Feldern liegt,
dass der Detailbereich zu wenig Platz bietet.
Versuch einmal den Detailbereich ein wenig zu vergrößern und zwar so, dass unter den Bildfeldern mehr Platz entsteht.
Dadurch kann/sollte es sein, dass der letzte Datensatz der ersten Seite auf der 2. Seite zu stehen kommt - was passiert dann?
Dim BildAnzeige(5) As Object
Solltest du dann am Ende der Prozedur auf jeden Fall wieder zerstören sonst bleibt das Objekt im Arbeitsspeicher erhelten,
was dann wiederum zur Größe des belegten Speichers zählt.
Wenn du in deiner Applikation sehr viele solcher nicht zerstörten Objekte hast, kann es dazu führen, dass auch bei 4GB RAM die Ressourcen eng werden.
Hallo Database,
vielen Dank erst einmal für Deine Antwort.
Habe nun den Detailbereich um 0,4 cm erhöht. Dadurch rutscht der alte letzte Datensatz auf die nächste Seite und es wird alles richtig angezeigt.
Habe noch ein paar Kleinigkeiten verkleinert und es scheint jetzt alles zu funktionierien.
Trotzdem noch eine Verständnisfrage: Meine Bildanzeigefelder sind doch kpl. zu sehen und die Bilder sollen auf die diese Größe gezoomt werden. Warum muß ich dann ca. 0,4 cm Luft lassen, damit es funkioniert?
Was ich noch vergessen habe zu erwähnen: Das Feld Artikelbezeichnung (recht neben der Artikelnr. ist auf Vergrößern/Verkleinern mit Ja eingestellt.
Schönes Wochenende
Volker
P.S. Set BildAnzeige(5) = Nothing habe ich als letzte Zeile vor dem End Sub gesetzt. Werde auch noch einmal den gesamten Code durchgehen und alles auf Nothing setzen. Gibt es evtl. ein Möglichkeit, alle Variablen auf Nothing zu setzen, ohne dies bei jeder zu machen?
Hallo,
noch ein möglicherweise erfolgreicher Tipp:
Benutze das Print-Ereignis für die Zuordnung der Bilddateien an die Bild-Steuerlemente...
Hallo Volker,
Zitatund alles auf Nothing setzen. Gibt es evtl. ein Möglichkeit, alle Variablen auf Nothing zu setzen
Alle(s) musst/kannst Du nicht mit "= Nothing" zerstören,
nur Objekt-Variable. Das sind die, denen Du mit "Set"
einen Inhalt zugewiesen hast.
Und das musst Du auch für jede einzelne Variable in
jeder einzelnen Prozedur einzeln coden.
Einzige Ausnahme, globale Variable kannst Du mit
Auslösung eines nicht behandelten Laufzeitfehlers alle
auf einmal zerstören; - macht aber keinen Sinn.
gruss ekkehard