Problème sur Access 2003

Résolu
stomec62 Messages postés 11 Statut Membre -  
stomec62 Messages postés 11 Statut Membre -
Bonjour,
Voilà une quinzaine de jours que je ne me sors pas de ce problème.

Je travaille sur Access 2003 avec une base d’une simplicité enfantine.
C’est une base d’une collection d’affiches scolaires
Les enregistrements comprennent des champs basiques et deux photos que j’ai allégées au maximun
40 ko par photos.
La base fait plus de 2 gigas avec 3250 enregistrements.

Aujourd’hui, elle est complètement bloquée
Impossible d’ajouter des enregistrements et surtout de copier coller des enregistrements.
J’ai en permanence le message « argument invalide ».
Je suis « quasiment » certain qu’il n’y a pas d’argument invalide dans ma table.
J’ai tout contrôlé.

Je crois que c’est un problème de taille et qu’il faudrait que je change un paramètre dans un fichier window.
En fait je n’en sais rien.
Je dois vous avouer que je suis une « buse » sur Access.

Pouvez-vous avoir la gentillesse de m’aider.
slowikdaniel@aol.com

Merci
Configuration: Windows XP
AOL 9.0

20 réponses

  1. Rocksy Messages postés 514 Date d'inscription   Statut Membre Dernière intervention   73
     
    Bonjour,
    Pour votre fichier essayé ceci:
    Soit par une ligne de commande
    Démarrer -> Tous les Programmes -> Accessoires -> invite de commande
    là vous tapez dan la fenêtre (où vous remplacez "C:\Mes Documents\bd1.mdb" par le chemin de votre base endommagée)
    "C:\Program Files\Microsoft Office\Office\MSACCESS.EXE" "C:\Mes Documents\bd1.mdb" /repair
    Soit:
    Créez une base de donnée vide.
    Dans celle-ci : Menu Fichier -> Données Externes -> importer
    Là vous sélectionné la base endomagée.
    Dans chaque onglet (Tables, Requêtes, ...) vous sélectionnez tout.
    A la fin vous faites OK, l'entiereté de base endommagée est recopié dans la nouvelle.

    En fait il ne faut jamais stocker des images dans une base de données Access, où elle prennent une place inconsidérée.
    Procédure à utiliser:
    Stocker toutes les photos dans un répertoire et si possible donner leurs un nom formalisé.
    Dans un formulaire, insérer une image (pas un cadre d'objet indépendant !) choisissez n'importe quelle image.
    Modifiez sa propriété "Mode d'affichage" en "Zoom"
    Sur l'évènement de formulaire "Sur activation" (qui s'exécute lors du passage d'un enregistrement à l'autre) vous modifiez la propriété "Picture" de l'objet Image; vous lui attribuez le chemin compllet de l'image à incorporer pour cet enregistrement. Ex : image0.picture = "C:\Photos\photo_001.jpg"

    @+
    0
  2. Stomec62
     
    Merci pour vos conseils que j’ai suivi.
    Tout s’est parfaitement déroulé et j’ai récupéré l’intégralité des 3250 enregistrements.
    Aucun message d’erreur.

    Malheureusement, le problème est toujours là.
    Toujours « argument invalide »
    Je n’y comprends rien

    Pour le deuxième conseil, je vais regarder comment je peux m’en sortir.
    J’ai la chance d’avoir gardé toutes les photos dans un répertoire.

    Encore merci
    Quelle galère !
    0
  3. Rocksy Messages postés 514 Date d'inscription   Statut Membre Dernière intervention   73
     
    Dans votre table, vous remplacez les deux champs OLE par des champs Texte dans lesquelles vous mettez le nom des photos associées à cet enregistrement, appelons-les NomPhoto1 et NomPhoto2
    Vous placez ces champs sur votre formulaire, vous pouvez les rendre invisible.
    Dans le même formulaire vous ajoutez deux champs Image (Appelons-les image1 et image2)
    Sur l'évènement du formulaire "Sur activation" vous écrivez ce code :

    Dim Chemin as string
    Dm Nom1 as string
    Dm Nom2 as string

    Chemin = "C:\Mes images\Photos\" ' A remplacer par le chemin où se trouve vos photos
    Nom1= me!NomPhoto1
    Nom2= me!NomPhoto2
    me!image1.picture = Chemin & nom1
    me!image2.picture = Chemin & nom2

    @+
    0
  4. stomec62 Messages postés 11 Statut Membre
     
    Tout d’abord merci de passer du temps pour moi mais,
    je n’y arrive pas.
    Désolé !

    J’ai écrit cela

    Private Sub Form_Current()

    Dim Chemin As String
    Dm Nom1 As String
    Dm Nom2 As String

    Chemin = "C:\Photos\"
    Nom1 = Me!NomPhoto1
    Nom2 = Me!NomPhoto2
    Me!Image1.Picture = Chemin & Nom1
    Me!Image2.Picture = Chemin & Nom2

    End Sub

    Et j’obtiens
    Erreur de compil
    Erreur de syntaxe

    Et
    Dm Nom1 As String
    Est surligné

    Horreur
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Rocksy Messages postés 514 Date d'inscription   Statut Membre Dernière intervention   73
     
    Erreur de syntaxe = erreur d'orthographe (ce n'est pas bien grave:
    Private Sub Form_Current()

    Dim Chemin As String
    Dim Nom1 As String
    Dim Nom2 As String

    Chemin = "C:\Photos\"
    Nom1 = Me!NomPhoto1
    Nom2 = Me!NomPhoto2
    Me!Image1.Picture = Chemin & Nom1
    Me!Image2.Picture = Chemin & Nom2

    End Sub

    ATTENTION : Nom1 et Nom2 doivent contenir l'extension du fichier. Ex : Pol.jpg
    ou si toutes les photos ont la même extension : Me!Image1.Picture = Chemin & Nom1 & ".jpg"
    0
  7. Rocksy Messages postés 514 Date d'inscription   Statut Membre Dernière intervention   73
     
    Vous pouvez ajouter une petite gestion des erreurs, celle-ci vous donnera une indication si une erreur survient lors de l'exécution du programme:

    Private Sub Form_Current()
    Dim Chemin As String
    Dim Nom1 As String
    Dim Nom2 As String
    On Error GoTo Err

    Chemin = "C:\Photos\" ' A remplacer par le chemin où se trouve vos photos
    Nom1 = Me!NomPhoto1
    Nom2 = Me!NomPhoto2
    Me!Image1.Picture = Chemin & Nom1 & ".jpg"
    Me!Image2.Picture = Chemin & Nom2 & ".jpg"

    Err_Exit:
    Exit Sub
    Err:
    MsgBox Error$
    Resume Err_Exit

    End Sub
    0
  8. stomec62 Messages postés 11 Statut Membre
     
    J’avance lentement mais j’avance
    Tenez bon !
    Je comprends quand même un peu ce que je fais.

    J’ai le message
    Propriété ou méthode non gérée par cet objet

    Je crois que je ne crée par correctement les deux zones image dans le formulaire
    Je les crée en objet dépendant
    Il les appelle
    « DépendantOLE13457: »

    je les renomme « Image1 » et « Image2 »
    c’est peut-être là l’erreur ?
    0
  9. Rocksy Messages postés 514 Date d'inscription   Statut Membre Dernière intervention   73
     
    Non, c'est que tu n'a pas pris les bons objets.

    Dans la barre d'outils (à gauche) tu as :
    ...
    Images
    Cadre d'objet indépendant
    Cadre d'objet dépendant
    ...
    tu dois placer 2 objets images sur le formulaire

    PS: Je peux t'envoyer un exemple par E-mail, si tu veux.
    0
  10. stomec62 Messages postés 11 Statut Membre
     
    Super.
    Ca marche.
    Mille merci, impossible d'y arriver seul.

    Va t'il être compliqué de récupérer mes images dans mes états?
    0
  11. Rocksy Messages postés 514 Date d'inscription   Statut Membre Dernière intervention   73
     
    Non, tu commences par créer une Requête qui va filtrer les enregistrements que tu veux imprimer.
    Ensuite tu crées un état basé sur cette Requête.

    A demain ... peut-être ...
    0
  12. stomec62 Messages postés 11 Statut Membre
     
    Merci, je vais essayer.

    Il arrive parfois que certaines affiches soient monoface, donc pas de NomPhoto2.
    J’ai tenté une condition mais cela ne marche pas ?

    Private Sub Form_Current()
    Dim Chemin As String
    Dim Nom1 As String
    Dim Nom2 As String
    Dim Numser As String
    On Error GoTo Err

    Chemin = "C:\Photos\"
    Nom1 = Me!NomPhoto1
    Nom2 = Me!NomPhoto2
    Numser = Me!Numserie
    Me!Image1.Picture = Chemin & Numser & " (" & Nom1 & ")" & ".jpg"
    Me!Image2.Picture = Chemin & Numser & " (" & Nom2 & ")" & ".jpg"
    If Nom2 = "" Then Me!Image2.Picture = ""

    Err_Exit:
    Exit Sub
    Err:
    MsgBox Error$
    Resume Err_Exit

    End Sub
    0
  13. Rocksy Messages postés 514 Date d'inscription   Statut Membre Dernière intervention   73
     
    Dans ce cas, il faut absolument une "photo viege" (à créer avec, par exemple, Paint)

    petite simplification :
    Me!Image1.Picture = Chemin & Numser & " (" & Nom1 & ")" & ".jpg"
    devient
    Me!Image1.Picture = Chemin & Numser & " (" & Nom1 & ").jpg"

    Private Sub Form_Current()
    Dim Chemin As String
    Dim Nom1 As String
    Dim Nom2 As String
    Dim Numser As String
    On Error GoTo Err

    Chemin = "C:\Photos\"
    Nom1 = Me!NomPhoto1
    Nom2 = Me!NomPhoto2
    Numser = Me!Numserie
    Me!Image1.Picture = Chemin & Numser & " (" & Nom1 & ").jpg"
    if nom2 ="" then
    me!image.picture = Chemin & "PhotoVierge.jpg"
    else
    Me!Image2.Picture = Chemin & Numser & " (" & Nom2 & ").jpg"
    end if

    Err_Exit:
    Exit Sub
    Err:
    MsgBox Error$
    Resume Err_Exit

    End Sub
    0
  14. stomec62 Messages postés 11 Statut Membre
     
    Super idée, j'ai mis en place cette photo vierge mais il doit y avoir une erreur quelque part

    J'obtiens le message

    Utilisation incorrecte de Null
    0
  15. Rocksy Messages postés 514 Date d'inscription   Statut Membre Dernière intervention   73
     
    Oui, car en informatique null est diférent de vide ("")
    Le plus simple :
    ...
    Nom1 = Me!NomPhoto1
    Nom2 = Me!NomPhoto2
    if isnull(Nom1) then nom1="" ' On ne sait jamais, au cas où...
    if isnull(Nom2) then nom2="" ' On remplace la valeur Null par Vide (ou rien) afin d'éviter les erreurs lors des tests
    ...
    0
  16. stomec62 Messages postés 11 Statut Membre
     
    J'ai toujours le meme message

    Utilisation incorrecte de Null

    j'ai essayé comme suit, mais, toujours le meme message

    Private Sub Form_Current()
    Dim Chemin As String
    Dim Nom1 As String
    Dim Nom2 As String
    Dim Numser As String
    On Error GoTo Err

    Chemin = "C:\Photos\"
    If IsNull(Nom1) Then
    Nom1 = ""
    Else
    Nom1 = Me!NomPhoto1
    End If

    If IsNull(Nom2) Then
    Nom2 = ""
    Else
    Nom2 = Me!NomPhoto2
    End If

    Numser = Me!Numserie
    Me!Image1.Picture = Chemin & Numser & " (" & Nom1 & ").jpg"
    If Nom2 = "" Then
    Me!Image2.Picture = Chemin & "PhotoVierge.jpg"
    Else
    Me!Image2.Picture = Chemin & Numser & " (" & Nom2 & ").jpg"
    End If

    Err_Exit:
    Exit Sub
    Err:
    MsgBox Error$
    Resume Err_Exit

    End Sub
    0
  17. Rocksy Messages postés 514 Date d'inscription   Statut Membre Dernière intervention   73
     
    Il faut d'abord déterminer d'où vient l'erreur.
    Pour celà:
    Dans le code vous mettez le ON ERROR en remarque en le faisant précéder d'une simple quote, comme ceci : 'On Error GoTo Err.
    Ceci va annuler l'interception des erreurs. Réexécutez l'application.
    Lorsque l'erreur surviendra, Access vous affichera une fenêtre, choisissez Déboguage.
    L'affichage basculera alors vers le VBA (Visual Basic for Application : le language que nous utilisons)
    Le programme sera arreté sur la lgne fautive.
    En déplaçant le curseur de la souris sur les différentes variables dans le code, vous verrez leur valeur. Ceci vous aidera à déterminer ce qui provoque cette erreur.
    L'appui sur la touche F8 exécute le code ligne par ligne.
    La touche F5 exécute le code jusqu'à la fin, sauf détection d'erreur.

    Comme les variables Nom1 et Nom2 ne peuvent plus être NULL, le problème provient probablement de Numser, et certainement quand le programme veut créer un nouvel enregistrement, pour éviter ce problème vous pouvez mettre la propriété du formulaire "Ajout autorisé" à Non.

    Attention que Numser est déclaré en "String" (Chaîne de caractères) alors qu'il s'agit probablement d'un Long (voir définition dans la table) il faudrait alors le déclarer comme suit Dim Numser as long; mais alors dans les concaténations (Me!Image1.Picture = Chemin & Numser & " (" & Nom1 & ").jpg") il faut transformer la variable Long en String. Ceci se fait par la fonction Cstr
    Me!Image1.Picture = Chemin & cstr(Numser) & " (" & Nom1 & ").jpg"

    Allez, courrage ...
    0
  18. Rocksy Messages postés 514 Date d'inscription   Statut Membre Dernière intervention   73
     
    Voici une version "définitive" qui permet l'ajout d'enregistrements via le formulaire.
    Dans la table vous devriez declarer le champ Numserie avec le type de donnée NuméroAuto et en Clé Primaire.
    Regardez les modifications: les test ne se font plus sur les variables mais sur les valeurs contenues dans le formulaire.

    Private Sub Form_Current()
    Dim Chemin As String
    Dim Nom1 As String
    Dim Nom2 As String
    Dim Numser As Long
    'On Error GoTo Err
    Chemin = "C:\Photos\"
    If Not IsNull(Me!Numserie) Then
    If IsNull(Me!NomPhoto1) Then
    Nom1 = ""
    Else
    Nom1 = Me!NomPhoto1
    End If

    If IsNull(Me!NomPhoto2) Then
    Nom2 = ""
    Else
    Nom2 = Me!NomPhoto2
    End If

    Numser = Me!Numserie
    Me!Image1.Picture = Chemin & CStr(Numser) & " (" & Nom1 & ").jpg"
    If Nom2 = "" Then
    Me!Image2.Picture = Chemin & "PhotoVierge.jpg"
    Else
    Me!Image2.Picture = Chemin & CStr(Numser) & " (" & Nom2 & ").jpg"
    End If
    Else
    Me!Image1.Picture = Chemin & "PhotoVierge.jpg"
    Me!Image2.Picture = Chemin & "PhotoVierge.jpg"
    End If
    Err_Exit:
    Exit Sub
    Err:
    MsgBox Error$
    Resume Err_Exit
    End Sub
    0
  19. stomec62 Messages postés 11 Statut Membre
     
    Vous êtes vraiment sympa de passer tout ce temps pour moi, merci.

    J’ai trouvé ce qui clochait dans les codes précédents

    Il fallait
    If nomPhoto2= »» ….
    Au lieu de
    If nom2= »»…
    La condition n’était pas sur le bon champ

    Maintenant cela marche parfaitement.
    Deux années de travaille sauvées.

    Je vais regarder la dernière chose que vous m’avez envoyé.

    J’ai encore quelque chose à vous demander.
    Peut-on empêcher la boite de dialogue windows de s’ouvrir pendant qu’il charge les images.
    Cela dure quelques dixième de seconde mais cela gène pour détecter les différence entre les affiches.
    C’est un peu compliqué à expliquer, mais j’utilise cette base pour répertorier toutes les variantes même infimes des affiches.

    Je crains que cela ne soit pas possible.
    0
  20. Rocksy Messages postés 514 Date d'inscription   Statut Membre Dernière intervention   73
     
    Non, je n'ai rien trouvé pour cette demande. Par contre vous pouvez noter ces différences dans un champ (un champ par photo = deux) de la table et l'afficher sous les photos. Je sais qu'il y a 3250 enregistrements, mais ces remarques ne concernent peut-être qu'une minorité d'entre-eux?
    Par contre voici plein d'info sur les images dans Access:
    http://office.microsoft.com/fr-be/access/HA011472041036.aspx?pid=CL100570041036
    @+

    PS: N'oublié pas de clôturer ce post lorsque vous l'estimerez terminé. Merci
    0
  21. stomec62 Messages postés 11 Statut Membre
     
    MERCI
    Je clôture ce post et vous remercie chaleureusement.
    Bravo à vous.
    0