Partage
  • Partager sur Facebook
  • Partager sur Twitter

[VB] Erreur de cast avec les dates

Sujet résolu
    16 mai 2011 à 12:00:15

    Salut!
    Ca fait bientôt 2 jours que j'arrive pas à résoudre ce problème >.<
    Jvous explique. J'ai DataGridView2 (DGV2) qui est générée à partir de la ligne courante de DatagridView1. Cette DGV2 affiche des données issues de ma bdd (MySQL Server).
    Certains de ces champs sont, dans ma bdd, de type DATE (format yyyy-mm-dd) et non DATETIME puisque l'heure, je n'en ai pas besoin.
    La DGV2 est en readonly normalement, mais quand je clique sur le bouton "Ajouter/editer", elle devient modifiable.
    Quand l'utilisateur a fini, il clique sur le bouton "sauver les changements" pour mettre à jour la BDD. Et c'est là que ça coince. Jusqu'à présent j'avais jamais eu de souci avec l'expression ToString("yyyy-MM-dd"). Mais là il me génère une erreur que je n'arrive pas à résoudre : "La conversion de la chaîne "yyyy-MM-dd" en type 'Integer' n'est pas valide.". Ci joint le code utile à la compréhension du problème (il peut y avoir des incohérences, je touche à tout pour voir si ça marche).
    Les variables sont déclarées ailleurs, pas de soucis là dessus.
    Comment je génère la DGV2 :
    Dim conn As MySqlConnection = New MySqlConnection("XXXX")
                dtSet = New DataSet()
                conn.Open()
                Dim MySQLCmdCount As String = "SELECT date_creation AS 'Date \n d affectation', date_debut_prevue AS 'Date de debut initiale', date_fin_prevue AS 'Date de fin initiale', duree_prevue 'Duree prevue initiale', date_debut_actuelle AS 'Date de debut reelle', date_fin_actuelle AS 'Date de fin actuelle', duree_actuelle AS 'Duree prevue actuelle', termine AS 'Tache terminee', IdDev AS 'Initiales', idPrimary, IdTache FROM planning.dev_to_tache  AS dev WHERE IdTache=" & Me.DataGridView1.Item(7, Me.DataGridView1.CurrentRow.Index).Value & " "
    
                SelectCommand = New MySqlCommand(MySQLCmdCount, conn)
                dataAdapter = New MySqlDataAdapter(SelectCommand)
                dataBuilder = New MySqlCommandBuilder(dataAdapter)
                dataAdapter.Fill(dtSet)
                dtTable = dtSet.Tables(0)
                DataGridView2.DataSource = dtTable
                DataGridView2.ReadOnly = True
                save_btn2.Enabled = False
                DataGridView2.SelectionMode = DataGridViewSelectionMode.FullRowSelect
    


    Et mon super bouton Sauver :

    Private Sub save_btn2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles save_btn2.Click
            Dim var As Integer
            Dim ligne_sql As String = ""
            Dim conn As MySqlConnection = New MySqlConnection("XXXXXX")
            conn.Open()
            For var = 0 To DataGridView2.RowCount - 1
                Dim date_debut2 As String
                Dim date_affect As String
                Dim date_debut As String
                Dim date_fin As String
                Dim date_fin2 As String
                If IsNothing(Me.DataGridView2.Item(0, var).Value) Then
                    date_affect = Now.ToString("yyyy-MM-dd")
                Else
                    date_affect = Me.DataGridView2.Item(0, var).Value.ToString("yyyy-MM-dd")
                End If
    'Ici y'a plein d'autres if sur le même modèle que celui d'au dessus
    
    
                ligne_sql = "REPLACE INTO dev_to_tache (IdDev, IdTache, date_creation, date_debut_prevue, date_fin_prevue, duree_prevue, date_debut_actuelle, date_fin_actuelle, duree_actuelle, termine) VALUES ('" & Me.DataGridView2.Item(8, var).Value.ToString & "', " & Val(Me.DataGridView1.Item(7, Me.DataGridView1.CurrentRow.Index).Value) & ", '" & date_affect & "', '" & date_debut & "', '" & date_fin & "', " & Me.DataGridView2.Item(3, var).Value & ",  '" & date_debut2 & "', '" & date_fin2 & "', " & Me.DataGridView2.Item(6, var).Value & "," & Me.DataGridView2.Item(7, var).Value & ")"
                Dim Insertdev = New MySqlCommand(ligne_sql, conn)
                Insertdev.ExecuteNonQuery()
            Next
            'dataAdapter.Update(dtTable)
            Me.DataGridView2.DataSource = Nothing
            Me.remplir_gridview2()
            DataGridView2.[ReadOnly] = True
            save_btn2.Enabled = False
            new_btn2.Enabled = True
            delete_btn2.Enabled = True
        End Sub
    


    Merci
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      16 mai 2011 à 12:10:19

      Je comprends pas vraiment l'erreur...elle se passe ben à la ligne où le ToString est effectué ?
      Essaie ça :
      date_affect = DateTime.Now.ToString("d", CultureInfo.InvariantCulture)
      

      Le "d" signifie "format de date court", et InvariantCulture te permet d'obtenir le même résultat quelle que soit la langue de l'ordi sur lequel ton programme tourne.
      • Partager sur Facebook
      • Partager sur Twitter
        16 mai 2011 à 12:20:32

        Oui, il pointe l'erreur sur la ligne
        date_affect = Me.DataGridView2.Item(0, var).Value.ToString("yyyy-MM-dd")
        

        Et avec ton bout de code, il convertit correctement, mais le format n'est pas le même que celui que j'ai en base de donnée et du coup il me fait une erreur au moment de la requête.
        Incorrect date value: '05/16/2011' for column 'date_creation' at row 1
        (Pour rapel, dans ma bdd c'est au format YYYY MM DD)



        EDIT :
        </span>

        Bon alors je n'ai pas du tout compris le code (d'ailleurs si une âme charitable voulait bien m'expliquer...) mais ce truc là marche sans soucis (trouvé sur le forum de msdn) :
        Dim dtest As Date
                    If DateTime.TryParse(Me.DataGridView2.Item(0, var).Value, dtest) Then
                        date_affect = dtest.ToString("yyyyMMdd")
                    End If
        
        • Partager sur Facebook
        • Partager sur Twitter

        [VB] Erreur de cast avec les dates

        × 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