Requete soustraction dans tableau

Résolu
Sinsitrus Messages postés 855 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015 - 16 févr. 2010 à 11:00
Sinsitrus Messages postés 855 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015 - 16 févr. 2010 à 16:19
Salut !

J'ai ce tableau en MSFlexGrid :

Et je souhaiterais qu'au Load de ma form il me fait le calcul suivant :
Dans deux tables
Articles (Code, Designation, Total)
ArticlesInventaire (Code, Designation, Total)

Le regroupement des Code, des désignations et mettre le Total de chaque table dans :
Articles.Total (Pièce dépôt)
ArticlesInventaire.Total (Pièce Inventaire)
et faire la différence dans la colonne "Différence"

J'ai essayé de le faire comme suite :
Dim SQL As String
Dim I As Integer

SQL = " SELECT Articles.Code AND Articles.Designation AND Articles.Total As TotalA AND "
SQL = SQL + " ArticlesInventaire.Code AND ArticlesInventaire.Designation AND ArticlesInventaire.Total As TotalI AND "
SQL = SQL + " FROM Articles, ArticlesInventaire "
SQL SQL + " WHERE (Articles.TotalA - ArticlesInventaire.TotalI) Difference "

DataR.DatabaseName = App.Path & "\BaseDonnee.mdb"
DataR.RecordSource = SQL
DataR.Refresh

    If Not (DataR.Recordset.BOF And DataR.Recordset.EOF) Then
    DataR.Recordset.MoveLast
    DataR.Recordset.MoveFirst
    MSFlexGrid.Rows = DataR.Recordset.RecordCount + 1
    I = 1
    Do While Not DataR.Recordset.EOF
    MSFlexGrid.TextMatrix(I, 0) = DataR.Recordset!Code
    MSFlexGrid.TextMatrix(I, 1) = DataR.Recordset!Designation
    MSFlexGrid.TextMatrix(I, 2) = DataR.Recordset!TotalA
    MSFlexGrid.TextMatrix(I, 3) = DataR.Recordset!TotalI
    MSFlexGrid.TextMatrix(I, 4) = DataR.Recordset!Difference
    I = I + 1
    DataR.Recordset.MoveNext
    Loop

DataR.Refresh
End If


Mais j'y arrive pas. Pouvez vous me donner un ti coup de main svp ?
Merci

----------
OS : Windows XP SP3
Platforme : VB 6.0 + SP6
Ok VB6.0 c'est pas net !

6 réponses

EznehYet Messages postés 12 Date d'inscription samedi 23 avril 2005 Statut Membre Dernière intervention 17 mars 2010
16 févr. 2010 à 14:27
Pour commencer, mettons un peu d'ordre dans ta reqûête :

Dim SQL As String

SQL = "SELECT Articles.Code, Articles.Designation, Articles.Total As TotalA, "
SQL = SQL + " ArticlesInventaire.Code, ArticlesInventaire.Designation, ArticlesInventaire.Total As TotalI "
SQL = SQL + " FROM Articles, ArticlesInventaire "


Ensuite, d'après ton code, je vois que tu essaies de récupérer pas mal de choses ici :

MSFlexGrid.TextMatrix(I, 0) = DataR.Recordset!Code
    MSFlexGrid.TextMatrix(I, 1) = DataR.Recordset!Designation
    MSFlexGrid.TextMatrix(I, 2) = DataR.Recordset!TotalA
    MSFlexGrid.TextMatrix(I, 3) = DataR.Recordset!TotalI
    MSFlexGrid.TextMatrix(I, 4) = DataR.Recordset!Difference


Seulement le soucis, c'est que "Difference" n'est récupéré nulle part, et que tu tentes de le calculer dans ton where.

Je pense plutôt que tu souhaites récupérer les données de tes deux tables, faire un calcul sur la différence et les mettre dans ton MSFlexGrid ?

De ce fait, tu devrais déclarer une variable "Difference" qui serait de ce genre-ci :

Dim Difference as double

Difference = DataR.Recordset!TotalA - DataR.Recordset!TotalI

' ...
MSFlexGrid.TextMatrix(I, 4) = Difference




Déjà comme ça, y a plus de chances que ça marche (bien que je ne sois pas certain du calcul sur la difference)
3
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
16 févr. 2010 à 11:17
Salut
Toujours ce même problème.
As-tu compris ce que signifie une clause WHERE ?
D'où sort le mot "Difference" dans ta syntaxe ?
Ta requète n'a aucun sens. Le moteur SQL doit même la refuser et tu dois avoir une erreur.
La moindre des choses aurait été de nous dire ce que obtiens comme erreur ou comme résultat ...

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)
0
Sinsitrus Messages postés 855 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
16 févr. 2010 à 12:11
Erreur d'exécution 3141
Dans l'instruction SELECT, un mot réservé ou un argument est mal orthographié ou manquant, ou la ponctuation est incorrecte.

Voici le message d'erreur que j'ai
La clause WHERE signifie d'où n'est-ce pas ?
J'ai essayé avant de posté ce massage de faire un :

SQL = " SELECT Articles.Code AND Articles.Designation AND Articles.Total As TotalA AND "
SQL = SQL + " ArticlesInventaire.Code AND ArticlesInventaire.Designation AND ArticlesInventaire.Total As TotalI [color=blue]AND Difference "
SQL = SQL + " FROM Articles, ArticlesInventaire "
SQL SQL + " WHERE (Articles.TotalA - ArticlesInventaire.TotalI) Difference "/color

Mais j'ai le même problème.
0
Sinsitrus Messages postés 855 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
16 févr. 2010 à 15:52
Salut et merci EznehYet !

Voici donc le résultat du travail :

Dim SQL As String
Dim I As Integer
Dim Difference As Long

SQL = " SELECT Articles.Code AS CodeA, Articles.Designation AS DesA, SUM(Articles.Total) AS TotalA, "
SQL = SQL + " ArticlesInventaire.Code AS CodeI, ArticlesInventaire.Designation AS DesI, SUM(ArticlesInventaire.Total) AS TotalI"
SQL = SQL + " From Articles, ArticlesInventaire "
SQL SQL + " WHERE Articles.Code ArticlesInventaire.Code AND Articles.Designation = ArticlesInventaire.Designation "
SQL = SQL + " GROUP BY Articles.Code, Articles.Designation, ArticlesInventaire.Code, ArticlesInventaire.Designation "

DataR.DatabaseName = App.Path & "\BaseDonnee.mdb"
DataR.RecordSource = SQL
DataR.Refresh

Difference = DataR.Recordset!TotalA - DataR.Recordset!TotalI

If Not (DataR.Recordset.BOF And DataR.Recordset.EOF) Then
    DataR.Recordset.MoveLast
    DataR.Recordset.MoveFirst
    MSFlexGrid.Rows = DataR.Recordset.RecordCount + 1
    I = 1
    Do While Not DataR.Recordset.EOF
MSFlexGrid.TextMatrix(I, 0) = DataR.Recordset!CodeA
MSFlexGrid.TextMatrix(I, 1) = DataR.Recordset!DesA
MSFlexGrid.TextMatrix(I, 2) = DataR.Recordset!TotalA
MSFlexGrid.TextMatrix(I, 3) = DataR.Recordset!TotalI
MSFlexGrid.TextMatrix(I, 4) = DataR.Recordset!Difference
    I = I + 1
    DataR.Recordset.MoveNext
    Loop
DataR.Refresh
Else
MSFlexGrid.Rows = 1
End If

Par contre, effectivement, j'ai une erreur qui s'affiche sur la Difference (élément non trouvé dans la collection. Erreur 3265.

Sinon a part ca, tout fonctionne à ce qu'il paraît.
Ais-je mal mis la ligne de différence ou se trouve t-il qu'il y a un problème ?

Merci encore pour ton aide !
0

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

Posez votre question
EznehYet Messages postés 12 Date d'inscription samedi 23 avril 2005 Statut Membre Dernière intervention 17 mars 2010
16 févr. 2010 à 16:01
Difference = DataR.Recordset!TotalA - DataR.Recordset!TotalI

If Not (DataR.Recordset.BOF And DataR.Recordset.EOF) Then
    DataR.Recordset.MoveLast
    DataR.Recordset.MoveFirst
    MSFlexGrid.Rows = DataR.Recordset.RecordCount + 1
    I = 1
    Do While Not DataR.Recordset.EOF
MSFlexGrid.TextMatrix(I, 0) = DataR.Recordset!CodeA
MSFlexGrid.TextMatrix(I, 1) = DataR.Recordset!DesA
MSFlexGrid.TextMatrix(I, 2) = DataR.Recordset!TotalA
MSFlexGrid.TextMatrix(I, 3) = DataR.Recordset!TotalI
MSFlexGrid.TextMatrix(I, 4) = DataR.Recordset!Difference
    I = I + 1
    DataR.Recordset.MoveNext
    Loop



Ca provoquerait sans doute pas d'erreur de cette manière :


If Not (DataR.Recordset.BOF And DataR.Recordset.EOF) Then
    DataR.Recordset.MoveLast
    DataR.Recordset.MoveFirst
    MSFlexGrid.Rows = DataR.Recordset.RecordCount + 1
    I = 1
    Do While Not DataR.Recordset.EOF
MSFlexGrid.TextMatrix(I, 0) = DataR.Recordset!CodeA
MSFlexGrid.TextMatrix(I, 1) = DataR.Recordset!DesA
MSFlexGrid.TextMatrix(I, 2) = DataR.Recordset!TotalA
MSFlexGrid.TextMatrix(I, 3) = DataR.Recordset!TotalI

' Récupérer les valeurs en cours
Difference = DataR.Recordset!TotalA - DataR.Recordset!TotalI

' L'insérer dans le MSFlexGrid
MSFlexGrid.TextMatrix(I, 4) = Difference
    I = I + 1
    DataR.Recordset.MoveNext
    Loop
0
Sinsitrus Messages postés 855 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
16 févr. 2010 à 16:19
Ahaaa oui t'as raison, le DataR.Recordset! devrait sauter de sa place !
Il est idiot de pas l'avoir vu mais bon :p Merci et grand merci à toi EznehYet !
0