IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Erreur "ARGUMENT INVALIDE"


Sujet :

Requêtes et SQL.

  1. #1
    Membre actif Avatar de Duddy
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Novembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Agent de maitrise
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 257
    Points : 237
    Points
    237
    Par défaut Erreur "ARGUMENT INVALIDE"
    Bonsoir,

    Lors de l'import d'un fichier .DBF (300 000 lignes et env 100 colonnes) dans une base par une requête exécutée par une macro, comment puis-je trouver le champ qui me génère le message "ARGUMENT INVALIDE".

    J'ai pensé à du code mais au regard du nombre de lignes à écrire, je pose la question au cas où quelqu'un aurait une solution plus rapide.

    Merci à tous
    Bon courage à toi.

  2. #2
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut
    Bonjour,

    Tu parles d'argument invalide ! je pense doc qu'il s'agirait plutot d'un problème au niveau de la macro.
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  3. #3
    Membre actif Avatar de Duddy
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Novembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Agent de maitrise
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 257
    Points : 237
    Points
    237
    Par défaut
    Bonjour,

    Je travaille pour 4 départements, la base a déjà fonctionné lors d'un import sur 1 département.
    De plus, si j'essaie d'importer par le menu "Fichier Importer" le message apparait.

    Je cherche juste une solution autre que le code VBA, si bien-sur, cela existe, pour trouver le champ en anomalie.

    Merci d'avance
    Bon courage à toi.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Si tu passes (si j'ai bien compris) en mode manuel par Fichier Importé, en théorie, Access doit te générer une table d'erreur. Regardes dedans ce qu'il y a, cela pourrait faire avancer le Schmilblik.

    Starec

  5. #5
    Membre actif Avatar de Duddy
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Novembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Agent de maitrise
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 257
    Points : 237
    Points
    237
    Par défaut
    Bonjour,

    J'ai vérifié, suite à la réponse de Starec, si j'avais une table d'erreur.
    Je n'ai pas de génération de table après l'apparition du message.
    Je mets un doc du message erreur en pièce jointe.

    De plus, si je réouvres la base, le message apparait a la fermeture de celle-ci. Ce n'est pas logique car aucune action n'est réalisée.

    Je pense à un manque de mémoire au regard du volume de la table.

    Quelqu'un a t-il une solution?
    Merci d'avance
    Fichiers attachés Fichiers attachés
    Bon courage à toi.

  6. #6
    Membre actif
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Points : 222
    Points
    222
    Par défaut
    Bonjour ,
    Qu'elle est la taille en octets de ton fichier Mdb? ==> limitation access à 2 giga octets ==> 300 000 be emble pas faire d'éborder cette limites excepté si tu n'as pas réorganisée ta base régulièrement , surtout avant l'incorporation importante de données.

  7. #7
    Membre actif Avatar de Duddy
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Novembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Agent de maitrise
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 257
    Points : 237
    Points
    237
    Par défaut
    Bonsoir,

    En fait, j'ai besoin d'importer 5 tables de même taille (env 250000 oct chacune). Dans la macro, les tables importées sont mises en forme (les unes après les autres) et elles créent des tables qui sont posées dans une autre base.
    Il est vrai que la taille de la base, au moment du BUG est > à 2 gigas.
    Pourquoi, vu que j'exporte la table dans une autre MDB et que je supprime la source, le volume de ma base ne baisse t-il pas?
    Ma base réceptrice, elle, n'est pas encore à 2 gigas au moment du BUG.

    Comment organiser ma base comme le préconise JACK78960 ?

    Merci d'avance.
    Bon courage à toi.

  8. #8
    Membre actif
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Points : 222
    Points
    222
    Par défaut
    Fait outil compacter la bases de données ==> la base devrait fortement diminuer.

    Si tu veux travail avec plusieurs grosses tables, tu mets chaque grosse table dans un fichier mdb puis sur ta base frontale , tu attaches toutes ces tables ==> la sommes de toutes tes base pourra être supérieur à 2 Giga octest
    mais ta base principale à chaques import va créer une table temporaire que tu ne vois qui aura la taille des tables avec lequelles tu travailles ==> La place de cette table n'est pas libérée à la fin de l'import ==> aussi dès quon travaille avec des grosses tables , il faut compacter très régulièrement les bases mdb.

  9. #9
    Membre actif Avatar de Duddy
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Novembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Agent de maitrise
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 257
    Points : 237
    Points
    237
    Par défaut
    Bonsoir JACK78960,

    Merci de tes réponses.

    Comment puis-je compacter ma base?

    Je ne connais pas la commande "automatique" par macro, ni en vba.

    Cela veut dire que je dois aussi réaliser le compactage de ma base réceptrice en cours d'exécution de mon programme réalisé en macro (j'ai très peu de code vba dans cette base)
    Bon courage à toi.

  10. #10
    Membre actif
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Points : 222
    Points
    222
    Par défaut
    en access 2000 à 2003 "outils" "Compacter la basses de données"
    en 2007 boutons Office puis "Gérer" "Compacterbases de données"

    Eb codes je préconnise de ne compacter que des bases ayabt des tables attachées dans la base principales == je pense que le code est disponible ssur le sites sinon recontacte pour que je te l'envoies

    Le compactage manuel est très souvent suffisant

  11. #11
    Membre actif Avatar de Duddy
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Novembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Agent de maitrise
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 257
    Points : 237
    Points
    237
    Par défaut
    Merci JACK78960

    J'ai trouvé comment intégrer le compactage de ma base principale en cours d'exécution. Cela va bien rallonger le temps d'exécution, mais bon....

    Il suffit d'insérer "exécuter commande" "compacterbase" dans la macro, mais cela ne vaut pas pour ma base qui reçoit mes tables.

    Faut-il que je passe par un bout de code VBA? j'en ai bien l'impression.
    Bon courage à toi.

  12. #12
    Membre actif
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Points : 222
    Points
    222
    Par défaut
    Si tu veux le faire en VBA ,pour compacter une base en dehors de la base ou tu poseras la fonction que je t'envoie dans la base de données principale

    cette fonction compress admet un paramètre qui est
    • soit un nom de fichier Mdb complet et valide
    • Soit le nom d'un table attachée pour laquelle la base où elle se situe doit compressée
    elle ramene un message d'erreur ou un texte donnant le résultat du compactage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Function compress(paramètre$) As String
        Dim Nombase As String, NomTemp As String, maBase As Object
        Dim i As Integer, compress2 As Double
        Dim fs, fichier, tailleTemp
        compress = ""
        On Error Resume Next
        If LCase(Right(Nombase, 4)) <> ".mdb" Then
            Set maBase = CurrentDb
            Nombase = maBase.TableDefs(paramètre$).Connect
            If Err Then Exit Function
            Nombase = Right(Nombase, Len(Nombase) - 10)
        End If
        NomTemp = Dir(Nombase)
        If Err Then Exit Function
        NomTemp = Left(Nombase, Len(Nombase) - Len(NomTemp)) & "compress.mdb"
        Kill NomTemp
        Err = 0
        DBEngine.CompactDatabase Nombase, NomTemp, dbLangGeneral
        For i = 0 To 20: DoEvents: Next i
        If Err And Err <> 6 Then Exit Function
        Set fs = CreateObject("Scripting.FileSystemObject")
        Set fichier = fs.Getfile(NomTemp)
        tailleTemp = fichier.Size
        Set fichier = fs.Getfile(Nombase)
        For i = 0 To 20: DoEvents: Next i
     
        compress = "Compactage à " & Format(100 * tailleTemp / fichier.Size, "##0.00") & " %"
        If Err Then
            Err = 0
            compress = "Compactage à " & Format(FileLen(NomTemp) / (1024 * 1024), "##0.00") & " MégaOctets"
        End If
        If Err Then
            Err = 0
            compress = "Compactage Réussi"
        End If
        For i = 0 To 20: DoEvents: Next i
        Kill Nombase
        For i = 0 To 20: DoEvents: Next i
        Name NomTemp As Nombase
        For i = 0 To 20: DoEvents: Next i
        If Err Then Err = 0
    End Function

  13. #13
    Membre actif Avatar de Duddy
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Novembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Agent de maitrise
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 257
    Points : 237
    Points
    237
    Par défaut
    merci Jack78960,

    Je vais tester demain et je remettrai un message.
    Par contre, le code VBA est en ADO ou DAO? ( il me semble reconnaitre du code ADO pour les bibliothèques))

    Encore merci et bonne nuit
    Bon courage à toi.

  14. #14
    Membre actif
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Points : 222
    Points
    222
    Par défaut
    tu n'as pas besoin ni de DAO ni de ADO ==> en effet comme tu peux le voir dans le code l'objet mabase est déclaré comme un"Object" et non pas DATABASE de DAO. l'instruction
    transforme Object en database puisque currentDB est un objet database. DAO n'est qu'une bibliothéque dites Active-x qui pointe sur les objets, les propriétés et les méthode du moteur Jet d'access ==> donc dans mabase j'ai accès à tous comme si j'avais déclaré DAO ==> ce code fonctionne sans ajout de bibliothèque
    Cette astuce est très utile pour la genéralisation d'une application Access sur des postes clients .

    elle fonctionne aussi avec un Recorsdet exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim MonRecordSet as object 
    set MonRecordSet = me.RecordsetClone
    on peut donc travailler sur un recordset issus de la tables ou requête du formulaire courant sans déclaré DAO.

  15. #15
    Membre actif Avatar de Duddy
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Novembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Agent de maitrise
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 257
    Points : 237
    Points
    237
    Par défaut
    bonjour,

    J'ai tenté de compacter ma base pendant l'exécution du code, mais cela ne fonctionne pas (message erreur: la base ne peut être compacter par l'exécution d'une macro ou par du code VBA), même en créant le compactage dans une base TEMP.
    Le code s'arrête ce qui me semble logique.

    Je m'y suis pris ainsi:
    Dans la macro, j'importe puis je demande l'exécution d'un code VBA pour compacter.

    Quelqu'un a t-il une solution?

    Merci d'avance

    Aucune réponse ne semble être disponible, alors je vais clore la discussion.
    Je recommence la base en modifiant la méthode (tables attachées), et je réécris en VBA toutes les actions.

    Merci à tous pour les réponses, j'aurai tout de même appris des choses et c'est bien là l'essentiel.

    A une prochaine.
    Bon courage à toi.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/09/2007, 16h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo