Bonjour à tous,
J'ai une connexion ADO.
J'aimerais connaître le format des dates que je dois utiliser (dmy, ymd, ...) afin d'exécuter par exemple:
Merci.Code:set rec = conn.Execute("select * from t where d = " & Format(maDate,"format??????"))
Version imprimable
Bonjour à tous,
J'ai une connexion ADO.
J'aimerais connaître le format des dates que je dois utiliser (dmy, ymd, ...) afin d'exécuter par exemple:
Merci.Code:set rec = conn.Execute("select * from t where d = " & Format(maDate,"format??????"))
:D salut !
Il y a bcp de post sur ce sujet !
Notament :
http://<br /> http://www.developpez...<br /> <br />
Oui mais "#mm/dd/yyyy#" ne fonctionne que pour ACCESS.
Sous SQLServer le format est 'yyyy/mm/dd'.
Sous MSDE d'un pack Office Français est 'dd/mm/yyyy'.
L'intérêt de la couche ADO est que le même code fonctionne quelque soit le SGBD.
:D hello !
Sorry , je croyais que tu cherchais juste pour Access :oops:
Si je comprends, tu voudrais un codage de date universel sous ADO pour n'importe quelle SGBD ?
Là, je cale car actuellement, je n'utilise qu'Access et bientôt SQL Serveur mais je reste tj dans un seul type de SGBD :wink:
Normalement, le format universel pour les dates est yyyymmdd, malheureusement Access possède un format propriétaire... qui le met à part de la plupart des autres SGBD.
@+
Mais alors comment fait la couche ADO pour ne pas se tromper lorsqu'on affecte une date dans un champ d'un recordset :?: :!:
Quelque soit le SGBD, l'affectation est correcte.
Bonjour
Je pense qu'il faut systématiquement transformer une date en long (CLng(madate)) dès que l'on doit traiter des dates. Ainsi, plus de problème de format lors des calculs et autres emplois de date. Il n'y a plus qu'a définir le format voulu dans l'interface (textbox par exemple).
Oui mais quand il faut exécuter une requête SQL avec une condition (where) sur une date :?:
Un pro de l'ADO ne pourrait-il pas me donner son point de vue :?:
Et surtout comment déterminer le format des dates d'une connexion :?:
Les SGBD ne gèrent pas les formats de dates de la même manière.
Donc seule l'accès à la valeur stockée fonctionne pour tous.
Les champs de type Date ou Time attendent un long
Les champs de type DateTime ou TimeStamp attendent un réél.
Il existe des fonction DateSerial et TimeSeriel qui permettent la conversion.
Oui mais mon objectif n'est pas d'affecter une date dans un champ d'un recordset mais de trouver par exemple toutes les ventes dont la date est antérieure à une date donnée.
Sur une base Access(#mm/dd/yyyy#)SQL server US('yyyy/mm/dd')Code:rec.Open "select * from vente where date_vente <= #" & Format(maDate,"mm/dd/yyyy") & "#"
MSDE FR('dd/mm/yyyy')Code:rec.Open "select * from vente where date_vente <= '" & Format(maDate,"yyyy/mm/dd") & "'"
Code:rec.Open "select * from vente where date_vente <= '" & Format(maDate,"dd/mm/yyyy") & "'"
Je viens de trouver une solution:
Ainsi, quelque soit le SGBD, les conditions sur les dates fonctionnent.Code:
1
2 rec.Filter("date_vente <= #" & Format(maDate,"mm/dd/yyyy" & "#") rec.Open "vente", ................
Bonjour,
Je ne vais pas te donner LA solution, mais je pense déjà que tu devrais mettre le code dans une fonction, genre
Cette fonction marchait avec Access.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 '***************************************************** ' But: Formate un variant contenant une Date dans le format de date du SGBD ' yyyy-mm-dd ' Parametres: vTheDate a variable of type Date to be formated 'Modifier cette fonction lors d'un changement de SGBD '***************************************************** Public Function f_Datev2SGBD_S(ByVal vTheDate As Variant) Dim sRetour As String If IsNull(vTheDate) Then sRetour = " NULL " Else sRetour = Format$(vTheDate , "yyyy-mm-dd") End If f_Datev2SGBD_S = sRetour End Function
Ainsi tu pourrais changer de fonction quand tu changes de SGBD, et si tu trouve LA Solution tu la mets en place dans la fonction.
Il me semble que sur le forum SQL (ou MS SQL sErver) SQL pro a fait des propositions sur le format des dates (le titre du post était [debutant] [VB] Format de date.
Sinon pour SQL Server et MSDE, tu peux essayer de définir pour l'utilisateur de connexion à ta base, un format de date (par l'intermédiaire de son langage sp_default language , ou sp_configure).
A+
Soazig
ce que je voulais dire c'est que :
c'est équivalent àCode:SELECT * FROM Employés WHERE Employés.[Date de naissance]>21916;
Mais c'est indifférent au format de la dateCode:SELECT * FROM Employés WHERE Employés.[Date de naissance]>#01/01/60#;
bidou, tu es sûr que tous les SGBDs codent leurs dates à partir de la même "date 0" ?
Tout ceux que j'ai essayé sauf 4D
Et au niveau des performances, quel est le code le plus rapide ?
Code:
1
2
3
4 rec.Open "select * from vente where date_vente <= " & CLong(maDate) rec.Filter("date_vente <= #" & Format(maDate,"mm/dd/yyyy" & "#") rec.Open "vente", ................
Ca c'est un vaste problème, car cela dépend du curseur et des fonctionnalités que l'on souhaite por son recordset.
Mais disons que pour une extraction simple le code SQL va toujours plus vite.