[VBA ACCESS] comparaison de Dates en SQL

Fermé
Lionrouge - 1 juin 2011 à 15:33
 avandenb - 1 juin 2011 à 15:56
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é :

'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:

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...
0