Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Mémoire Vive Saturée après une requête VB

3 réponses
Avatar
Alain Pieret
Bonjour

J'utilise une DB qui ne comprend qu'environ 500 enregistrements.
J'ai 2Gb de mémoire et ma db ne fait que 15Mb environ
Chacun de ces enregistrement (access 2003) est associé à une image Jpg sur
le disque dur que je visualise par une routine en VB (voir plus bas #1)
Je n'utilise plus la liaison OLE comme conseillé dans certains articles.

J'ai créé un "état" pour pouvoir afficher les 500 Enregistrements
détaillés... cet état comporte 42 pages, comprenant la description de chaque
enregistrement mais aussi l'image associée à chaque enregistrement...
(avec routine VB #2 voir plus bas)

Le problème est que chaque génération d'image, fait bouffer à Acces
ENORMEMENT de mémoire, si bien qu'à la page 13 ou 14 environ, je n'ai déjà
plus de mémoire vive pour la continuation de l'affichage des petites images
réduites sur l'Etat !!! en effat, pour générer ces 13 pages, access me bouffe
1,5Gb de mémoire !

Drole de façon de gérer la mémoire... access ou vb ?
Il aurait été plus simple de vider la mémoire après chaque page et de
générer les pages au fur et à mesure en liquidant chaque fois les précédantes
!!! peut être est-ce possible je ne sais pas...

Pourriez vous m'aider à résoudre ce problème ???
J'ai déjà installé le Sp2 de office 2003 (ca n'a rien changé du tout !)

Merciiiiiiiiiiiiiiiiiiii




VB #1 ==============================================

Option Compare Database
Option Explicit
Dim Fichier_Provisoire As String
Dim Hauteur As Long
Dim Largeur As Long

Private Sub Form_Load()
On Error Resume Next
DoCmd.Restore
Largeur = Me.Image1.Width
Hauteur = Me.Image1.Height
Commandeegal_Click
Me.Photo.SpecialEffect = 1
verrouiller_Click
End Sub

Private Sub Photo_AfterUpdate()
Rafraichir_Image
End Sub

Private Sub déverrouiller_Click()
Me.Photo.Locked = False
Me.Photo.BackColor = -2147483643
Me.Photo.SpecialEffect = 2
Me.Verrouiller.Enabled = True
Me.Verrouiller.SetFocus
Me.Déverrouiller.Enabled = False
End Sub

Private Sub verrouiller_Click()
Me.Photo.Locked = True
Me.Photo.BackColor = 14215660
Me.Photo.SpecialEffect = 1
Me.Déverrouiller.Enabled = True
Me.Déverrouiller.SetFocus
Me.Verrouiller.Enabled = False
End Sub

Private Sub Form_Current()
Rafraichir_Image
End Sub

Private Sub Photo_Click()
On Error Resume Next
If Me.Photo.Locked Then Exit Sub
Fichier_Provisoire = ChoixDuFichier
If Fichier_Provisoire <> "" Then
Me.Photo = Fichier_Provisoire
Rafraichir_Image
End If
End Sub


Public Function ChoixDuFichier() As String
' choix par api
ChoixDuFichier = OpenFile(CurrentProject.Path)

' choix par activex commondialog
' On Error GoTo ChoixDuFichier_Err
' ChoixDuFichier = ""
' Dim Dialogue As Object
' Set Dialogue = Me.Ctl_Dialogue
' Dialogue.ShowOpen
' ChoixDuFichier = Dialogue.filename
' Exit Function
'ChoixDuFichier_Err:
' If Err.Number <> 32755 Then
' MsgBox Err.Number & ": " & Err.Description
' End If
End Function

Private Sub Rafraichir_Image()
Me.Image1.Picture = ""
On Error Resume Next
Me.Image1.Picture = Me.Photo
Me.Image1.HyperlinkAddress = Me.Photo
End Sub
Private Sub Commandeegal_Click()
Dim intWidth As Integer
Dim intHeight As Integer
With Me.Image1
intWidth = Largeur
intHeight = Hauteur
.Width = intWidth
.Height = intHeight
.SizeMode = acOLESizeZoom
End With
DoEvents
End Sub

Private Sub CommandePlus_Click()
Dim intWidth As Long
Dim intHeight As Long
With Me.Image1
intWidth = .Width
intHeight = .Height
If intWidth > 30000 Then Exit Sub
.Width = intWidth * 1.05
.Height = intHeight * 1.05
.SizeMode = acOLESizeZoom
End With
DoEvents
End Sub

Private Sub CommandeMoins_Click()
Dim intWidth As Integer
Dim intHeight As Integer
With Me.Image1
intWidth = .Width
intHeight = .Height
If intWidth < 550 Then Exit Sub
.Width = intWidth / 1.05
.Height = intHeight / 1.05
.SizeMode = acOLESizeZoom
End With
DoEvents
End Sub


VB #2 ==============================================

Option Compare Database
Option Explicit

Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)
On Error Resume Next
If Me.Photo = "(Aucune)" Or Me.Photo = "" Then
Me.ImageFrame.Picture = "d:\_database\medias\data_medias\404.jpg"
Me.ImageFrame.Visible = True
Else
Me.ImageFrame.Picture = Me.Photo
Me.ImageFrame.Visible = True
End If

End Sub

Private Sub Détail_Print(Cancel As Integer, PrintCount As Integer)
On Error Resume Next
If Me.Photo = "(Aucune)" Or Me.Photo = "" Then
Me.ImageFrame.Picture = "d:\_database\medias\data_medias\404.jpg"
Me.ImageFrame.Visible = True
Else
Me.ImageFrame.Picture = Me.Photo
Me.ImageFrame.Visible = True
End If

End Sub

Private Sub Détail_Retreat()

End Sub

3 réponses

Avatar
Elles font combien tes images ?
2Mo fois 500 enregistrements.. Ca fait pas mal tout de meme....


"Alain Pieret" a écrit dans le
message de news:
Bonjour

J'utilise une DB qui ne comprend qu'environ 500 enregistrements.
J'ai 2Gb de mémoire et ma db ne fait que 15Mb environ
Chacun de ces enregistrement (access 2003) est associé à une image Jpg sur
le disque dur que je visualise par une routine en VB (voir plus bas #1)
Je n'utilise plus la liaison OLE comme conseillé dans certains articles.

J'ai créé un "état" pour pouvoir afficher les 500 Enregistrements
détaillés... cet état comporte 42 pages, comprenant la description de


chaque
enregistrement mais aussi l'image associée à chaque enregistrement...
(avec routine VB #2 voir plus bas)

Le problème est que chaque génération d'image, fait bouffer à Acces
ENORMEMENT de mémoire, si bien qu'à la page 13 ou 14 environ, je n'ai déjà
plus de mémoire vive pour la continuation de l'affichage des petites


images
réduites sur l'Etat !!! en effat, pour générer ces 13 pages, access me


bouffe
1,5Gb de mémoire !

Drole de façon de gérer la mémoire... access ou vb ?
Il aurait été plus simple de vider la mémoire après chaque page et de
générer les pages au fur et à mesure en liquidant chaque fois les


précédantes
!!! peut être est-ce possible je ne sais pas...

Pourriez vous m'aider à résoudre ce problème ???
J'ai déjà installé le Sp2 de office 2003 (ca n'a rien changé du tout !)

Merciiiiiiiiiiiiiiiiiiii




VB #1 ============================================= >
Option Compare Database
Option Explicit
Dim Fichier_Provisoire As String
Dim Hauteur As Long
Dim Largeur As Long

Private Sub Form_Load()
On Error Resume Next
DoCmd.Restore
Largeur = Me.Image1.Width
Hauteur = Me.Image1.Height
Commandeegal_Click
Me.Photo.SpecialEffect = 1
verrouiller_Click
End Sub

Private Sub Photo_AfterUpdate()
Rafraichir_Image
End Sub

Private Sub déverrouiller_Click()
Me.Photo.Locked = False
Me.Photo.BackColor = -2147483643
Me.Photo.SpecialEffect = 2
Me.Verrouiller.Enabled = True
Me.Verrouiller.SetFocus
Me.Déverrouiller.Enabled = False
End Sub

Private Sub verrouiller_Click()
Me.Photo.Locked = True
Me.Photo.BackColor = 14215660
Me.Photo.SpecialEffect = 1
Me.Déverrouiller.Enabled = True
Me.Déverrouiller.SetFocus
Me.Verrouiller.Enabled = False
End Sub

Private Sub Form_Current()
Rafraichir_Image
End Sub

Private Sub Photo_Click()
On Error Resume Next
If Me.Photo.Locked Then Exit Sub
Fichier_Provisoire = ChoixDuFichier
If Fichier_Provisoire <> "" Then
Me.Photo = Fichier_Provisoire
Rafraichir_Image
End If
End Sub


Public Function ChoixDuFichier() As String
' choix par api
ChoixDuFichier = OpenFile(CurrentProject.Path)

' choix par activex commondialog
' On Error GoTo ChoixDuFichier_Err
' ChoixDuFichier = ""
' Dim Dialogue As Object
' Set Dialogue = Me.Ctl_Dialogue
' Dialogue.ShowOpen
' ChoixDuFichier = Dialogue.filename
' Exit Function
'ChoixDuFichier_Err:
' If Err.Number <> 32755 Then
' MsgBox Err.Number & ": " & Err.Description
' End If
End Function

Private Sub Rafraichir_Image()
Me.Image1.Picture = ""
On Error Resume Next
Me.Image1.Picture = Me.Photo
Me.Image1.HyperlinkAddress = Me.Photo
End Sub
Private Sub Commandeegal_Click()
Dim intWidth As Integer
Dim intHeight As Integer
With Me.Image1
intWidth = Largeur
intHeight = Hauteur
.Width = intWidth
.Height = intHeight
.SizeMode = acOLESizeZoom
End With
DoEvents
End Sub

Private Sub CommandePlus_Click()
Dim intWidth As Long
Dim intHeight As Long
With Me.Image1
intWidth = .Width
intHeight = .Height
If intWidth > 30000 Then Exit Sub
.Width = intWidth * 1.05
.Height = intHeight * 1.05
.SizeMode = acOLESizeZoom
End With
DoEvents
End Sub

Private Sub CommandeMoins_Click()
Dim intWidth As Integer
Dim intHeight As Integer
With Me.Image1
intWidth = .Width
intHeight = .Height
If intWidth < 550 Then Exit Sub
.Width = intWidth / 1.05
.Height = intHeight / 1.05
.SizeMode = acOLESizeZoom
End With
DoEvents
End Sub


VB #2 ============================================= >
Option Compare Database
Option Explicit

Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)
On Error Resume Next
If Me.Photo = "(Aucune)" Or Me.Photo = "" Then
Me.ImageFrame.Picture = "d:_databasemediasdata_medias404.jpg"
Me.ImageFrame.Visible = True
Else
Me.ImageFrame.Picture = Me.Photo
Me.ImageFrame.Visible = True
End If

End Sub

Private Sub Détail_Print(Cancel As Integer, PrintCount As Integer)
On Error Resume Next
If Me.Photo = "(Aucune)" Or Me.Photo = "" Then
Me.ImageFrame.Picture = "d:_databasemediasdata_medias404.jpg"
Me.ImageFrame.Visible = True
Else
Me.ImageFrame.Picture = Me.Photo
Me.ImageFrame.Visible = True
End If

End Sub

Private Sub Détail_Retreat()

End Sub



Avatar
Alain Pieret
Mon répertoire des images fait 50,2Mb pour 496 phots
Soit un total de 103Kb par photo (en moyenne)

Access ou mon script vb .. converti mes 50Mb en 1,5Gb pour quelquelques
petites avatar... génial le progrès lol...

^^
J'ai contourné le prob (sans trouver de solution) en faisant tourner le
script VB uniqueement en cas d'impression, et.. 10 pages par 10 pages vers un
PDF...
Puis joindre tous les PDF ensemble et seulement j'ai u n résultat
convenable...

quel chipo "Combien ca coute encore Access 2003?"... ^^

Help me... ^^



"" a écrit :

Elles font combien tes images ?
2Mo fois 500 enregistrements.. Ca fait pas mal tout de meme....


"Alain Pieret" a écrit dans le
message de news:
> Bonjour
>
> J'utilise une DB qui ne comprend qu'environ 500 enregistrements.
> J'ai 2Gb de mémoire et ma db ne fait que 15Mb environ
> Chacun de ces enregistrement (access 2003) est associé à une image Jpg sur
> le disque dur que je visualise par une routine en VB (voir plus bas #1)
> Je n'utilise plus la liaison OLE comme conseillé dans certains articles.
>
> J'ai créé un "état" pour pouvoir afficher les 500 Enregistrements
> détaillés... cet état comporte 42 pages, comprenant la description de
chaque
> enregistrement mais aussi l'image associée à chaque enregistrement...
> (avec routine VB #2 voir plus bas)
>
> Le problème est que chaque génération d'image, fait bouffer à Acces
> ENORMEMENT de mémoire, si bien qu'à la page 13 ou 14 environ, je n'ai déjà
> plus de mémoire vive pour la continuation de l'affichage des petites
images
> réduites sur l'Etat !!! en effat, pour générer ces 13 pages, access me
bouffe
> 1,5Gb de mémoire !
>
> Drole de façon de gérer la mémoire... access ou vb ?
> Il aurait été plus simple de vider la mémoire après chaque page et de
> générer les pages au fur et à mesure en liquidant chaque fois les
précédantes
> !!! peut être est-ce possible je ne sais pas...
>
> Pourriez vous m'aider à résoudre ce problème ???
> J'ai déjà installé le Sp2 de office 2003 (ca n'a rien changé du tout !)
>
> Merciiiiiiiiiiiiiiiiiiii
>
>
>
>
> VB #1 ============================================= > >
> Option Compare Database
> Option Explicit
> Dim Fichier_Provisoire As String
> Dim Hauteur As Long
> Dim Largeur As Long
>
> Private Sub Form_Load()
> On Error Resume Next
> DoCmd.Restore
> Largeur = Me.Image1.Width
> Hauteur = Me.Image1.Height
> Commandeegal_Click
> Me.Photo.SpecialEffect = 1
> verrouiller_Click
> End Sub
>
> Private Sub Photo_AfterUpdate()
> Rafraichir_Image
> End Sub
>
> Private Sub déverrouiller_Click()
> Me.Photo.Locked = False
> Me.Photo.BackColor = -2147483643
> Me.Photo.SpecialEffect = 2
> Me.Verrouiller.Enabled = True
> Me.Verrouiller.SetFocus
> Me.Déverrouiller.Enabled = False
> End Sub
>
> Private Sub verrouiller_Click()
> Me.Photo.Locked = True
> Me.Photo.BackColor = 14215660
> Me.Photo.SpecialEffect = 1
> Me.Déverrouiller.Enabled = True
> Me.Déverrouiller.SetFocus
> Me.Verrouiller.Enabled = False
> End Sub
>
> Private Sub Form_Current()
> Rafraichir_Image
> End Sub
>
> Private Sub Photo_Click()
> On Error Resume Next
> If Me.Photo.Locked Then Exit Sub
> Fichier_Provisoire = ChoixDuFichier
> If Fichier_Provisoire <> "" Then
> Me.Photo = Fichier_Provisoire
> Rafraichir_Image
> End If
> End Sub
>
>
> Public Function ChoixDuFichier() As String
> ' choix par api
> ChoixDuFichier = OpenFile(CurrentProject.Path)
>
> ' choix par activex commondialog
> ' On Error GoTo ChoixDuFichier_Err
> ' ChoixDuFichier = ""
> ' Dim Dialogue As Object
> ' Set Dialogue = Me.Ctl_Dialogue
> ' Dialogue.ShowOpen
> ' ChoixDuFichier = Dialogue.filename
> ' Exit Function
> 'ChoixDuFichier_Err:
> ' If Err.Number <> 32755 Then
> ' MsgBox Err.Number & ": " & Err.Description
> ' End If
> End Function
>
> Private Sub Rafraichir_Image()
> Me.Image1.Picture = ""
> On Error Resume Next
> Me.Image1.Picture = Me.Photo
> Me.Image1.HyperlinkAddress = Me.Photo
> End Sub
> Private Sub Commandeegal_Click()
> Dim intWidth As Integer
> Dim intHeight As Integer
> With Me.Image1
> intWidth = Largeur
> intHeight = Hauteur
> .Width = intWidth
> .Height = intHeight
> .SizeMode = acOLESizeZoom
> End With
> DoEvents
> End Sub
>
> Private Sub CommandePlus_Click()
> Dim intWidth As Long
> Dim intHeight As Long
> With Me.Image1
> intWidth = .Width
> intHeight = .Height
> If intWidth > 30000 Then Exit Sub
> .Width = intWidth * 1.05
> .Height = intHeight * 1.05
> .SizeMode = acOLESizeZoom
> End With
> DoEvents
> End Sub
>
> Private Sub CommandeMoins_Click()
> Dim intWidth As Integer
> Dim intHeight As Integer
> With Me.Image1
> intWidth = .Width
> intHeight = .Height
> If intWidth < 550 Then Exit Sub
> .Width = intWidth / 1.05
> .Height = intHeight / 1.05
> .SizeMode = acOLESizeZoom
> End With
> DoEvents
> End Sub
>
>
> VB #2 ============================================= > >
> Option Compare Database
> Option Explicit
>
> Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)
> On Error Resume Next
> If Me.Photo = "(Aucune)" Or Me.Photo = "" Then
> Me.ImageFrame.Picture = "d:_databasemediasdata_medias404.jpg"
> Me.ImageFrame.Visible = True
> Else
> Me.ImageFrame.Picture = Me.Photo
> Me.ImageFrame.Visible = True
> End If
>
> End Sub
>
> Private Sub Détail_Print(Cancel As Integer, PrintCount As Integer)
> On Error Resume Next
> If Me.Photo = "(Aucune)" Or Me.Photo = "" Then
> Me.ImageFrame.Picture = "d:_databasemediasdata_medias404.jpg"
> Me.ImageFrame.Visible = True
> Else
> Me.ImageFrame.Picture = Me.Photo
> Me.ImageFrame.Visible = True
> End If
>
> End Sub
>
> Private Sub Détail_Retreat()
>
> End Sub
>





Avatar
Gloops
Salut,

Tout-à-l'heure dans Acrobat Reader j'ai vu un bouton "PDF unique,
fichiers multiples", qui menait là :
http://www.adobe.com/fr/products/acrobat/desktopsolutions.html

Reste à voir les détails pour mettre ça en œuvre pour pas cher.

___________________________________________
Le 06/09/2006 13:48, Alain Pieret a écrit :
Bonjour

J'utilise une DB qui ne comprend qu'environ 500 enregistrements.
J'ai 2Gb de mémoire et ma db ne fait que 15Mb environ
Chacun de ces enregistrement (access 2003) est associé à une image Jpg sur
le disque dur que je visualise par une routine en VB (voir plus bas #1)
Je n'utilise plus la liaison OLE comme conseillé dans certains articles.

J'ai créé un "état" pour pouvoir afficher les 500 Enregistrements
détaillés... cet état comporte 42 pages, comprenant la description de chaque
enregistrement mais aussi l'image associée à chaque enregistrement...
(avec routine VB #2 voir plus bas)

Le problème est que chaque génération d'image, fait bouffer à Acces
ENORMEMENT de mémoire, si bien qu'à la page 13 ou 14 environ, je n'ai déjà
plus de mémoire vive pour la continuation de l'affichage des petites images
réduites sur l'Etat !!! en effat, pour générer ces 13 pages, access me bouffe
1,5Gb de mémoire !

Drole de façon de gérer la mémoire... access ou vb ?
Il aurait été plus simple de vider la mémoire après chaque page et de
générer les pages au fur et à mesure en liquidant chaque fois les précédantes
!!! peut être est-ce possible je ne sais pas...

Pourriez vous m'aider à résoudre ce problème ???
J'ai déjà installé le Sp2 de office 2003 (ca n'a rien changé du tout !)

Merciiiiiiiiiiiiiiiiiiii




VB #1 ============================================= >
Option Compare Database
Option Explicit
Dim Fichier_Provisoire As String
Dim Hauteur As Long
Dim Largeur As Long

Private Sub Form_Load()
On Error Resume Next
DoCmd.Restore
Largeur = Me.Image1.Width
Hauteur = Me.Image1.Height
Commandeegal_Click
Me.Photo.SpecialEffect = 1
verrouiller_Click
End Sub

Private Sub Photo_AfterUpdate()
Rafraichir_Image
End Sub

Private Sub déverrouiller_Click()
Me.Photo.Locked = False
Me.Photo.BackColor = -2147483643
Me.Photo.SpecialEffect = 2
Me.Verrouiller.Enabled = True
Me.Verrouiller.SetFocus
Me.Déverrouiller.Enabled = False
End Sub

Private Sub verrouiller_Click()
Me.Photo.Locked = True
Me.Photo.BackColor = 14215660
Me.Photo.SpecialEffect = 1
Me.Déverrouiller.Enabled = True
Me.Déverrouiller.SetFocus
Me.Verrouiller.Enabled = False
End Sub

Private Sub Form_Current()
Rafraichir_Image
End Sub

Private Sub Photo_Click()
On Error Resume Next
If Me.Photo.Locked Then Exit Sub
Fichier_Provisoire = ChoixDuFichier
If Fichier_Provisoire <> "" Then
Me.Photo = Fichier_Provisoire
Rafraichir_Image
End If
End Sub


Public Function ChoixDuFichier() As String
' choix par api
ChoixDuFichier = OpenFile(CurrentProject.Path)

' choix par activex commondialog
' On Error GoTo ChoixDuFichier_Err
' ChoixDuFichier = ""
' Dim Dialogue As Object
' Set Dialogue = Me.Ctl_Dialogue
' Dialogue.ShowOpen
' ChoixDuFichier = Dialogue.filename
' Exit Function
'ChoixDuFichier_Err:
' If Err.Number <> 32755 Then
' MsgBox Err.Number & ": " & Err.Description
' End If
End Function

Private Sub Rafraichir_Image()
Me.Image1.Picture = ""
On Error Resume Next
Me.Image1.Picture = Me.Photo
Me.Image1.HyperlinkAddress = Me.Photo
End Sub
Private Sub Commandeegal_Click()
Dim intWidth As Integer
Dim intHeight As Integer
With Me.Image1
intWidth = Largeur
intHeight = Hauteur
.Width = intWidth
.Height = intHeight
.SizeMode = acOLESizeZoom
End With
DoEvents
End Sub

Private Sub CommandePlus_Click()
Dim intWidth As Long
Dim intHeight As Long
With Me.Image1
intWidth = .Width
intHeight = .Height
If intWidth > 30000 Then Exit Sub
.Width = intWidth * 1.05
.Height = intHeight * 1.05
.SizeMode = acOLESizeZoom
End With
DoEvents
End Sub

Private Sub CommandeMoins_Click()
Dim intWidth As Integer
Dim intHeight As Integer
With Me.Image1
intWidth = .Width
intHeight = .Height
If intWidth < 550 Then Exit Sub
.Width = intWidth / 1.05
.Height = intHeight / 1.05
.SizeMode = acOLESizeZoom
End With
DoEvents
End Sub


VB #2 ============================================= >
Option Compare Database
Option Explicit

Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)
On Error Resume Next
If Me.Photo = "(Aucune)" Or Me.Photo = "" Then
Me.ImageFrame.Picture = "d:_databasemediasdata_medias404.jpg"
Me.ImageFrame.Visible = True
Else
Me.ImageFrame.Picture = Me.Photo
Me.ImageFrame.Visible = True
End If

End Sub

Private Sub Détail_Print(Cancel As Integer, PrintCount As Integer)
On Error Resume Next
If Me.Photo = "(Aucune)" Or Me.Photo = "" Then
Me.ImageFrame.Picture = "d:_databasemediasdata_medias404.jpg"
Me.ImageFrame.Visible = True
Else
Me.ImageFrame.Picture = Me.Photo
Me.ImageFrame.Visible = True
End If

End Sub

Private Sub Détail_Retreat()

End Sub