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

Macros et VBA Excel Discussion :

INSERT MySQL bizarre [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2015
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 113
    Par défaut INSERT MySQL bizarre
    Bonjour,

    Phénomène étrange:
    J'ai un fichier Excel avec macros. Une des macros fait un INSERT dans un table MySQL.
    J'ai testé dans différends environnement.
    1 - Excel 2010 sous Windows 8.1, cela fonctionne parfaitement
    2 - Excel 2021 sous Windows 10, cela fonctionne parfaitement
    3 - Excel 2021 sous Windows 11 (24HH2), cela ne fonctionne pas.

    Le pilote ODBC est une vieille version 5.1. J'ai le même phénomène avec le dernier pilote ODBC.

    Voici le code :
    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
    43
    44
    45
    46
    47
     
    Select Case vret
        Case 2
        MsgBox "Imprimer la fiche de paie n°" & lp, vbOKOnly, "Numéro de fiche de paie"
     
            If Updatejourpaye = 1 Then
                'Udpate MySQL datepaye
                Set rs = New ADODB.Recordset
     
                ConnectDB
     
                strsql = "UPDATE datepayetest SET datepayetest.payele = " & Jourdepaye & " WHERE datepayetest.IDDatepaye = " & (UpdateID) & ";"
                rs.Open strsql, PConn
     
                    Cells(lg, 63) = "OUI" 'ancienne colonne 72
                    Set oApp = GetObject(, "Word.Application")
                    Set Doc = oApp.documents(chemin_complet)
                    oApp.Visible = True
                    oApp.WindowState = wdWindowStateMaximize
                    oApp.Activate
                    Me.LstAPS = Null
                    Me.LstAPS.SetFocus
     
                rs.Close
     
            Else
                'INSERT MySQL datepaye
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
                Set rs = New ADODB.Recordset
     
                ConnectDB
     
                strsql = "INSERT INTO datepayetest (IDAgent,payele) VALUES (" & (idagent) & "," & Jourdepaye & ")"
                rs.Open strsql, PConn, adOpenDynamic, adLockOptimistic
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
                    Cells(lg, 63) = "OUI"
                    Set oApp = GetObject(, "Word.Application")
                    Set Doc = oApp.documents(chemin_complet)
                    oApp.Visible = True
                    oApp.WindowState = wdWindowStateMaximize
                    oApp.Activate
                    Me.LstAPS = Null
                    Me.LstAPS.SetFocus
     
                rs.Close
            End If
        End Select
    Sous Windows 11, j'ai ce message d'erreur
    Nom : Erreur VB.png
Affichages : 83
Taille : 8,3 Ko

    Et le débogage pointe cette ligne:
    rs.Open strsql, PConn, adOpenDynamic, adLockOptimistic

    Pourquoi cette erreur avec Windows 11 ?

    Si vous y avez été confrontés, ou une idée, je suis preneur.

    Cordialement,

    Fred

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 375
    Par défaut
    Bonjour,
    A quoi correspond "Jourdepaye" ?
    Ne faudrait il pas des quotes dans la requête, autour de la valeur ?

    Tatayo.

  3. #3
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2015
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 113
    Par défaut INSERT MySQL bizarre
    Bonjour et merci du retour,

    Non, sinon la valeur sera Jourdepaye elle même.

    J'ai testé avec le guillemets sans que ça n'y change rien.

    Jourdepaye = ThisWorkbook.Sheets("Relais").Cells(1, 12)

    Jourdepaye est juste la date récupérée.

    La requête : "INSERT INTO datepayetest (IDAgent,payele) VALUES (" & (idagent) & "," & Jourdepaye & ")", la variable est déjà entre guillemets.

    Quoiqu'il en soit, il n'y a que sur le PC en Windows 11 ou il y a cette erreur. Cela fait des années que nous utilisons ce fichier avec les mêmes macros.

    Cordialement,

    Fred

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2015
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 113
    Par défaut INSERT MySQL bizarre
    J'ai trouvé pourquoi l'erreur.

    La fonction =TEXTE(AUJOURDHUI();"JJMMAAAA") renvoie bien 20250409 sous 8.1 et 10 peut importe la version d'Excel.

    En revanche sous Windows 11, elle renvoie mercredi04jj, format de date incorrect donc.

    C'est étrange tout de même. Je n'arrive pas écrire la date sous le format AAAAMMJJ.

    J'ai du raté qq chose...

    Cordialement,

    Fred

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 466
    Par défaut
    Hello,

    Pourquoi ouvrir un recordset sur une requête "action" (insert / update / delete) qui ne renvoie ... rien ?
    Quitte à ouvrir un recordset, autant exploiter ses fonctionnalités:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim SQL As String
    SQL = "SELECT * FROM datepayetest;"
     
    Dim Rs As ADODB.Recordset
    Set Rs = New ODODB.Recordset
    Rs.Open SQL, Conn
     
    Rs.Find "IDDatepaye = " & UpdateID
    Rs.Edit
    Rs("payele").Value = Jourdepaye
    Rs.Update
    Rs.Close
    Ou mieux, une requête paramétrée comme expliqué ici:
    https://stackoverflow.com/questions/...ery-parameters

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 466
    Par défaut
    Citation Envoyé par Fred_rt Voir le message
    J'ai trouvé pourquoi l'erreur.

    La fonction =TEXTE(AUJOURDHUI();"JJMMAAAA") renvoie bien 20250409 sous 8.1 et 10 peut importe la version d'Excel.
    Etrange que tu aies besoin d'une formule pour formater tes données, normalement c'est le format de cellule qui s'occupe de cela, afin de dissocier le format d'affichage de la donnée elle-même.
    En forçant le format ainsi, tu transforme le type de données (en l'occurrence, de date vers chaîne), ce qui d'une part introduit une dépendance (inutile), et un risque de corruption (ce qu'il vient de t'arriver).

  7. #7
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2015
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 113
    Par défaut INSERT MySQL Bizarre
    Merci pour les conseils deedolith.

    Je regarde ça. Et en effet, je suis loin d'être un expert en VBA.

    Pour la date, il me semble que si je ne faisais pas ça la date n'était pas insérée correctement dans la table MySQL.

    Ce dont j'ai besoin, c'est que la donnée Date renvoie la date sous le format AAAAMMJJ. Sinon, lors de l'INSERT la date dans la table est 0000-00-00.

    Si j'utilise la fonction Aujourdhui() ou Date en VBA, la date n'est pas insérée correctement.

    Je dois mal m'y prendre...

  8. #8
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 560
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 560
    Par défaut
    Bonjour,
    Pour moi la question n'est pas de savoir pourquoi ça marche pas sur Excel 21 et Windows 11 mais pourquoi ça fonctionne sur les autres versions car à mon sens le message d'erreur est justifié et devrait apparaitre sur toutes les versions.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                strsql = "UPDATE datepayetest SET datepayetest.payele = '" & Jourdepaye & "' WHERE datepayetest.IDDatepaye = " & (UpdateID) & ";"
                rs.Open strsql, PConn
    Voici un exemple qui ajoute un enregistrement si le update n'a affecté aucun enregistrement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    UPDATE MaTable
    SET Col1 = 'valeur'
    WHERE ID = 1;
     
    INSERT INTO MaTable (ID, Col1)
    SELECT 1, 'valeur'
    FROM DUAL
    WHERE ROW_COUNT() = 0;

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

Discussions similaires

  1. Comportement bizarre INSERT MySQL avec champ TEXT
    Par yamatoshi dans le forum Administration
    Réponses: 0
    Dernier message: 13/07/2010, 12h38
  2. Comportement bizarre INSERT MySQL avec champ TEXT
    Par yamatoshi dans le forum Requêtes
    Réponses: 0
    Dernier message: 13/07/2010, 12h38
  3. Problèmede insert MySQL avec les DECIMAL
    Par SuperCed dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/04/2006, 17h04
  4. Problème sur requête insert mysql
    Par kcizth dans le forum Requêtes
    Réponses: 5
    Dernier message: 04/02/2006, 18h37
  5. [TRANSAQ SQL] INSERT comportement bizarre avec les REAL
    Par argyronet dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/12/2005, 11h47

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