FAIRE LE CALCUL DANS UN DATAGRID

cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 - 8 oct. 2004 à 15:07
babina11 Messages postés 6 Date d'inscription dimanche 11 mars 2012 Statut Membre Dernière intervention 22 juin 2012 - 25 mai 2012 à 15:46
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/26675-faire-le-calcul-dans-un-datagrid

babina11 Messages postés 6 Date d'inscription dimanche 11 mars 2012 Statut Membre Dernière intervention 22 juin 2012
25 mai 2012 à 15:46
bonjour tt le monde,
je travaille avec la table (qc_mstr) qui contient les champs suivant:(qc_part,qc_nbr,qc_status ...) et le champ qui m'interesse le plus c'est (qc_status) de type numeric ,voici un exemple pour bien me comprendre:

qc_status =2 =======>le status de l'article est "accepté" (A)

qc_status =3 =======>le status de l'article est "non conforme" (R)

qc_status =4 =======>le status de l'article est "non applicable" (NA)

mon adjectif est de calculer le taux de non conformité et voici la formule:

RESULTAT=somme (A) / (somme(A)+somme(R)+somme(NA)

maintenant je veux afficher cette resultat dans une datgrid et voici ma requete:

"SELECT qc_nbr,qc_part,qc_status from qc_mstr where qc_part like'%" + TextBox1.Text + "%'"

j’espère que vous pouvez m'aider et j’espère aussi que j'ai bien expliquée mon problème :)
Nzeky branco Messages postés 3 Date d'inscription mardi 13 septembre 2005 Statut Membre Dernière intervention 14 septembre 2006
14 sept. 2006 à 09:56
ça ne marche pas chez moi et j'aimerai savoir comment on peut utiliser les touches de direction du clavier pour quitter un cellule modifiée du datagrid
pointbin Messages postés 71 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 13 mai 2010
5 juin 2005 à 12:01
Non ça n'a pas marcher.
le probléme c'est que j'utiliser le fichier libmyqsl.dll donc j'utilise pas ODBC (my-ODBC pour mysql) et quand je fait un refresh une erreur me dit qu'il n'y a pas de ConnectionString.
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
3 juin 2005 à 18:55
oui ca marche avec toutes les base de données tant qu'on utilise le ADODC couplé avec son ODBC (my-ODBC pour mysql)


Sinon pour le refresh, il faut rafraichir l'ADODC !
pointbin Messages postés 71 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 13 mai 2010
2 juin 2005 à 11:58
et pour le refresh du data grid et la suppression des elements comment faire.
je mais refresh pour reafficher les donnes mais ça marche pas.
et pour la suppression j'ai mis ClearFields et ça n'a pas marcher aussi alors que doije faire.
Merci.
pointbin Messages postés 71 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 13 mai 2010
2 juin 2005 à 11:50
Merci frop01, je vais l'essayer, normallement ça marche avec une base mysql?

est ce que c'est possible de le faire en code source sans "extraire les champs"

Merci beaucoup.
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
2 juin 2005 à 10:14
Salut,

Si tu as relié ton DataGrid au ADODC par l'intermédiaire de la proprièté DataSource

Tu clic droite sur le DataGrid, et tu choisi "Extraire les champs"
ou Extract Fields
pointbin Messages postés 71 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 13 mai 2010
1 juin 2005 à 13:23
Comment avez vous fais pour remplir les colonnes du dataGrid dans le form car quand je mais une dataGrid je trouve seulement colonne (0) et colonne(1) et j'ai pas su comment ajouter 3 autre colonne.

Merci
pointbin Messages postés 71 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 13 mai 2010
1 juin 2005 à 13:21
Comment avez vous fais pour remplir les colonnes du dataGrid dans le form car quand je mais une dataGrid je trouve seulement colonne (0) et colonne(1) et j'ai pas su comment ajouter 3 autre colonne.

Merci
LaSoft Messages postés 5 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 17 mars 2005
12 oct. 2004 à 15:34
Avec les deux modifications le code fonctionne très bien, mais si je veux faire lancer le calcul de somme à partir de la sub DataGrid1_KeyDown, le datagrid réaffiche l'ancienne valeur.
Comment forcer l'écriture des modifications avant de rafraîchir ?
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
8 oct. 2004 à 15:11
ah autre chose !

pour faire un boucle avec un recordset il fait utilise
Do until loop

imagines qu'il n'ya pas d'enregistrement alors recordcount=0
donc il y aura une erreur avec for i = 1 to recordcount

le code avec eof est plus correct :

Do until Adodc1.Recordset.eof ' jusqu'à la fin
'.....ton code
Adodc1.Recordset.MoveNext
loop
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
8 oct. 2004 à 15:07
Salut

- il te manques un refresh dans la procedure calcul (command1)
- tester si text1 <>"" pour valider la recherche
- pour que le calcul soit exacte il faut recalculer la somme par ligne lorsque l'utilsateur resaisie le prix unitaire et la quantité (événement keydown lorsqu'il valide par une entrée)

Voici qq amélioration :


Dim pu As Long
Dim qte As Long
Private Sub Command1_Click()
Dim i As Integer
Dim Som As Long
Som = 0
Adodc1.Refresh
For i = 1 To Adodc1.Recordset.RecordCount
Som = Som + Adodc1.Recordset.Fields(5).Value
Adodc1.Recordset.MoveNext
Next i
Label1.Caption = Som
End Sub

Private Sub Command2_Click()
If Text1.Text <> "" Then
Adodc1.Recordset.Filter = "numero='" & Trim(Text1.Text) & "'"
End If
End Sub

Private Sub Command3_Click()
Adodc1.Refresh
End Sub

Private Sub DataGrid1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then
If DataGrid1.Col 4 Or DataGrid1.Col 3 Then
pu = Val(DataGrid1.Columns(3).Text)
qte = Val(DataGrid1.Columns(4).Text)
DataGrid1.Columns(5).Text = qte * pu
End If
End If
End Sub
Rejoignez-nous