Comment récupérer une valeur dans un champs d'une table.

Résolu
mjsm Messages postés 19 Date d'inscription mardi 5 janvier 2010 Statut Membre Dernière intervention 6 avril 2016 - 12 oct. 2010 à 16:33
mjsm Messages postés 19 Date d'inscription mardi 5 janvier 2010 Statut Membre Dernière intervention 6 avril 2016 - 12 oct. 2010 à 22:30
Bonjour
J'ai fait une base de données pour gérer des cours.
Dans le module ??Jour de Pâques?? je dois déclarer DPannee qui est la seconde année de la période scolaire.
L'année en question se trouve dans la table [T_Vacances_Scolaires] où le champ [PerScol_Fin] contient une date du style 30/06/2011?
Cette table ne contient qu'une seule ligne.

J'ai fait ce petit bout de programme qui refuse de fonctionner : erreur 13 ? Incompatibilité de type à la ligne set rst = currentDp?.

J'ai essayé beaucoup de choses, consulté tout ce que j'ai trouvé?.
Bref : Pouvez-vous m?aider ? D'avance merci
---------------------

Private Sub Commande43_Click()
Dim DPannee As Date ? In fine sera égal à l'année N°2 de la période scolaire

Dim rst As DAO.Database
Set rst = CurrentDb.OpenRecordset("SELECT [PerScol_Fin] FROM [T_Vacances_Scolaires]WHERE [PerScol_Fin] < #01/01/2099#", dbOpenSnapshot)

DPannee = rst(Year("PerScol_Fin"))

MsgBox DPannee

End Sub ? fin provisoire le programme continue avec le calcul de la date de Pâques que j'ai trouvé sur le net.

Dim G, C, C_4, E, H, K, P, Q, I, B, J1, J2, R
Dim Dpaques as date

G = DPannee Mod 19
C = DPannee \ 100
C_4 = C \ 4
E = (8 * C + 13) \ 25
H = (19 * G + C - C_4 - E + 15) Mod 30
K = H \ 28
P = 29 \ (H + 1)
Q = (21 - G) \ 11
I = (K * P * Q - 1) * K + H
B = DPannee \ 4 + DPannee
J1 = B + I + 2 + C_4 - C
J2 = J1 Mod 7
R = 28 + I - J2
If R <= 31 Then
DPaques = DateValue(CStr(R) & "/3/" & CStr(DPannee))
Else
DPaques = DateValue(CStr(R - 31) & "/4/" & CStr(DPannee))
End If

MsgBox DPaques
Rst.Close
Set rst = Nothing
End Sub

2 réponses

cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
12 oct. 2010 à 21:05
Salut

Erreur 13, mais sur quelle ligne ?

Si ta table n'a qu'un seul champ, pourquoi avoir utiliser une clause WHERE ?
A mon avis, tu peux l'enlever.

Un RecordSet (rst) n'est pas un tableau, c'est un RecordSet - Lapalisse (1470-1525).
Méthode de lecture d'un champ (facilement trouvable dans l'aide) :
DPannee = Year(rst.Fields("PerScol_Fin").Value)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
mjsm Messages postés 19 Date d'inscription mardi 5 janvier 2010 Statut Membre Dernière intervention 6 avril 2016
12 oct. 2010 à 22:30
Merci Jack
Votre solution a fonctionnée du premier coup ! Super !

Je mets le programme qui fonctionne ci-dessous pour info

Private Sub Commande43_Click()

Dim rst As DAO.Recordset 'Database
Set rst = CurrentDb.OpenRecordset("SELECT [PerScol_Fin] FROM [T_Vacances_Scolaires]")
DPannee = Year(rst.Fields("PerScol_Fin").Value)

'MsgBox DPannee

'MsgBox "test ok", vbInformation, "ok"

Dim G, C, C_4, E, H, K, P, Q, I, B, J1, J2, R

G = DPannee Mod 19
C = DPannee \ 100
C_4 = C \ 4
E = (8 * C + 13) \ 25
H = (19 * G + C - C_4 - E + 15) Mod 30
K = H \ 28
P = 29 \ (H + 1)
Q = (21 - G) \ 11
I = (K * P * Q - 1) * K + H
B = DPannee \ 4 + DPannee
J1 = B + I + 2 + C_4 - C
J2 = J1 Mod 7
R = 28 + I - J2
If R <= 31 Then
DPaques = DateValue(CStr(R) & "/3/" & CStr(DPannee))
Else
DPaques = DateValue(CStr(R - 31) & "/4/" & CStr(DPannee))
End If

' MsgBox DPaques
rst.Close
Set MaDate = Nothing
End Sub
3