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

VBA Access Discussion :

erreur '3075' Opérateur absent, apostrophes, doubles apostrophes & Debug.Print [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Consultant/Développeur
    Inscrit en
    Février 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant/Développeur
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2016
    Messages : 22
    Points : 19
    Points
    19
    Par défaut erreur '3075' Opérateur absent, apostrophes, doubles apostrophes & Debug.Print
    Bonjour à tous

    j'invoque une requête sql constituée de champs que j'ai récupéré dans mon formulaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                sql2 = "INSERT INTO Excel_test (idAnalysisInfo, SourceName, DocumentName, ReferenceDocument, idAU, issuanceDate, Period, IssuerName, Description, " _
                & "Label, Comments, NameoftheAnalyst, Creation_Date, AnalysisStatus, AMLFT, KYC, FinancialSanctions, OFAC, KnowlandTrain, GovandOrg, Procedures, Tools, Controls) VALUES " _
                & "(" & id_AnalysisInfo & ", " & Source_Name & ", " & Document_Name & ", " & Reference_Document & ", " & id_AU & ", " & Issuance_Date & ", " _
                & "" & Period & ", " & Issuer_Name & ", " & Description & ", " & Label & ", " & Comments & ", " & Nameofthe_Analyst & ", " & Creation_Date & ", " _
                & "" & Analysis_Status & ", " & AMLFT & ", " & KYC & ", " & FinancialSanctions & ", " & OFAC & ", " & Know & ", " & Gov & ", " & Procedures & ", " & Tools & ", " & Controls & " ) "
    J'ai vérifié via un Debug.Print sql2 mon sql et cela donne:

    INSERT INTO Excel_test (idAnalysisInfo, SourceName, DocumentName, ReferenceDocument, idAU, issuanceDate, Period, IssuerName, Description, Label, Comments, NameoftheAnalyst, Creation_Date, AnalysisStatus, AMLFT, KYC, FinancialSanctions, OFAC, KnowlandTrain, GovandOrg, Procedures, Tools, Controls) VALUES (5936, FORECAST incidents, FORECAST_extract_31 mars 2015.xls, HI372641, 592, 22/12/2014, Q4 2014, Entity, , 6, , Lionel BENOILID, 23/07/2015, Completed, 1, 0, 0, 0, 1, 0, 0, 0, 0 )

    C'est exactement ce que je veux (les champs FORECAST blabla étant les champs que je souhaite récupérer qui ont bel et bien été récupérés)

    N'empêche, message d'erreur: [Erreur d'execution '3075' Erreur de syntaxe (opérateur absent) dans l'expression FORECAST INCIDENTS]
    Note: FORECAST INCIDENTS correspond à ce qui a été récupéré dans le champs " & Source_Name & ", et est un champ texte, tandis que le précédent 5936 " & id_AnalysisInfo & " est un champ numérique (donc erreur seulement sur les champs texte?)

    Aussi, j'ai fait des Replace(Document_Name, "'", "''", 1, -1, vbTextCompare) sur les champs succeptibles de contenir des apostrophes
    J'ai des champs de type date aussi comment dois je les encadrer?

    J'ai également testé en rajoutant des apostrophes autour des champs sql:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sql2 = "INSERT INTO Excel_test (idAnalysisInfo, SourceName, DocumentName, ReferenceDocument, idAU, issuanceDate, Period, IssuerName, Description, " _
                & "Label, Comments, NameoftheAnalyst, Creation_Date, AnalysisStatus, AMLFT, KYC, FinancialSanctions, OFAC, KnowlandTrain, GovandOrg, Procedures, Tools, Controls) VALUES " _
                & "('" & id_AnalysisInfo & "', '" & Source_Name & "', '" & Document_Name & "', '" & Reference_Document & "', '" & id_AU & "', '" & Issuance_Date & "', " _
                & "'" & Period & "', '" & Issuer_Name & "', '" & Description & "', '" & Label & "', '" & Comments & "', '" & Nameofthe_Analyst & "', '" & Creation_Date & "', " _
                & "'" & Analysis_Status & "', '" & AMLFT & "', '" & KYC & "', '" & FinancialSanctions & "', '" & OFAC & "', '" & Know & "', '" & Gov & "', '" & Procedures & "', '" & Tools & "', '" & Controls & "' ) "
    Résultat: erreur '3219' opération non valide

    et mon Debug.Print sql2 donne:
    INSERT INTO Excel_test (idAnalysisInfo, SourceName, DocumentName, ReferenceDocument, idAU, issuanceDate, Period, IssuerName, Description, Label, Comments, NameoftheAnalyst, Creation_Date, AnalysisStatus, AMLFT, KYC, FinancialSanctions, OFAC, KnowlandTrain, GovandOrg, Procedures, Tools, Controls) VALUES ('5936', 'FORECAST incidents', 'FORECAST_extract_31 mars 2015.xls', 'HI372641', '592', '22/12/2014', 'Q4 2014', 'Entity', '', '6', '', 'Lionel XXXXX', '23/07/2015', 'Completed', '1', '0', '0', '0', '1', '0', '0', '0', '0' )

    J'ai testé plusieurs combinaisons avec les '" "' uniquement sur les champs texte et juste ' ' les champs numériques, et idem, erreur '3219'

    Si vous avez des idées... je vous remercie d'avance

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 087
    Points : 5 203
    Points
    5 203
    Par défaut
    Bonjour,

    En gros le debug devrait afficher ça (sauf si certains champs numériques sont destinés à des strings) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO Excel_test (idAnalysisInfo, SourceName, DocumentName, ReferenceDocument, idAU, issuanceDate, Period, IssuerName, Description, Label, Comments, NameoftheAnalyst, Creation_Date, AnalysisStatus, AMLFT, KYC, FinancialSanctions, OFAC, KnowlandTrain, GovandOrg, Procedures, Tools, Controls) VALUES (5936, 'FORECAST incidents', 'FORECAST_extract_31 mars 2015.xls', 'HI372641', 592, '22/12/2014', 'Q4 2014', 'Entity', '', 6, '', 'Lionel XXXXX', '23/07/2015', 'Completed', 1, 0, 0, 0, 1, 0, 0, 0, 0)
    En variante, description et comments peuvent être valorisés à null (ce n'est pas pareil)
    Bien sûr il faut que la valeur indiquée soit conforme avec les règles définies au niveau de la table
    Enfin si l'un des champs peut contenir une ' il faut la doubler lors de la création de la requête SQL sinon ça plante à l'exécution...
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  3. #3
    Membre à l'essai
    Homme Profil pro
    Consultant/Développeur
    Inscrit en
    Février 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant/Développeur
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2016
    Messages : 22
    Points : 19
    Points
    19
    Par défaut
    Nico84:

    Les valeurs normalement sont conformes à celles de la table: mes variables que je récupère sont en string pour les champs de table de type texte, mémo; et en integer pour les numeric et Oui/Non (oui/non pour les dernières valeurs 0,0,0,1 etc...); et en date pour les date
    Les champs succeptibles de contenir une ' ont été doublés en '' via un : Replace(Document_Name, "'", "''", 1, -1, vbTextCompare)
    Parfois (comme c'est la cas ici), les champs descriptions et comments sont vides, et dans les propriétés des champs la table, le [Null interdit] est à [non] et [Chaîne vide autorisée] est à [oui], que veux tu dire par "valorisés à Null"

    Le debug affiche en effet cela... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO Excel_test (idAnalysisInfo, SourceName, DocumentName, ReferenceDocument, idAU, issuanceDate, Period, IssuerName, Description, Label, Comments, NameoftheAnalyst, Creation_Date, AnalysisStatus, AMLFT, KYC, FinancialSanctions, OFAC, KnowlandTrain, GovandOrg, Procedures, Tools, Controls) VALUES (5936, 'FORECAST incidents', 'FORECAST_extract_31 mars 2015.xls', 'HI372641', 592, '22/12/2014', 'Q4 2014', 'Entity', '', 6, '', 'Lionel XXXXXX', '23/07/2015', 'Completed', 1, 0, 0, 0, 1, 0, 0, 0, 0 )
    ...quand je met des '" "' pour les valeurs de type string et " " pour les valeurs de type integer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sql2 = "INSERT INTO Excel_test (idAnalysisInfo, SourceName, DocumentName, ReferenceDocument, idAU, issuanceDate, Period, IssuerName, Description, " _
                & "Label, Comments, NameoftheAnalyst, Creation_Date, AnalysisStatus, AMLFT, KYC, FinancialSanctions, OFAC, KnowlandTrain, GovandOrg, Procedures, Tools, Controls) VALUES " _
                & "(" & id_AnalysisInfo & ", '" & Source_Name & "', '" & Document_Name & "', '" & Reference_Document & "', " & id_AU & ", '" & Issuance_Date & "', " _
                & "'" & Period & "', '" & Issuer_Name & "', '" & Description & "', " & Label & ", '" & Comments & "', '" & Nameofthe_Analyst & "', '" & Creation_Date & "', " _
                & "'" & Analysis_Status & "', " & AMLFT & ", " & KYC & ", " & FinancialSanctions & ", " & OFAC & ", " & Know & ", " & Gov & ", " & Procedures & ", " & Tools & ", " & Controls & " ) "
    Résultat [erreur d'execution '3219' Opération non valide]

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 266
    Points
    34 266
    Par défaut
    Salut
    issuancedate n'est-èil pas un champs date ? format #MM/DD/YYYY# à prévoir.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre à l'essai
    Homme Profil pro
    Consultant/Développeur
    Inscrit en
    Février 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant/Développeur
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2016
    Messages : 22
    Points : 19
    Points
    19
    Par défaut
    Oui, issuance_date est une date, j'ai renseigné le format date dans la variable de stockage et dans le champs de la table

    Allez savoir pourquoi, mais au lieu de mettre sql = INSERT INTO ... et dbs.openRecordset(sql)
    le fait de faire dbs.execute INSERT INTO résout le problème...

    Ça ne réponds pas vraiment à ces questions d'apostrophes, mais je suis débloqué dans mon travail

    Merci pour votre aide

    (Dois je mettre en résolu?)

    Bonne soirée à tous

  6. #6
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Bubudu77

    Oui tu peux mettre résolu et dans mon blog à cette adresse une contribution qui pourrait t'être utile


    http://www.developpez.net/forums/blo...s-ecrites-vba/

    Jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  7. #7
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 087
    Points : 5 203
    Points
    5 203
    Par défaut
    Citation Envoyé par Bubudu77 Voir le message
    Allez savoir pourquoi, mais au lieu de mettre sql = INSERT INTO ... et dbs.openRecordset(sql)
    le fait de faire dbs.execute INSERT INTO résout le problème...
    Il me semble que openrecordset est réservé aux requetes de type SELECT...
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  8. #8
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Nico,

    Bien vu et il est vrai que sans la totalité du code, nous aurions pu chercher longtemps !

    donc pour un insert soit un docmd.runsql soit un execute (largement préférable pour l'interception d'erreurs)

    Bubudu77

    Puisque tu maîtrises les techniques du débogage un simple copier-coller vers la création d'une requête depuis ton volet de navigation te permet de valider ton expression.

    Bonne continuation

    Jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

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

Discussions similaires

  1. [AC-2010] Erreur 3075: Opérateur Absent
    Par Warwolf dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 08/10/2015, 10h56
  2. [AC-2007] erreur 3075 opérateur absent
    Par fbourdon dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 26/07/2011, 14h28
  3. Erreur 3075(opérateur absent) sous Access2003
    Par eric89 dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 24/09/2010, 12h44
  4. erreur '3075' APOSTROPHE
    Par mira2008 dans le forum VBA Access
    Réponses: 1
    Dernier message: 29/01/2008, 19h06
  5. Réponses: 9
    Dernier message: 12/07/2006, 13h42

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