Jours et mois qui s'inverse lorsque j' INSERT INTO une date 01/04/2010

Résolu
alanort Messages postés 16 Date d'inscription samedi 10 avril 2010 Statut Membre Dernière intervention 22 avril 2010 - 5 avril 2010 à 21:51
alanort Messages postés 16 Date d'inscription samedi 10 avril 2010 Statut Membre Dernière intervention 22 avril 2010 - 6 avril 2010 à 00:20
Bonjour,

voila je suis sur un travail en VB.NET et j'utilise un fichier access 2003 qui a été creer a partir de ce programme que j'ai telechargé d'internet:
Portable MS Office 2003 usbtools.exe. Je dois rentrer des dates dans plusieurs tables de la BDD. Donc j'utilise l'objet ocCommande qui est instancié comme un OleDb.OleDbCommand.

Private ocCommand As New OleDb.OleDbCommand

seulement lorsque je rentre une date dans une comboBox genre 05/04/2010, ce qui se trouve enregistré dans la BDD est 04/05/2010. De plus lorsque je fais un select de la date 04/05/2010, le programme me dit que ca n'existe pas alors qu'elle est enregistré dans la db.

voici le code: ce code s'active lorsqu'on je clique sur une date de la combobox(dates qui sont chargées a partir d'une autre partie de mon code).

Private Sub cbDateConsult_SelectedValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbDateConsult.SelectedValueChanged

        Dim id As Integer ' sert a recupere le plus grand id d'un Soin Normal(table de ma DB) ou d'un SDia dans la table consultation
        
' j'essaie la connection
        Try
            ocConnexion.Open()
        Catch ex As OleDb.OleDbException
            MessageBox.Show(ex.Message)
        End Try
        
        If CBSNorm.CheckState = CheckState.Checked Then

            With ocCommand
                .CommandType = CommandType.Text
                .Connection = ocConnexion
                .CommandText = "SELECT id_soin_normal FROM Consultation WHERE [dateConsult]=#" + cbDateConsult.Text + "#;"
                lecteur = .ExecuteReader()                                                  'Format(#5/31/1993#, "dddd, d MMM yyyy"))
            End With                                                                        
            lecteur.Read()
            id = lecteur.Item(0)
            lecteur.Close()

            With ocCommand
                .CommandType = CommandType.Text
                .Connection = ocConnexion
                .CommandText "SELECT * FROM SoinNormal WHERE id_soin_normal " & id & ";"
                lecteur = .ExecuteReader()
            End With
            lecteur.Read()
            Try
                tbNoSN.Text = lecteur.Item(0)
                RTMedicSN.Text = lecteur.Item(1)
                txtBPoulPed.Text = lecteur.Item(2)
                txtBPoulsTib.Text = lecteur.Item(3)
                RTSoinEtTraitSN.Text = lecteur.Item(4)
                'cbDateMes.Text = lecteur.Item(5)
                lecteur.Close()
            Catch ex As Exception
                MsgBox(ex.GetType.ToString, MsgBoxStyle.OkOnly, "aaaargh")
            End Try


        ElseIf CBSDia.CheckState = CheckState.Checked Then
            With ocCommand
                .CommandType = CommandType.Text
                .Connection = ocConnexion
                .CommandText = "SELECT id_soin_diabetique FROM Consultation WHERE [Date]=#" + cbDateConsult.Text + "#;"
                lecteur = .ExecuteReader()                                                  'Format(#5/31/1993#, "dddd, d MMM yyyy"))
            End With                                                                        'STR_TO_DATE('03.10.2003 09.20', '%d.%m.%Y %H.%i')
            lecteur.Read()
            id = lecteur.Item(0)
            lecteur.Close()

            With ocCommand
                .CommandType = CommandType.Text
                .Connection = ocConnexion
                .CommandText "SELECT * FROM Soindiabetique WHERE id_soin_diabetique " & id & ";"
                lecteur = .ExecuteReader()
            End With
            lecteur.Read()
            Try
                TbNoSD.Text = lecteur.Item(0)
                RTMedSD.Text = lecteur.Item(1)
                TxtbPoulPedSD.Text = lecteur.Item(2)
                TxtbPoulTibSD.Text = lecteur.Item(3)
                RTMonoSD.Text = lecteur.Item(4)
                RTcompliSD.Text = lecteur.Item(5)
                RTsoinTraitPodoSD.Text = lecteur.Item(6)
                RTRemSD.Text = lecteur.Item(7)
                lecteur.Close()
            Catch ex As Exception
                MsgBox(ex.GetType.ToString, MsgBoxStyle.OkOnly, "aaaargh")
            End Try
        End If
        ocConnexion.Close()
    End Sub


Pour ma part je pense que le code est bon mais bon peut etre que je me trompe. je vous remercie d'avance pour vos réponse.

9 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
5 avril 2010 à 22:55
... peut-être à cause des dièses, je sais pas

en tout cas en effet çà ne va pas non plus cette insertion


.CommandText = String.Format("INSERT INTO Consultation (id_patient, dateConsult, Type_Consult, id_soin_normal) VALUES ({0}, #{1:d}#, 'SN', {2});", tbNo.Text, cbDateConsult.Text, idSoinNormal)
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
5 avril 2010 à 23:34
... ok testé sous mysql : il faut remplacer les # par des '
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
5 avril 2010 à 22:21
salut,

pas vraiment une erreur, c'est juste que c'est faux de croire "voir" la date...
les slash etc ne sont qu'une représentation, du coup c'est un format date qu'il faut fournir (en en même temps c'est bien une chaine à cet endroit...)

donc 2 possibilités

soit laisser VB convertir :
.CommandText String.Format("SELECT id_soin_normal FROM Consultation WHERE [dateConsult] #{0:d}#;", cbDateConsult.Text)


soit forcer le format universel :
.CommandText String.Format("SELECT id_soin_normal FROM Consultation WHERE [dateConsult] #{0:yyyy-mm-dd}#;", cbDateConsult.Text)



qu'est-ce que çà donne?

ps : le + ne sert pas à concaténer mais à additionner! &, ou string.format qui est bien pratique...
tu peux factoriser un peu de code (LECTURE à destination des zones)

++
[hr]
0
alanort Messages postés 16 Date d'inscription samedi 10 avril 2010 Statut Membre Dernière intervention 22 avril 2010
5 avril 2010 à 22:37
Non ca marche pas

ok je comprends. mais l'ennuie alors c'est que c'est pas au niveau de la demande d'affichage pour une date donnee que ca cloche mais au moment de l'ajout des nouvelles informations dans la BDD a une date donnée. je m'explique car j'ai pas bien expliqué dès le départ et je m'en excuse:

mon code pour ajouter c'est ca:

 Dim sResponse As String = MsgBox("Confirmation de l'ajout", MsgBoxStyle.OkCancel, "Ajouter Soin Normal")
            If sResponse = "1" Then
                Try
                    ocConnexion.Open()
                    With ocCommand
                        .CommandType = CommandType.Text
                        .Connection = ocConnexion
                        .CommandText = "INSERT INTO SoinNormal (medication,poulsPedieux,poulsTibiale,SoinEtTraitPodo) VALUES ('" + RTMedicSN.Text + "','" + txtBPoulPed.Text + "','" + txtBPoulsTib.Text + "','" + RTSoinEtTraitSN.Text + "');"
                        .ExecuteNonQuery()
                    End With

                    With ocCommand
                        .CommandType = CommandType.Text
                        .Connection = ocConnexion
                        .CommandText = "SELECT MAX(id_soin_normal) FROM SoinNormal;"
                        lecteur = .ExecuteReader()
                    End With
                    lecteur.Read()
                    idSoinNormal = lecteur.Item(0)
                    lecteur.Close()

                    With ocCommand
                        .CommandType = CommandType.Text
                        .Connection = ocConnexion
                        .CommandText = "INSERT INTO Consultation (id_patient,dateConsult,Type_Consult,id_soin_normal) VALUES (" & CInt(tbNo.Text) & "," + cbDateConsult.Text + ",'SN'," & idSoinNormal & ");"
                        cbDateConsult.Items.Add(ocCommand.ExecuteNonQuery())
                        Me.afficher("SN")
                    End With
                    MsgBox("le soin normal a bien ete rajouté")

                Catch ex As OleDb.OleDbException
                    MessageBox.Show(ex.Message)
                    MessageBox.Show("L'opération d'insertion a échouée", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
                End Try
            End If
            ocConnexion.Close()


le code que j'ai mis avant c'est simplement pour recherche les info correspondant a la date que j'ai selectionnée dans ma comboBox. Maintenant ce que j'aimerai faire c'est que lorsque je fait l'insert into dans ma table Consultation, il inverse pas mois et jour (comme je l'ai dit avant lorsque je tape 01/02/2010, ce qui se trouve dans la base de donne c'est 02/01/2010).

apres cela je pense que ma recherche devrait aller non?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
alanort Messages postés 16 Date d'inscription samedi 10 avril 2010 Statut Membre Dernière intervention 22 avril 2010
5 avril 2010 à 23:03
j'ai essayé avec ton code pour l'insertion il le lance cette erreur:

Instruction SQL non valide; 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' ou 'UPDATE' attendus.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
5 avril 2010 à 23:25
.... 8 minutes, tu pourrais quand même faire des tests non? j'ai pas ta base sous les yeux

la chaine générée est quasi la même que celle que tu avais, si ton INSERT passait, pas de raison que celui-ci ne passe pas

tu as placé la ligne au bon endroit?
si tu récupères la chaine générée et l'exécute à la main dans access, qu'est-ce que çà donne?

INSERT attendu, c'est bien un INSERT...
0
alanort Messages postés 16 Date d'inscription samedi 10 avril 2010 Statut Membre Dernière intervention 22 avril 2010
5 avril 2010 à 23:43
oui voila merci ca marche nickel maintenant. seulement j'ai pas tres bien compris ton system de format si ca te derange pas stp. ca correspond a quoi en fait quand tu met ca?
{0}, '{1:d}', 'SN', {2}

le '{1:d}'
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
6 avril 2010 à 00:16
depuis la partie gauche de l'expression, les éléments entre {X} seront remplacés dans l'ordre de numérotation par ceux de droite

donc
0 sera remplacé par tbNo.Text
1 sera remplacé par cbDateConsult.Text
2 sera remplacé par idSoinNormal

mais pour 1 on précise directement le format de conversion donc TOUT COMME dans ma première réponse (......), tu peux mettre {1:d} = > DATE SHORT, ou (et je te le conseille) le format universel donc {1:YYYY-MM-DD}

plus d'explication ici (fin de page) :
=VS.80%29.aspx http://msdn.microsoft.com/fr-fr/library/fht0f5be%28v=VS.80%29.aspx


ps : pense à valider la ou les réponses qui ont résolu ton problème

bonne soirée
0
alanort Messages postés 16 Date d'inscription samedi 10 avril 2010 Statut Membre Dernière intervention 22 avril 2010
6 avril 2010 à 00:20
merci beaucoup pour ces eclaircissement et bonne soirée.
0
Rejoignez-nous