impact74
Messages postés29Date d'inscriptionvendredi 17 juin 2005StatutMembreDernière intervention22 juin 2007
-
4 avril 2007 à 10:20
impact74
Messages postés29Date d'inscriptionvendredi 17 juin 2005StatutMembreDernière intervention22 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.
impact74
Messages postés29Date d'inscriptionvendredi 17 juin 2005StatutMembreDernière intervention22 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.
impact74
Messages postés29Date d'inscriptionvendredi 17 juin 2005StatutMembreDernière intervention22 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??
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 20073 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.
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 20073 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é.
impact74
Messages postés29Date d'inscriptionvendredi 17 juin 2005StatutMembreDernière intervention22 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
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 20073 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
impact74
Messages postés29Date d'inscriptionvendredi 17 juin 2005StatutMembreDernière intervention22 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.
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 20073 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.
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 20073 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
impact74
Messages postés29Date d'inscriptionvendredi 17 juin 2005StatutMembreDernière intervention22 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
_____________________________________________________
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 20073 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
impact74
Messages postés29Date d'inscriptionvendredi 17 juin 2005StatutMembreDernière intervention22 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 !!!!