[access] Remplissage des champs Oui/Non

impact74 Messages postés 29 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 22 juin 2007 - 4 avril 2007 à 10:20
impact74 Messages postés 29 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 22 juin 2007 - 18 avril 2007 à 11:49
Bonjour! je suis bloqué sur un problème. Je vais tenter d'être claire.

Voila, j'ai une table "utilisation" dans une base access qui
contient des champs Date/heure avec une date et heure de démarrage et
de fin.

ex : datededut->12/12/2006 08:00 ; datefin->12/12/2006 16:35

J'ai une autre table "stat" avec des champ Oui/Non qui correspond à
des tranche d'heure de 10min chacun ex: 0700 ; 0710 ; 0720 ; ... ;1700.

Donc ce que je voudrai faire c'est cocher les champs Oui/Non selon les heures de début et de fin.

ex : un utilisateur se connecte à 10h00 se déconnecte à 11h30 ; il
se reconnecte à 15h00 et se déconnecte à 15h30. Donc dans ma table
"stat" je dois avoir de 1000 à 1130 coché ; rien de 1130 à 1500 et
coché de 1500 à 1530.

Je sais pas si j'ai été claire. Si besoin je pourrai vous donner plus de détails.

Merci d'avance pour vos solutions !!!

25 réponses

cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
4 avril 2007 à 11:15
Tu as déjà une connexion a la base de donnée dans ton prog, car si oui, je pense qu'un

nom_recordset.fields("0700").value = -1     ou true
0
impact74 Messages postés 29 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 22 juin 2007
4 avril 2007 à 11:59
Bonjour Nicko11 et merci pour ta réponse.

Oui j'ai déja une connexion à ma base. Cette ligne de code pourra m'aider.
Mais avant de pouvoir mettre true ou -1 dans un champ, il faut que puisse récupérer d'abord le nom du champ où je doit affecter la valeur true.
C'est-à-dire qu'il faudra lire chaque ligne de ma table "utilisation", récupérer la date et déterminer les tranches horaires qui doit recevoir la valeur true. C'est surtout ça mon problème.
Pourrai tu m'aider?
Merci d'avance.
0
impact74 Messages postés 29 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 22 juin 2007
4 avril 2007 à 13:13
Je viens de me rendre compte que j'ai oublié le mot magique : "STP"
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
4 avril 2007 à 13:52
Je m'en doutais un peu, il te faut un algo qui en fonction de la tranche horaire remplira tes cases.

Pour cela tu fais une boucle for qui part de date_debut (sans le h donc conversion avec fonction Mid ou autre) jusqu'a la date de fin

for i = conversion(date_debut) to conversion(date_fin)

Donc par exemple de 0700 à 1300  -> conversion de 07h00 et de 13h00.

dans ta boucle tu mets :

rs.fields(i).value = true ou -1

et tu rajoute 10 à i.

Bon c'est un petit début et tu aura certainement des modifs a faire mais c'est un peu le genre.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
impact74 Messages postés 29 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 22 juin 2007
4 avril 2007 à 14:02
Ok merci  !!! Je vais faire essayer.
0
impact74 Messages postés 29 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 22 juin 2007
4 avril 2007 à 17:02
J'ai fait mes essais.
Donc, j'arrive à récupérer les tranche d'heure sous le format "0700" par exemple.
J'arrive à remplir ligne par ligne les info supplémentaire nécessaire à ma table, le seul problème c'est la boucle FOR. je sais pas si je l'ai mis au bon endroit mais arrivé à la ligne :
"trancheWS_Rs.fields(i) = -1" il me met ce message d'erreur :
"Erreur d'execution '3265'
Item cannot be found in the collection corresponding to the requested name or ordinal."
 j'ai fait quelque recherche ça viens peut-être du Recordset.
Voici un bout de mon code tu peut me dire ce qui ne va pas stp??

tranche_sql = "SELECT * FROM trancheWS"
   
    Set trancheWS_Rs = cnx.Execute(tranche_sql)
   
    tranchws_sql = "INSERT INTO trancheWS ( PC, app, Datecnx ) values ('" & ordi & "', '" & appli & "', '" & datecnx& "');"
   
    ' Exécution de la requète
    cnx.Execute tranchws_sql

    For i = debcnx To fincnx
    trancheWS_Rs.Fields(i) = -1
    Next
 
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
5 avril 2007 à 08:06
Oui en fait je savais qu'il y aurait un pb car dans le principe c'est comme ca:
trancheWS_Rs.Fields("Nom_Du_Champ") = -1

c'est a dire le nom du champ entre guillements, or la tu mets (a cause de moi) trancheWS_Rs.Fields(0700) -1 par exemple au lieu de trancheWS_Rs.Fields("0700") -1

Or j'ai mis     i        car si je mets     "i"     il va te dire que le champ   i    il ne le connait pas.
 Et   i    on s'en sert dans la boucle comme d'un   entier (sous forme numérique et pas de chaine de caractères).

Donc il faut trouver une solution. En plus du fait que   i   doit augmenter de 10 en 10 et que si tu fais  i = i +10, il risque d'enlever le premier 0 car inutile cad   710 aul ieu de 0710.

Pour te guider, il existe une fonction val(ta_chaine) qui convertie en numérique une chaine et la fonction Format(ta_valeur, "0000") qui te permettra de convertir en une chaine de 4 caracères ( les quatres 0 dans le 2e argument)

Normalement tu devais y arrivé je pense mais si tu as des soucis, post le code et on le fera ensemble.

En esperant que je guide bien.     A++
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
5 avril 2007 à 08:11
Pardon pour la fonction format.   Elle prend en fait en paramètre une valeur et pas une chaine comme j'ai écris mais c'est bien comme ca qu'elle est utilisé.
0
impact74 Messages postés 29 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 22 juin 2007
16 avril 2007 à 14:07
Salut !!

j'ai un peu tardé à répondre je faisais autre chose... Bref !.. pour en revenir à nos moutons...

Comme tu dit le "0" du début dans "0700" disparaît et devient "700". En faisant des essais j'ai pu transformer le format avec la fonction "FORMAT(valeur,"0000") ;  ce qui me donne bien "0700". donc ça c'est bon !!!

si je doit ajouter + 10 à    i     ça marchera pas. parce que arrivé 0750 je doit passer à 0800 et non pas à 0760, 0770...

de plus j'ai toujours la même erreur sur la même ligne (en gras ci-dessous) : 
    
    trch = Format(i, "0000")   ----->    "trch" contient bien 0700

->trancheWS_Rs.Fields(" & trch & ") = -1 
    Next

HEEELLLPP SVP !!!
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
16 avril 2007 à 14:45
Salut,

content de savoir que tu as reussi. Donc pour le cas de XX60 auquel je n'avais pas pensé, tu peux proceder de la maniere suivante :

La fonction Mid te permet d'extraire une partie de ta chaine. Je vois que format, ne t'as pas poser de pb alors je te laisse voir la fonction Mid.

Ex: 

if mid(i,3,1) = 5 then   'on reccupere le 3e caractere de i
   trch = Format(i+50, "0000") 'pour  passer a l'heure suivante    genre 0750 --->  0800
else
   trch = Format(i+10, "0000")
end if

   
0
impact74 Messages postés 29 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 22 juin 2007
17 avril 2007 à 11:17
Merci pour ta reponse rapide comme l'élair !!!

j'ai compris le principe de la fonction Mid, mais j'ai toujour le problème sur ma ligne :

trancheWS_Rs.Fields( "nom_du_champ").Value = -1  (j'ai essayé avec et sans le ".Value" c'est pareil)

Et puis il y a aussi le fait que FOR incrémente de 1 et arrivé à Mid il fait +10 mais avec un décalage de 1 et plus.
ex : 0700 après le Mid renvoie 0710 ok. FOR incrémente de 1 ça devient 0701, Mid renvoie 0711. ensuite FOR ->0702, Mid->0712 ; puis FOR ->0703, Mid->0713 et ainsi de suite.
Je sais pas si j'ai été claire.
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
17 avril 2007 à 11:29
Salut,

Tu es tres clair, pas de soucis etquand tu as l'occasion repost ta boucle pour voir les modifs.

Pour la boucle for, je m'y attendais un peu car je crois que c'est le Next qui pose probleme (vérifie en executant ligne a ligne car je crois qu'il fait i=i+1 mais a vérifier).

Pour le pb de .value, j'essaie et je te tiens au courant.
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
17 avril 2007 à 11:31
En attendant, fais un test avec "true" a la place de "-1".
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
17 avril 2007 à 11:37
Bon, pour moi true et -1 fonctionne, je suis en VBA mais bon je me souviens avoir fais pareil en VB6.

Quand tu dis ca marche pas, tu veux dire que ca fait une erreur ou que la valeur de la table est pas bonne. Car il ne faut pas oublier le :
trancheWS_Rs.update
ou
trancheWS_Rs.updatebatch
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
17 avril 2007 à 11:39
trancheWS_Rs.Fields( "nom_du_champ").Value


Attention aussi, il y a un espace en trop, je sais pas si c'est ca aussi. J'attend ta reponse.

A+
0
impact74 Messages postés 29 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 22 juin 2007
17 avril 2007 à 14:44
Merci pour tout les conseils que tu ma donné !

Alors j'ai donc fait des essais ligne par ligne; en conclusion je crois que c'est ma boucle qui va pas.
il UPDATE le premier enregistrement il incrémente bien comme je veux de 10 ou de 50 selon le 1er enregistrement, tout va bien jusqu'à NEXT. quand il reprend la boucle   " j " recoit +1
voici le code  :
il y a aussi du langage SQL concaténé avec des variables VB (en gras)
Merci de m'aider STP...
___________________________________________________________
tranche_sql = "SELECT * FROM trancheWS"
    Set trancheWS_Rs = cnx.Execute(tranche_sql)
   
    'On se place au premier enregistrement concerné
    trancheWS_Rs.MoveFirst
    ' Tant qu'on a pas atteint le dernier enregistrement :
    Do While trancheWS_Rs.EOF = False
   
    For j = debcnx To fincnx            '''---> CE SACRE FOR !!!
    trch = Format(j, "0000")
   
    ' Requête pour dupliquer utilappjour dans utilapparch    Update_tranch " UPDATE trancheWS SET trancheWS.[" & trch & "] True WHERE ((trancheWS.[" & trch & "])=False AND (trancheWS.[PC])='" & ordi & "' AND (trancheWS.Datecnx)= #" & htranch & "#);"
    MsgBox Update_tranch
    ' Exécution de la requète
    cnx.Execute Update_tranch
    If Mid(trch, 3, 2) = 50 Then           'on reccupere le 3e caractere de i
    trch = Format(trch + 50, "0000")   'pour  passer a l'heure suivante genre 0750 ->0800
    Else
   trch = Format(trch +10, "0000")
   End If
    ' Incrémentation du cumul
            nbenreg = nbenreg + 1
        ' On se place a l'enregistrement suivant
            trancheWS_Rs.MoveNext
     Next
    Loop ' Boucle de manipulation de la base de donnees
_____________________________________________________
0
impact74 Messages postés 29 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 22 juin 2007
17 avril 2007 à 14:48
dans le code ne tiens pas compte du commentaire :
"Requête pour dupliquer utilappjour dans utilapparch"
j'avais fais un copier coller c'est resté ...
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
17 avril 2007 à 15:30
Je pense qu'en fait, il serait mieux de faire une boucle while du genre (j'ai enlever ce qui ne m'interessait pas:

    j = debcnx 

    while (j <= fincnx)            '''---> CE SACRE FOR !!!
              trch = Format(j, "0000")
              If Mid(trch, 3, 2) = 50 Then           'on reccupere le 3e caractere de i    ICI LE 3e SUFFIT NORMALEMENT
              'If Mid(trch, 3, 1) = 5 Then         'Mais comme tu veux, apres tout, c'est pareil
                     trch = Format(trch + 50, "0000")   'pour  passer a l'heure suivante genre 0750 ->0800
              Else
                     trch = Format(trch +10, "0000")    'pour  passer a la tranche suivante genre 0750 ->0710
              End If
              
               j = val(trch)         'On fais la conversion inverse   genre   0750 -->>   750    
        
     Wend

J'espere que ca ira cette fois
0
impact74 Messages postés 29 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 22 juin 2007
17 avril 2007 à 16:33
WOOHHOOO !!!!  C'EST BON !!!!

Merci mille fois pour ton aide !!!!  Avec WHILE c'est mieux en fait.
Juste un dernier truc pour ton information, dans la ligne : while (j <= fincnx) il fallais enlever les paranthèses CAD : while j <= fincnx et puis déclarer   j   et   trch   en tant qu'Integer

Encore merci !!! je vait pouvoir avancer maintenant MERCIII !!!!
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
18 avril 2007 à 07:56
Bon bah c'est cool.


Un peu étonné pour les parantheses mais bon, l'important c'est que ca marche. Bonne chance pour ton projet.
0
Rejoignez-nous