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 Requête altérée


Sujet :

Requêtes et SQL.

  1. #81
    Membre à l'essai
    Homme Profil pro
    Responsable SAV
    Inscrit en
    Octobre 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Algérie

    Informations professionnelles :
    Activité : Responsable SAV
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2019
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par micniv Voir le message
    Bonjour,

    Pour moi c'est un rapport identique à celui de GAYOT ci-dessus.
    Je modifie les requêtes UPDATE, toutes en VBA
    J'en suis à ma 3eme appli, plus de 40 corrections par appli. C'est immonde, mais les clients apprécient !

    Cordialement
    Bonjour,
    j'ai un probleme identique, s'il vous plait comment modifier cette requete en VBA.
    je suis novice.

    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
    Private Sub Report_Activate()
     
    Dim fichier As String
    Dim base As Database
    Dim requete As String
    Dim client_msg As New Outlook.Application
    Dim message As Outlook.MailItem
    Dim adresse As String: Dim ligne As Recordset
     
    fichier = Application.CurrentProject.Path & "archives_facturesfacture_" & num_com.Value & ".pdf"
    DoCmd.OutputTo acOutputReport, , acFormatPDF, fichier, False
     
    Set base = Application.CurrentDb
     requete = "UPDATE Commandes SET facture_com = 'facture_" & num_com.Value & ".pdf' WHERE num_com = " & num_com.Value & ""
     base.Execute requete
    Merci

  2. #82
    Invité
    Invité(e)
    Par défaut
    Bonjour
    Tu peux essayer comme ceci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    requete = "UPDATE (SELECT * FROM Commandes) AS Commandes SET facture_com = 'facture_" &  num_com.Value & ".pdf' WHERE num_com = " & num_com.Value &  ""

  3. #83
    Membre à l'essai
    Homme Profil pro
    Responsable SAV
    Inscrit en
    Octobre 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Algérie

    Informations professionnelles :
    Activité : Responsable SAV
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2019
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    Bonjour,
    Super, ça marche très bien
    Merci pour votre aide.

  4. #84
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2019
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2019
    Messages : 144
    Points : 194
    Points
    194
    Par défaut
    Salut,

    Une mise à jour d'Office 2013 a réglé le problème aujourd'hui.

  5. #85
    Nouveau Candidat au Club
    Homme Profil pro
    responsable d'équipe
    Inscrit en
    Avril 2014
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : responsable d'équipe
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 212
    Points : 0
    Points
    0
    Par défaut
    bonjour
    j'ai moi aussi ce pb qui est entrain d'arrivé sur tous nos pc, et le service info, n'est pas en mesure de mettre les pc à jour, car c'est une tratégie de groupe europe

    donc je n'ai pas le choix, il va falloir que je modifie mes 125 requêtes!!!
    par contre je suis sous excel, et mes requêtes interroge un fichier excel

    ma requête à l'origine, donne ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TexteSQL_modification_ligne = "UPDATE [TableAtelier$] SET [produit] = '" & c_produit1 & "',[secteur] = '" & c_secteur & "' ,[sousensemble] = '" & C_sous_ensemble & "',[Type] = '" & C_type_de_produit & "' WHERE [ligne] = '" & c_ligne & "' "
    j'ai bien essayé de la modifié comme ceci, mais ça ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TexteSQL_modification_ligne = "(SELECT * FROM [TableAtelier$]) AS [TableAtelier$] SET [produit] = '" & c_produit1 & "',[secteur] = '" & c_secteur & "' ,[sousensemble] = '" & C_sous_ensemble & "',[Type] = '" & C_type_de_produit & "' WHERE [ligne] = '" & c_ligne & "' "

  6. #86
    Nouveau Candidat au Club
    Homme Profil pro
    responsable d'équipe
    Inscrit en
    Avril 2014
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : responsable d'équipe
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 212
    Points : 0
    Points
    0
    Par défaut
    désolé, j'avais oublié le update
    ça fonctionne maintenant

  7. #87
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 059
    Points : 24 662
    Points
    24 662
    Par défaut
    Bonjour,

    Pourquoi ne pas centraliser l'exécution pour qu'en cas d'erreur, la modification soit faite par du code à la place de la mano ?
    De 125 interventions on tombe à 125 appels c'est quand même moins compliqué et la fonction fera le job même après que le problème sera résolu.

    l'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fExecuteSqlUpdate "UPDATE matable SET..."
    la fonction d'exécution de la requête update et de modification du texte Sql.

    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
    Public Function fExecuteSqlUpdate(ByVal strSqlUpdate As String)
    On Error GoTo errsub
     
    DoCmd.RunSQL strSqlUpdate
     
    errsub:
    If Err.Number = 3340 Then 'erreur "requete altérée"
       strSqlUpdate = getNewSqlUpdateWithSelect(strSqlUpdate)
       Resume
    End If
    End Function
     
     
    Private Function getNewSqlUpdateWithSelect(ByVal strSqlUpdate As String) As String
     
    Dim beforeTableName As Long
    Dim afterTableName As Long
    Dim strTableName As String
     
      beforeTableName = InStr(1, strSqlUpdate, " ") + 1
      afterTableName = InStr(beforeTableName + 1, strSqlUpdate, " ")
      strTableName = Mid(strSqlUpdate, beforeTableName, afterTableName - beforeTableName)
      strSelectReplacement = "(SELECT * FROM " & nomTable & ")"
      strSqlUpdate = Replace(strSqlUpdate, strTableName, strSelectReplacement, 1, 1) 'ici on replace le nom de la table par le select
      getNameTable = strSqlUpdate
     
    End Function
    [Edit] Ajout du N° d'erreur 3340 puisqu'il semble que ce soit celui-là.

    Cordialement,

  8. #88
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 925
    Points
    55 925
    Billets dans le blog
    131
    Par défaut
    Perso, mes requêtes sont à deux endroits:
    • Requêtes normales d'Access;
    • Table contenant les requêtes qui sont appelées par le code (et souvent paramétrées). Dans cette table, on retrouve également le sql des requêtes "Access" qui doivent être modifiées pour être utilisées comme source de formulaire ou autre.


    Autre règle que je suis également: jamais de code sql dans la source d'un formulaire, d'un état, d'une liste déroulante ou listbox. Ce sont toujours des requêtes qui ont soit été enregistrées dans les requêtes d'Access soit qui sont récupérées de la table des requêtes lorsqu'elles doivent être modifiées dynamiquement par le code.

    Ainsi, les requêtes sont centralisées en deux points, et on peut les modifier rapidement (à la main ou par code) une fois pour toutes. Il n'est même pas nécessaire de tenter la requête puis de traiter l'erreur. Toutes mes requêtes update ont été modifiées en une fois et resteront ainsi par la suite.

    Et comme il n'y a aucune requête en dur dans le code (à part celle qui sert à récupérer le texte d'une requête), pas besoin de modifier le code des frontales chez le client. C'est juste un fichier Access qu'on lance et qui applique les correctifs sur les bases frontales des clients.

    Perso, je pense que disséminer du sql dans les sources d'objet Access et dans le code VBA est le meilleur moyen d'avoir un truc non maintenable à brève échéance.

  9. #89
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 059
    Points : 24 662
    Points
    24 662
    Par défaut
    En effet Pierre, chacun à des petites manies qui lui sont propres.

    La provenance du texte SQL n'a pas trop d'importance pour l'application de la fonction de modification du texte SQL. Qu'il vienne du VBA, d'objets Requête, contenu dans une table ou d'autres sources la solution reste viable.

    Cordialement,

  10. #90
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2019
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2019
    Messages : 144
    Points : 194
    Points
    194
    Par défaut
    Bonjour Pierre,

    Je trouve votre idée intéressante, pourriez-vous détailler la table qui contient les requêtes, car j'ai un nouveau projet, et je souhaiterais le faire de manière cohérente pour éviter ce genre de mésaventure.

    Merci

  11. #91
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4
    Points : 10
    Points
    10
    Par défaut Microsoft a publié la correction !!!
    Microsoft a ENFIN publié des correctifs pour régler ce problème:

    https://support.office.com/fr-fr/art...3-f21636caedec

    Ces mises à jours devraient arriver toutes seules mais ce n'est pas le cas encore chez moi. Du coup je les aient installées à la main après les avoir téléchargées et ça fonctionne !

    Solution: installer la mise à jour qui corrige ce problème:

    Access 2010 KB4484193 - https://support.microsoft.com/fr-fr/...cember-10-2019
    Access 2013 KB4484186 - https://support.microsoft.com/fr-fr/...cember-10-2019
    Access 2016 KB4484180 - https://support.microsoft.com/fr-fr/...cember-10-2019

    J'ai tout de même ajouté une requête qui effectue un update au démarrage et qui prévient/bloque l'utilisateur si le problème est toujours présent. Par précaution.

    Ouf on peut respirer! Un mois avec un beug pareil, c'est une honte! Rien ne sera plus comme avant.
    Access n'est plus crédible.... et moi je crois que je vais changer de métier...
    C'est la goutte d'eau ...

Discussions similaires

  1. erreur requète SQL : trop peu de paramètres
    Par pierre.egaud dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 21/04/2006, 14h57
  2. [HQL] erreur requête delete
    Par PamelaGeek dans le forum Hibernate
    Réponses: 4
    Dernier message: 17/02/2006, 13h27
  3. Erreur requête - Types de données imcompatibles
    Par charleshbo dans le forum Access
    Réponses: 4
    Dernier message: 14/02/2006, 16h57
  4. [VB6] Erreur Requête
    Par yoda7666 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/01/2006, 21h20
  5. [erreur requête]
    Par viny dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 16/09/2005, 13h55

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