[VBA ACCESS] comparaison de Dates en SQL
Lionrouge
-
avandenb -
avandenb -
Bonjour à tous,
Je suis nouveau en programmation VBA, et j'ai récemment été confronté à un problème de comparaisons de Dates, que je vais tenter d'expliquer le plus clairement possible :
Je code donc sous VBA Access, et j'importe des données depuis un fichier Excel, pour les intégrer à une table sous Access
Voilà une partie de mon code en simplifié et commenté :
Résultat de mon code : dans ma table les champs codeAct et période sont bien renseignés, mais les autres sont à 0.
Le problème porte sur période = #" & periodeTmp & "#" qui n'est jamais Vrai alors qu'il le devrait puisque je teste que sur 1 date...
La date est de la forme "2010 Janvier" sous Excel mais affichée "01/01/2010" dans ma table Couts.
En remplaçant le type de période dans la base par Texte ça marche parfaitement, seulement il faut que ce soit en Date/Heure...
Comment tester l'égalité de ces dates ?
J'espère avoir été assez clair, mais si ce n'est pas le cas, n'hésitez pas à me demander des précisions.
Si quelqu'un a une solution ou au moins une idée pour m'aider, je l'en remercie grandement =)
Lionrouge
ps : c'est mon premier post, j'espère ne pas avoir fait de bourde, j'ai bien écumé les forums sans trouver de réponse, alors je mise tout sur vous =p
Je suis nouveau en programmation VBA, et j'ai récemment été confronté à un problème de comparaisons de Dates, que je vais tenter d'expliquer le plus clairement possible :
Je code donc sous VBA Access, et j'importe des données depuis un fichier Excel, pour les intégrer à une table sous Access
Voilà une partie de mon code en simplifié et commenté :
'avec maBD = ma Base de Données sous Access, RS = mon recordSet, et Couts une de mes tables 'la Table Couts est composée des Champs codeAct (Texte), période (Date/Heure) et plusieurs autres (Numérique) 'la variable codeAct est définie comme String et periodeTmp comme Date Set AppExcel = GetObject(, "Excel.Application") Set Classeur = AppExcel.ActiveWorkbook Set Feuille_CGlobal = Classeur.Worksheets(1) Set Rs = maBD.OpenRecordset("SELECT * FROM Couts", dbOpenDynaset) With Rs For i = 2 To rowMax 'pour chaque ligne de ma feuille Excel 'Je récupère les codes Activité de la première colonne un par un codeActTmp = Feuille_CGlobal.Cells(i, 1) 'et je récupère la Date qui est de la forme : "2010 Janvier" periodeTmp = Feuille_CGlobal.Cells(1, 2).Value 'j'ajoute ces données à ma table Couts .AddNew .Fields("codeAct") = codeActTmp .Fields("période") = periodeTmp .Update 'Ensuite j'ai plusieurs autres champs Numériques à renseigner grace à des requetes SQL de cette forme : reqSQL = "UPDATE Couts SET monChamp1 = '" & Feuille_CGlobal.Cells(i, 4) & "' WHERE codeAct = '" & codeActTmp & "' AND période = #" & periodeTmp & "#" Set QDef = ConnectBD.CreateQueryDef("", reqSQL) ExecuteQueryDef QDef, Rs reqSQL = "UPDATE Couts SET monChamp2 = '" & Feuille_CGlobal.Cells(i, 6) & "' WHERE codeAct = '" & codeActTmp & "' AND période = #" & periodeTmp & "#" Set QDef = ConnectBD.CreateQueryDef("", reqSQL) ExecuteQueryDef QDef, Rs 'etc... Next i End With
Résultat de mon code : dans ma table les champs codeAct et période sont bien renseignés, mais les autres sont à 0.
Le problème porte sur période = #" & periodeTmp & "#" qui n'est jamais Vrai alors qu'il le devrait puisque je teste que sur 1 date...
La date est de la forme "2010 Janvier" sous Excel mais affichée "01/01/2010" dans ma table Couts.
En remplaçant le type de période dans la base par Texte ça marche parfaitement, seulement il faut que ce soit en Date/Heure...
Comment tester l'égalité de ces dates ?
J'espère avoir été assez clair, mais si ce n'est pas le cas, n'hésitez pas à me demander des précisions.
Si quelqu'un a une solution ou au moins une idée pour m'aider, je l'en remercie grandement =)
Lionrouge
ps : c'est mon premier post, j'espère ne pas avoir fait de bourde, j'ai bien écumé les forums sans trouver de réponse, alors je mise tout sur vous =p
A voir également:
- [VBA ACCESS] comparaison de Dates en SQL
- Comparaison million milliard - Accueil - Technologies
- Nombre de jours entre deux dates excel - Guide
- Acer quick access - Forum logiciel systeme
- Quick Access service ✓ - Forum PC portable
- Désinstaller ACER QUICK ACCESS - Forum Logiciels
1 réponse
Salut Lionrouge,
Je ne connais pas Access (je bosses essentiellement sur SQL serveur), je ne te serai peut être pas d'une grande utilité...
J'ai 2 suggestions a te donner:
1- Est ce qu'il n'y a pas une fonction convert, que tu puisses utiliser dans ta requete : AND Période = CONVERT(DATE, #" & PeriodeTmp & "#)
2-Tu devrais peut être convertir ta données PeriodeTmp, si celle ci a toujours la même "forme" (2010 Janvier, 2011 Mars, ...) tu peux simplement la convertire en JJ/MM/AAAA...
Je ne connais pas Access (je bosses essentiellement sur SQL serveur), je ne te serai peut être pas d'une grande utilité...
J'ai 2 suggestions a te donner:
1- Est ce qu'il n'y a pas une fonction convert, que tu puisses utiliser dans ta requete : AND Période = CONVERT(DATE, #" & PeriodeTmp & "#)
2-Tu devrais peut être convertir ta données PeriodeTmp, si celle ci a toujours la même "forme" (2010 Janvier, 2011 Mars, ...) tu peux simplement la convertire en JJ/MM/AAAA...