Je récupère une variable de type Date a partir d’un control DateTime sous forme ‘jj/mm/aaaa’ ; j’enregistre ça dans une table (Base de données Access) ; mais j’ai constaté que la forme de la date change ; car dans la table elle devienne ‘mm/jj/aaaa’![]()
Je récupère une variable de type Date a partir d’un control DateTime sous forme ‘jj/mm/aaaa’ ; j’enregistre ça dans une table (Base de données Access) ; mais j’ai constaté que la forme de la date change ; car dans la table elle devienne ‘mm/jj/aaaa’![]()
c'est normal ,c'est la norme English pour écrire la date dans Access 'mm/jj/aaaa'.
c'est quoi le probleme ? est ce que tu le récupères et l'affichage est faussé ?
Si tu aimes ma Réponse pense à cliquer sur
Visiter mon blogEt mes codes sources
- La simulation de navigation dans internet explorer avec Interop.SHDocVw
- Protéger mes données de configuration dans une dll compilée
exacte, comment faire pour la convertir en format jj/mm/aaaa ?
tu peux faire
il y'a plusieurs exemples dans cette page
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 // Display using date format information from hr-HR culture DateTime thisDate = new DateTime(2008, 3, 15); DateTimeFormatInfo fmt = (new CultureInfo("fr-FR")).DateTimeFormat; Console.WriteLine(thisDate.ToString("dd/mm/yyyy", fmt)); // Displays 15.3.2008
y'a aussi msdn
Si tu aimes ma Réponse pense à cliquer sur
Visiter mon blogEt mes codes sources
- La simulation de navigation dans internet explorer avec Interop.SHDocVw
- Protéger mes données de configuration dans une dll compilée
ce que je cherche exactement: je récupère une date d'un control DateTime et puis la comparer avec autre date récupérer de la table (base de données)
donc c'est dans ton code c# tu faire une comparaison simple t'aura pas de problème vu que dans c# y'a le standard ,c'est dans sql que tu compares les deux dates ?
Si tu aimes ma Réponse pense à cliquer sur
Visiter mon blogEt mes codes sources
- La simulation de navigation dans internet explorer avec Interop.SHDocVw
- Protéger mes données de configuration dans une dll compilée
est ce que c possible de me donner un petit exemple???? je suis débutant![]()
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 using System; using System.Data; using System.Data.SqlClient; namespace MyNameSpace { public class Test { public Boolean SameDate(DateTime date) { using (SqlConnection connection = new SqlConnection("UneChaineDeConnexion")) { /* Option 1 : Tester la date dans le programme */ using (SqlCommand command = new SqlCommand("SELECT ChampDate FROM UneTable WHERE Condition", connection)) { connection.Open(); command.CommandTimeout = 0; SqlDataReader reader = command.ExecuteReader(); if (reader.Read()) return (reader.GetDateTime(0) == date); else return false; } /* Option 2 : Tester la date dans la base */ using (SqlCommand command = new SqlCommand("SELECT COUNT(1) FROM UneTable WHERE Condition AND ChampDate=@UneDate", connection)) { connection.Open(); command.CommandTimeout = 0; SqlParameter parameter = command.Parameters.Add("UneDate", SqlDbType.DateTime); parameter.Value = date; SqlDataReader reader = command.ExecuteReader(); if (reader.Read()) return (reader.GetInt32(0) > 0); else return false; } } } } }
Mes tutoriels
Avant de poster :
- F1
- FAQ
- Tutoriels
- Guide du développeur Delphi devant un problème
merci pour l'exemple
mais la date récupérée de la base possède le format : MM/DD/YYYY
alors que le date que j'ai récupérée d'un contrôle DateTime est de format DD/MM/YYYY
le système ne signal aucune erreur
mais le résultat est faux
Mes tutoriels
Avant de poster :
- F1
- FAQ
- Tutoriels
- Guide du développeur Delphi devant un problème
Bonjour,
Je pense que tu te focalise un peu trop sur le format de tes dates.
Pour faire simple, un DateTime est un type et n'a pas de format à la base (je simplifie), c'est quand tu affiche la date du DateTime que tu lui applique un format afin qu'elle soit lisible et compréhensible par l'utilisateur.
Si tu veux comparer 2 dates, il faut déjà qu'elle soit du même type (DateTime étant le plus facile pour les dates en c#), je ne serais pas étonné que tu ne compare pas 2 dates mais 2 chaines de caractères (je peux me tromper).
Si tu regarde bien l’exemple de popo, c'est exactement ce qu'il fait, soit en convertissant la donnée venant de la base de données en DateTime (reader.GetDateTime(0)), soit en donnant à la base de données une donnée de type DateTime (SqlDbType.DateTime), mais pour que ça fonctionne, encore faut-il avoir une donnée de type date en base de données.
Montre nous un peu ton code de comparaison des dates pour que l'on y voit plus clair.
Bonne continuation.
je répète toujours, que je suis débutant
autrement dit : 01/05/2014 saisie au clavier devient 05/01/2014 dans la table
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 //La requête denregistrement dans une base de données Access : cmd.CommandText = "INSERT INTO table (CodeF,[Date], , , , ) VALUES ('" + CCode.Text + "', #" + dateTimePicker1.Value.Date + "# , , , , )"; //Je récupère une date dateTimePicker1.Value.Date sous le format JJ/MM/AAAA //après enregistrement dans la table, je constate qu elle est sous le format MM/JJ/AAAA //La requête daffichage "SELECT where condition1 and (CommandeF.Date ) between #" + DateDebut2.Value + "# and #" + DateFin2.Value+ "#"); //La date récupérée de la table «CommandeF.Date » sous format : MM/JJ/AAAA //Les dates récupérées de lIHM « DateDebut2.Value » sous format : JJ/MM/AAAA
Bonjour et bonne année,
Autant pour moi, je n'avais pas vu que tu étais sous Access, ce qui change un peu (beaucoup) la donne.
N'ayant pas Access, je ne peux pas trop faire de test, mais je te propose une solution qui devrait fonctionner (enfin j'espère), mais qui n'est pas propre.
Dans le cas de tes requêtes, essaye de forcer le format de tes dates.
Comme je le disais dans mon message précédent, tes dates sont bien 'transformée' en chaîne de caractères en utilisant le format locale ("JJ/MM/AAAA"), ensuite Access les récupère en utilisant le format "MM/JJ/AAAA".
Code : Sélectionner tout - Visualiser dans une fenêtre à part DateDebut2.Value.Date.ToString("MM/dd/yyyy")
Bon, je ne vais pas épiloguer sur Access mais je te conseillerais fortement de passer par des requêtes paramétrées, plutôt que par de la concaténation de chaines de caractères pour construire tes requêtes, tu y gagnera grandement.
Tu peux te baser sur l'exemple de popo (option 2) pour ça.
Et tu peux également lire un peu la FAQ d'Access qui a une partie Date plutôt instructive.
Bonne continuation.
une date que ca soit en c# ou dans access n'a pas de format de type jj mm ou autre
c'est un format standard international de stockage sur 8 octets
ce n'est que son affichage en string (donc par conversion) qui a un format (jj/mm/yyyy ou autre)
quand tu passe de c# à access il ne faut pas convertir la date en string, et réciproquement ca peut amener à des erreurs
il est possible de faire transiter la date au format date (8 octets) avec les OleDbParameter
parce que si tu concatènes comme tu le fais, c# va transformer la date en string, et pour ce faire il demande à windows quel est le format (ceci est donc paramétrable et dépende la machine)
il y a donc des chances que ca arrive dans un format autre que ce qu'access attend, car lui en recevant la date en string va être obligé de la convertir en date (si c'est bien une colonne de type date)
il faut un code dans le genre
ainsi il ne peut pas y avoir de problème
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 cmd.commandtext = "insert into table (col1, coldate) values (?col1, ?coldate)"; cmd.parameters.Add("?col1").value = me.Textbox1.text; cmd.parameters.Add("?coldate").value = me.dtpicker1.date;
et même si access t'affiches mm/dd/yyyy ce n'est pas un soucis, c'est lui qui converti les date en string de la sorte, tu peux faire ce que tu veux dans ton programme
de retour apres une semaine d'arrêt
est ce que c'est possible d'etre encore pus clair dans ta réponse?? je suis débutant .
merci a l'avance
il y a l'explication et le code qui va avec je ne vois pas comment être plus clair, peut être est-ce à toi de comprendre ou au moins précise ce que tu ne comprends pas
quand on concatène une requete avec des valeurs dedans c'est un string qui est envoyé à la base de données
mais on peut à la place mettre des variables dans ce string, et déclarer les paramètres et leurs valeurs, ainsi un string plus des paramètres sont envoyés à la base de données qui utilise ces variables typées
voila une partie du code; avec ça l'enregistrement des dates dans la table respecte la forme 05-janv-2014
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 DateTime date_commande = new DateTime(); CultureInfo culture = new CultureInfo("fr-FR"); date_commande = DateTime.Parse(dateTimePicker1.Value.ToString(), culture); // On met la date au format anglais if (dateTimePicker1.Value.Date.Day > 12) { date_commande = dateTimePicker1.Value; } else { culture = new CultureInfo("en-US"); // On crée le contexte de culture "en-US" date_commande = DateTime.Parse(dateTimePicker1.Value.ToString(), culture); // On met la date au format anglais } System.Data.OleDb.OleDbConnection conn1 = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;Data Source= DBK.mdb;"); System.Data.OleDb.OleDbCommand cmd = new OleDbCommand(); cmd.CommandType = System.Data.CommandType.Text; cmd.CommandText = "INSERT INTO CommandeF (Code,[Date], , , Obs1) VALUES ('" + CCode.Text + "',#" + date_com + "# ,'" + + "','" + + "' , '" + CObs1.Text + "')"; cmd.Connection = conn1; conn1.Open(); cmd.ExecuteNonQuery(); // recuperer le numero de commande auto incrementer conn1.Close();
Bonjour,
Au risque de répéter ce que 2 membres ont déjà dit, il faut utiliser les requêtes paramètrées. Voir Tuto.
Traductions d'articles :
La mémoire en .NET - Qu'est-ce qui va où ?
Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.
Bonjour,
Bon, Last Try.
Il faut que tu oublie une bonne fois pour toute cette histoire de format de date, c'est juste là pour l'utilisateur.
Voilà ce que pourrait être ton bloque de code.
Tu remarqueras que c'est pratiquement ce que t'on fait popo et Pol63.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 using (System.Data.OleDb.OleDbConnection cnx = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;Data Source= DBK.mdb;")) // Création de la connexion { using (System.Data.OleDb.OleDbCommand cmd = cnx.CreateCommand()) // Création de la commande à partir de la connexion { cmd.CommandType = System.Data.CommandType.Text; cmd.CommandText = "INSERT INTO CommandeF (Code,[Date]) VALUES (?code,?date)"; // Ta requête de base avec les paramètres ?code et ?date cmd.Parameters.Add("?code", System.Data.OleDb.OleDbType.VarChar).Value = CCode.Text; // On ajoute à la commande le paramètre ?code, de type VarChar avec comme valeur CCode.Text cmd.Parameters.Add("?date", System.Data.OleDb.OleDbType.Date).Value = dateTimePicker1.Value.Date; // On ajoute à la commande le paramètre ?date, de type Date avec comme valeur dateTimePicker1.Value.Date cnx.Open(); // Ouverture de la connexion cmd.ExecuteNonQuery(); // Exécution de la requête } }
C'est quand même plus lisible et compréhensible que ton code, non ?
Tu dois retenir une chose concernant les paramètres avec OleDB et Access (à ce que j'en ai lu), c'est que le nom des paramètres est ignoré, donc il faut toujours que tes paramètres soit ajoutés dans l'ordre ou tu les attend dans la requête.
Un dernier conseil, utilise à outrance la touche F1 dans VS, MSDN est pas trop mal fait et donne beaucoup d'exemples.
Bonne continuation.
Partager