Partage
  • Partager sur Facebook
  • Partager sur Twitter

Transfere de donnée excel dans une base de donées

Erreur type date (VBA)

    27 avril 2020 à 22:25:55

    Bo

    njour je suis actuellement entrain d'essayer de transférer les données de excel dans ma base de données mysql cependant j'ai une erreur de type qui m'empêche de mettre mes date dans ma base Erreur du code

    Suite à plusieurs tests j'ai constater que cela fonctionner quand je m'était mon champs Date en type varchar cependant je voudrait absolument l'avoir en type date

    voici mon code

    End Sub
    Sub Enregistrement_des_données()
    ''Initialisation des variable de connection a la base de données
    Dim MaConnexion As ADODB.Connection
    Dim MonRecord As ADODB.Recordset
    Dim NbLignes As Integer
    Dim rowtable As Integer
    Dim strSQL As String
    Dim Types As Integer
    
    'Creation des objets ADODB chaine et enregistrement
    Set MaConnexion = New ADODB.Connection
    Set MonRecord = New ADODB.Recordset
    
    'Ouverture de la chaîne de connexion
    MaConnexion.Open "DRIVER={MySQL ODBC 8.0 Unicode Driver};" & _
    "SERVER=127.0.0.1;" & _
    "DATABASE=ecran_dynamique;" & _
    "USER=root;" & _
    "PASSWORD=motdepasse;"
    
    NbLignes = Worksheets("BDD2").UsedRange.Rows.Count
    
    
        
    'Variable jour férier
    Dim annee As Integer 'Variable Annee
    Dim mois As Integer 'Variable Mois
    Dim ChangementColonne As Integer 'Variable de changement de cellule horizontal
    Dim ChangementLigne As Integer 'Variable de changement de cellule vertical
    Dim PremierJourMois As Date '
    Dim DernierJourMois As Date
    Dim DecalageJour As Byte
    Dim PremierLundi As Date
    Dim Jourdelan As Date
    Dim Fetedutravail As Date
    Dim Armistice3945 As Date
    Dim FeteNationale As Date
    Dim Assomption As Date
    Dim Toussaint As Date
    Dim Armistice1418 As Date
    Dim Noel As Date
    Dim Nb As Long
    Dim Epacte As Long
    Dim PLune As Date
    Dim LundiPaques As Date
    Dim Ascension As Date
    Dim Pentecote As Date
    
    annee = SpinButton_annee.Value 'Variable Automatique
        
    '   Calcul du Lundi de Pâques
    Nb = (annee Mod 19) + 1
    '   Différence entre calendrier solaire et lunaire
    Epacte = (11 * Nb - (3 + Int(2 + Int(annee / 100)) * 3 / 7)) Mod 30
    PLune = DateSerial(annee, 4, 19) - ((Epacte + 6) Mod 30)
    If Epacte = 24 Then PLune = PLune - 1
        '   Valable entre 1900 et 2199 : on verra bien ?
    If Epacte = 25 And (annee >= 1900 And annee < 2200) Then PLune = PLune - 1
    '   Lundi de Pâques
    LundiPaques = PLune - Weekday(PLune) + vbMonday + 7
    'Variable changement ligne & colonne
    ChangementColonne = 0
    ChangementLigne = 0
    'generation des jour férié de l'année
    Jourdelan = DateSerial(annee, 1, 1)
    Fetedutravail = DateSerial(annee, 5, 1)
    Armistice3945 = DateSerial(annee, 5, 8)
    FeteNationale = DateSerial(annee, 7, 14)
    Assomption = DateSerial(annee, 8, 15)
    Toussaint = DateSerial(annee, 11, 1)
    Armistice1418 = DateSerial(annee, 11, 11)
    Noel = DateSerial(annee, 12, 25)
    Ascension = LundiPaques + 38
    Pentecote = LundiPaques + 49
    
    i = 0
    For mois2 = 1 To 12
    
    
        For jour2 = 1 To 31
        i = i + 1
        ligneinsertion = Sheets("BDD2").Range("A65000").End(xlUp).Row + 1
        Datedujour = DateSerial(SpinButton_annee.Value, mois2, jour2)
        Sheets("BDD2").Cells(ligneinsertion, 1) = DateSerial(SpinButton_annee.Value, mois2, jour2)
        If Datedujour = Jourdelan Or Datedujour = Fetedutravail Or Datedujour = Armistice3945 Or Datedujour = FeteNationale Or Datedujour = Assomption Or Datedujour = Toussaint Or Datedujour = Armistice1418 Or Datedujour = Noel Or Datedujour = LundiPaques Or Datedujour = Ascension Or Datedujour = Pentecote Or Weekday(Datedujour, 2) = 6 Or Weekday(Datedujour, 2) = 7 Then
        Sheets("BDD2").Cells(ligneinsertion, 2) = Int(0)
        Else
        Sheets("BDD2").Cells(ligneinsertion, 2) = Int(1)
      
        End If
        Next
    Next
    With Worksheets("BDD2")
        For rowtable = 2 To NbLignes
        'on fait une boucle pour chaque ligne
        strSQL = "INSERT INTO `ecran_dynamique`.`calendrier` (`Date`,`Type`)" & _
        "VALUES('" & .Cells(rowtable, 1).Value & "', '" & _
        .Cells(rowtable, 2).Value & "')"
        MonRecord.Open strSQL, MaConnexion
    Next rowtable
    End With
    End Sub
     



    • Partager sur Facebook
    • Partager sur Twitter
      28 avril 2020 à 17:01:06

      Pour MySQL, le format d'un champ de type date c'est YYYY-MM-DD (Année-Mois-Jour), il faut donc lui passer dans ce format là, sinon MySQL n'apprécie pas.
      • Partager sur Facebook
      • Partager sur Twitter
        2 mai 2020 à 13:31:40

        Bonjour tout d'abord merci pour votre réponse mais du coup comment faire pour mettre ma date dans ce format dans mon macro ?

        • Partager sur Facebook
        • Partager sur Twitter
          5 mai 2020 à 9:50:51

          en remplaçant
          .Cells(rowtable, 1).Value
          par
          Format(.Cells(rowtable, 1).Value, "yyyy-mm-dd")
          • Partager sur Facebook
          • Partager sur Twitter
            23 juillet 2020 à 14:03:43

            J'ai eu la meme erreur mais je n'arrive pas à résoudre.

            Voici le code

                  
            Sub ExportMysql1()
            Dim Maconnexion As ADODB.Connection
            Dim monrecord As ADODB.Recordset
            Dim NbLignes As Integer
            Dim rowtable As Integer
            Dim strSQL As String
            
            Set Maconnexion = New ADODB.Connection
            Set monrecord = New ADODB.Recordset
            
            Maconnexion.Open "DRIVER={MySQL ODBC 8.0 Unicode Driver};" & "SERVER=localhost;" & "DATABASE=bd-gmao;" & "USER=root;" & "PASSWORD =;"
            
            NbLignes = Worksheets("personnel").UsedRange.Rows.Count
            
            With Worksheets("personnel")
            
                     For rowtable = 2 To NbLignes
                     strSQL = "insert into bd-gmao.essai(`id`,`nom`,`sexe`,`age`)" & "Values(" & .Cells(rowtable, 1).Value & ", " & .Cells(rowtabl, 2).Value & "," & .Cells(rowtable, 3).Value & ", " & .Cells(rowtable, 4).Value & ")"
                     monrecord.Open strSQL, Maconnexion
                     Next rowtable
            
            End With
            
            MsgBox "enregistrement réussi" & Chr(10) & (rowtable - 2) & "OK", vbInformation, "vérification de l'entrée des données"
            
            End Sub
            
            
            



            • Partager sur Facebook
            • Partager sur Twitter
              23 juillet 2020 à 15:47:12

              je ne vois pas pourquoi tu aurais un problème de date, a priori tu n'as ce type de données. mets ton message d'erreur.
              Le problème vient peut-être du fait que tu essais d'insérer des données qui existe déjà (si id est la clé primaire, il va te refuser de remettre le même id quand tu va relancer la requête d'insertion)
              • Partager sur Facebook
              • Partager sur Twitter

              Transfere de donnée excel dans une base de donées

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown