Correspondance textbox & ligne de bdd

patl76 Messages postés 69 Date d'inscription jeudi 21 novembre 2002 Statut Membre Dernière intervention 21 mai 2013 - 26 févr. 2004 à 10:25
plaineR Messages postés 237 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 6 décembre 2005 - 27 févr. 2004 à 14:19
Salut tout le monde !!

J' aurais voulut regler un p' tit probleme :
Je veux tracer des textbox par rapport a un axe des ordonnées : chaque text represente un nom et je veux les placer en fonction des dates contenue ds la bdd.
La largeur & la position .left varient avec ces dates...
Pour le premier enregistrement ca va bien...
Par contre je n' arrive pas a recuperer les autres lignes restantes...

Quelqu' un a une idee peut etre ????

a+

12 réponses

plaineR Messages postés 237 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 6 décembre 2005 4
26 févr. 2004 à 12:40
Mets nous ton code on y verra peut-être plus clair...
0
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
26 févr. 2004 à 12:44
franchement j'ai pas tout compris, tu travailles dans quoi ???

tu veux connaitre la largeur d'une date ? en taille du texte de ta date ?
le nom de tes textes, c'est le name en prog ?
Arrive tu a recuperer toutes les dates?
Bdd c'est une base de données? i.e une fichier mdb d'acces ?
si c'est le cas accedes tu bien a ta base de données ?

peux tu detailler un peux plus stp afin de savoir ou ca bloque ? si c'est le traitement de la base, si c'est dans l'interpretation des dates si c'est dans la mise en forme des textbox et eventuellement expliquer par rapport aux dates comment tu geres tes placement de textbox.
liquide
0
patl76 Messages postés 69 Date d'inscription jeudi 21 novembre 2002 Statut Membre Dernière intervention 21 mai 2013
26 févr. 2004 à 16:38
Mon code est , je le crains un peu en bazard et cela m' etonnerai que vous arriviez a tout capter sans difficultées...

Le truc c' est que j' ai une table contenant des stagiaires:
J' ai différent champs : ceux qui sont consernes pour l' intant c' est : Nom , DateArriv & DateFin..

Pour le nom du stagiaire a mettre ds le text box j' ai trouvé c' est bon !!

Pour ce qui est du placement des text par rapport a l' axe j'utilise la methode suivante:
( mon axe X equivaut a 12 mois: 12mois->540 pixel donc 1 jour -> environ 1.5 pixel)

Je fais la difference en jours entre la date de debut de stage contenue ds le champ DateArriv & le 1er janvier 2004..
Le nombre de jours obtenus me donne le decalage du txt par rapport a l' axe Y (.left=difference*1.5)...

Ensuite je fais la diff en jour cette fois entre DateArriv & DateFin pour avoir la durée du stage et donc la largeur en pixel du txtbox (.width=nbjour*1.5)...

Ce procede fonctionne bien pour le premier mais les txt suivant garde les valeurs du 1er txtbox ...

ATTENTION VLA LE CODE :
Private Sub btnAffich_Click()
Dim un As String

' *************** references : *************************
' 1 an -> 540 pixels pour x
' 1 jour -> environ 1.5 pixel
' x->dates
' y->noms

' ******************** tracé des 2 axes x et y sur la feuille **********************
' affichage des axes & du 1er textbox(0)
lDate.Visible = True ' x
lNom.Visible = True ' y

' ********************* placement_textbox ***********************************

' requete de balayage de la table pour affichage des noms ds les txtbox
sqlQuery = "select * from Stagiaires"
Data4.RecordSource = sqlQuery
Data4.Refresh

' placement & dimentionnement du 1er txtbox
compte = 0

' placement de la gauche du text box en fct de datdebut
' convertion du string 'un' en date
Do
un = "1 janvier 2004"
Loop While (Not IsDate(un))
date1 = CDate(un)

' recuperation de la date dans les champs de la bdd
' Datearriv
Data2.RecordSource = sqlQuery
Data2.Refresh
debut = Data2.Recordset.Fields(3)

' convertion du stringdebut en date
Do
Rep = debut
Loop While (Not IsDate(Rep))
datdebut = CDate(Rep)

date2 = datdebut
decalage = DateDiff("d", date1, date2)

Call ecart_date

Text1(compte).Width = nbjour * 1.5
Text1(compte).Left = 8 + decalage
Text1(compte).Text = Data4.Recordset.Fields(0)
Text1(compte).Visible = True

Data4.Recordset.MoveNext


' appel des fonctions
Call ecart_date
Call nb_enregistrement
Call creer_objet

' activation/desactivation des btn
btnAffich.Enabled = False
btnEffac.Enabled = True


End Sub

C'EST PAS FINI VLA LES FCTS :
' *****************************************************************************
' ******************************* fonctions ***********************************
' *****************************************************************************

' ********************** calcul du nb de jour entre 2 dates **************************
Public Function ecart_date()
Dim sqldate As String
Dim debut As String
Dim fin As String

sqldate = "select * from Stagiaires "

' recuperation de la date dans les champs de la bdd
' Datearriv
frmGraph.Data2.RecordSource = sqldate
frmGraph.Data2.Refresh
debut = frmGraph.Data2.Recordset.Fields(3)

' Datefin
frmGraph.Data3.RecordSource = sqldate
frmGraph.Data3.Refresh
fin = frmGraph.Data3.Recordset.Fields(4)

' convertion du stringdebut en date
Do
Rep = debut
Loop While (Not IsDate(Rep))
datdebut = CDate(Rep)

' convertion du stringfin en date
Do
Rep2 = fin
Loop While (Not IsDate(Rep2))
datfin = CDate(Rep2)

' recup nb de jours
nbjour = DateDiff("d", datdebut, datfin)
' affichage ds le lbl
frmGraph.lblDecompte.Caption = "Durée du stage de : " & nbjour & " jours"

frmGraph.Data2.Recordset.MoveNext
frmGraph.Data3.Recordset.MoveNext

End Function

' MARCHE PAS BIEN !!!
' DOIT MARCHER EN FCT DE LA BDD !!!!
' EH OUI C EST LA VIE !!!!!!!
' *************** créer des objets textbox **********************

Public Function creer_objet()

For compte = 1 To total - 1

Load frmGraph.Text1(compte)
' on place les textbox par rapport a Y
Call placement_textbox

' on associe la largeur du text box au nb de jour du stage
largeur = nbjour * (1.5)
frmGraph.Text1(compte).Width = largeur

' on met le nom du stagiaire ds le txtbox
tinom = frmGraph.Data4.Recordset.Fields(0)
frmGraph.Text1(compte).Text = tinom
frmGraph.Data4.Recordset.MoveNext

' on affiche
frmGraph.Text1(compte).Visible = True

' on passe au suivant
' frmGraph.Data1.Recordset.MoveNext

Next compte

End Function

' *********************** placement *******************************
Public Function placement_textbox()
Dim un As String

' placer la gauche du text box en fct de datdebut
' convertion du string 'un' en date
Do
un = "1 janvier 2004"
Loop While (Not IsDate(un))
date1 = CDate(un)

date2 = datdebut

' recup nb de jour entre 1er janvier & datdebut
decalage = DateDiff("d", date1, date2)

' placement du textbox par rapport a Y
frmGraph.Text1(compte).Left = decalage*1.5
frmGraph.Text1(compte).Top = frmGraph.Text1(compte - 1).Top - frmGraph.Text1(compte - 1).Height - 20

End Function

' ***************** nombre d' entrées ds la table 'Stagiaires' ********************
Public Function nb_enregistrement()
' on prend toute la table
sqlQuery = "SELECT * FROM Stagiaires"
frmGraph.Data1.RecordSource = sqlQuery
frmGraph.Data1.Refresh

' calcul du nombre d'enregistrements dans la table :
' on se deplace au jusqu' au dernier pour voir combien y en avait
frmGraph.Data1.Recordset.MoveLast
total = frmGraph.Data1.Recordset.RecordCount

' & affichage dans label
frmGraph.Label1.Caption = "nombres d' enregistrements : " & total

End Function


VOILA !!!!
Je crois qu' il ya tout ; Bon courage pour comprendre mais vous prennez pas trop la tete quand meme je crois que je devrais normalement bientot en voir le bout ....

A+
0
plaineR Messages postés 237 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 6 décembre 2005 4
26 févr. 2004 à 18:03
Voilà le code que je te propose qui est plus simple et qui fonctionne :

Private Sub Command1_Click()
Dim nom As String
Dim DateDeb As Date
Dim DateFin As Date

data3.RecordSource = "select * from stagiaires"
data3.Refresh
data3.Recordset.MoveFirst
For i = 0 To data3.Recordset.RecordCount - 1
If i <> 0 Then
Load Text1(i)
data3.Recordset.MoveNext
End If
nom = data3.Recordset.Fields(0)
DateDeb = data3.Recordset.Fields(3)
DateFin = data3.Recordset.Fields(4)
Text1(i).Left = position("01/01/2004", DateDeb)
Text1(i).Width = position(DateDeb, DateFin)
Text1(i).Text = nom
Text1(i).Visible = True
Next i
End Sub

Private Function position(date1 As Date, date2 As Date)
position = DateDiff("d", date1, date2) * 1.5
End Function

Juste une question quel type d'accès à ta base utilise tu ? adodc ? dataenvironnement ? Pour info j'ai fait le test via adodc.
0

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

Posez votre question
patl76 Messages postés 69 Date d'inscription jeudi 21 novembre 2002 Statut Membre Dernière intervention 21 mai 2013
27 févr. 2004 à 08:53
Desolé pour le retard mais j' fini a 17h les p'tits mecs - eh oui 35 heures !! -

Bref pour repondre a ta question j' ai tlisé une connexion via un data normal sans ADODC...
Pour ce qui est de ton code je vais tester ca et je te tien au courant..

Merci !!
0
patl76 Messages postés 69 Date d'inscription jeudi 21 novembre 2002 Statut Membre Dernière intervention 21 mai 2013
27 févr. 2004 à 09:09
Je sais pas trop pourquoi mais en fait ton code ne m' affiche que la 1ere ligne de la table Stagiaires .. Le txt prend bien les bonnes dimentions mais il n' y en a qu' un...
J' ai essayé d' arranger ca mais que dalle !!!!
0
plaineR Messages postés 237 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 6 décembre 2005 4
27 févr. 2004 à 09:49
Question con : es-tu sur que ton recordset te ramene plus d'un enregistrement ?
0
patl76 Messages postés 69 Date d'inscription jeudi 21 novembre 2002 Statut Membre Dernière intervention 21 mai 2013
27 févr. 2004 à 11:40
Oui la dessus y a pas de sousis le record set me ramene bien la bon nombre
Avec
rs.movelast
rs.recordcount

Ca ca marche nickel crome!!
0
plaineR Messages postés 237 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 6 décembre 2005 4
27 févr. 2004 à 12:01
Pour voir si cela vient de ton recordset ou du load qui ne marcherait pas, essaye le truc suivant :

Private Sub Command1_Click()
Dim nom As String
Dim DateDeb As Date
Dim DateFin As Date
data3.RecordSource = "select * from stagiaires"
data3.Refresh
data3.Recordset.MoveFirst
For i = 0 To data3.Recordset.RecordCount - 1
Text2.text = Text2.text & ";" & nom
If i <> 0 Then
Load Text1(i)
data3.Recordset.MoveNext
nom = data3.Recordset.Fields(0)
Text1(i).Left = Text1(i-1).Left + Text1(i-1).Width(i-1) + 50
Text1(i).Text = nom
Text1(i).Visible = True
End If
Next i
End Sub

S'il t'affiche que le premier enregistrement, c'est que tu as un problème avec ton recordset, s'il t'affiche tous les noms dans ta textbox text2, c'est que c'est le load qui déconne...
0
patl76 Messages postés 69 Date d'inscription jeudi 21 novembre 2002 Statut Membre Dernière intervention 21 mai 2013
27 févr. 2004 à 13:51
Pour ta question j' ai recuperé ton code du precedant message avec ta pitite fonction & j' y ai rajouté ce qu' il y avait ds le 2eme ... ( en enlevant ce qui apparaissait é Fois a la meme place. )
D' apres ce que tu me dis ca doit etre le recordset :
Le graph m' affiche le 1er textbox avec le nom no1 dedans mais pas les autre txtbox... De plus ds lex text2.text il est ecrit "text2;no1" ... 'no1' est bien le nom du 1er stagiaire.

Saurait-tu resoudre ce probleme de recordset .?????

A+
0
patl76 Messages postés 69 Date d'inscription jeudi 21 novembre 2002 Statut Membre Dernière intervention 21 mai 2013
27 févr. 2004 à 14:03
CORRECTION pour plaineR !!!!

J' ai reverifier le code que tu m' avait passé et j' y ai trouvé une petite erreur a la con mais qui change tout !!!
En fait tu avait oublié de faire un data3.recordset.movelast avant de calculer le recordcount ..

Forcément ca pouvait pas marcher ...

Enfin bref maintenant il affiche tous les textfield ( sur la meme ligne mais ca ca doit etre une de mes conneries ) & ds le text2 il est ecrit :" text2;no1;no2;no3;..." toute les noms de la table quoi...

Donc c' est pas le recordset mais le Load qui deconne ...

A+
et merci
0
plaineR Messages postés 237 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 6 décembre 2005 4
27 févr. 2004 à 14:19
T'es obligé de faire un movelast pour faire un recordcount ??? Moi ça marche sans que je fasse ça...

Enfin si t'as trouvé d'où vient ton problème tant mieux !!

Bon courage, @+
0
Rejoignez-nous