begin process at 2012 02 14 03:26:19
  Trouver un code source :
 
dans
 
Accueil > Forum > 

VB.NET et VB 2005

 > 

Base de données

 > 

ADO.NET

 > 

Base de donnée : regroupement de champs (en ado.net)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Base de donnée : regroupement de champs (en ado.net)

vendredi 30 mai 2008 à 15:28:29 | Base de donnée : regroupement de champs (en ado.net)

TrafMaxime

Bon salut les gars..

Je suis entrain de faire en bricolage assez couteux en temps, mais je suis sur que quelqu'un peu faire parler sa classe, et me donner une meilleur méthode.

Voilà le topo : je veux regrouper les champs d'une table ayant la même valeur dans une certaine colonne, schématiquement passer de :

x1 | y1 | z1
x1 | y2 | z2
x3 | y3 | z3

à :

x1 | y1 + y2 | z1 + z2
x3 |     y3     |      z3

Ne fuyez pas c'est un exercice de base, le problème c'est que j'ai pas l'impression d'employer la méthode la plus judicieuse, je fais :

1-écriture de toutes les données
2-"select distinct valeur from matable"
3-pour chaque valeur : "select matable.* where valeur like '"+ _ +"'"
4- Somme des éléments et destruction des lignes inutiles

Quelqu'un voit-il une meilleure solution ?

.Maytheforcebewithyou.Maxime.


vendredi 30 mai 2008 à 15:38:41 | Re : Base de donnée : regroupement de champs (en ado.net)

casy

Membre Club
Réponse acceptée !

Tu peux peut-etre essayer une requette du type :

Select X, SUM(Y), SUM(Z) Form TaTable Group By X



---- Sevyc64  (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #    [ Lien ]
vendredi 30 mai 2008 à 16:13:42 | Re : Base de donnée : regroupement de champs (en ado.net)

TrafMaxime

Merci tu m'as donné une piste..

En fait t'as requête ne plait pas à mon ado.net, par contre on peut utiliser la fonction 'sum', via la méthode 'compute' d'un datatable..

J'ai pas pondu le code exact, si ça intéresse quelqu'un je le colle ici quand ça marchera :)

.Maytheforcebewithyou.Maxime.


vendredi 30 mai 2008 à 16:14:35 | Re : Base de donnée : regroupement de champs (en ado.net)

TrafMaxime

ah ça pique les yeux... au secours je peux pas éditer... TA requête, pardon aux familles tout ça

.Maytheforcebewithyou.Maxime.


vendredi 30 mai 2008 à 16:18:54 | Re : Base de donnée : regroupement de champs (en ado.net)

casy

Membre Club

t'inquiète, on est blindé, on en voit de pire


---- Sevyc64  (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #    [ Lien ]
vendredi 30 mai 2008 à 16:26:24 | Re : Base de donnée : regroupement de champs (en ado.net)

TrafMaxime

En fait je suis peut allé un peu vite.

Apparemment il m'accepte ta requete, casy.. le problème, c'est qu'il me prend ça :

Dim str As String = "Select artikelnr, sum(menge) from sigma Group By artikelnr"

et pas :

Dim str As String = "Select ID, artikelnr, sum(menge) from sigma Group By artikelnr"

et que sans l'ID, je peux pas updater ma base... :(

-a comprend pas-
il me dit (traduction maison, j'ai le vb allemand) : "vous essayer de faire une requête avec l'expression 'ID' qui ne fait pas partit de la fonction d'aggrégation" <- il entend par là la fonction 'SUM' a mon avis..

Casy, si tu repasses par ici.. :)

.Maytheforcebewithyou.Maxime.


vendredi 30 mai 2008 à 18:59:22 | Re : Base de donnée : regroupement de champs (en ado.net)

casy

Membre Club
Réponse acceptée !
Et non !
Agregation est plus ou moins synonyme de groupement.

Bref, dans le cas présent, lorsque tu utilise Group By, il doit porter sur tous les paramètres simples que tu  as en résultat de ta requette.
En plus clair, ID et artikelnr sont des paramètres simples, ce sont des champs de ta table.
A contrario, sum(menge) est un champ complexe, en fait le résultat d'une formule de calcul.
Donc Group By doit porter sur ID et artikelnr :

 Dim str As String = "Select ID, artikelnr, sum(menge) from sigma Group By artikelnr,ID"


Sauf que, comme je le pressent, si ID est un identifiant unique, ta somme ne vas plus se faire.
Ou plus exactement, elle va se faire sur chacne des lignes de la table, au lieu d'un groupe de requette.
Le but de Group By est de regrouper les lignes de ta table de sorte à éliminer les doublons sur la combinaison des paramètres qui lui sont passés.
Si ID est effectivement un identifiant unique, il n'y aura, normalement pas de doublons dessus, donc pas de regroupement.


---- Sevyc64  (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #    [ Lien ]
mercredi 4 juin 2008 à 14:14:21 | Re : Base de donnée : regroupement de champs (en ado.net)

TrafMaxime

T'as tout bon casy..

Donc pour résumer, les mots clés sum(x) et group by ne font pas tout, mais mache une partie du travail..

Procédure utilisée qui marche pour ceux qui repasserait par là :

-écriture des données dans la base
-requete utilisant 'sum et group by' dans un dataset
-vider la base
-ecriture de chaque ligne du dataset 'groupé' avec affectation de l'id

ctrl + v (attention y'a des mots allemands qui peuvent piquer les yeux mais l'idée est là) :

Dim str As String = "Select artikelnr, parttype, footprint, bez, bez2, bez3, abmess, matspez, sum(menge) from sigma Group By artikelnr, parttype, footprint, bez, bez2, bez3, abmess, matspez"
            Dim dastr As New OleDbDataAdapter(str, OleDbConnection4)
            Dim dst As New DataSet()
            Dim ff, gg As Integer
            gg = dastr.Fill(dst)
            Dim dsk As String = "select sigma.* from sigma"
            Dim dak As New OleDbDataAdapter(dsk, OleDbConnection4)
            Dim dk As New DataSet()
            dak.Fill(dk)
            dk.Clear()
            Dim ock As OleDbCommandBuilder = New OleDbCommandBuilder(dak)
            dak.UpdateCommand = ock.GetUpdateCommand
            dak.Update(dk)
            For ff = 0 To gg - 1
                Dim dr As DataRow = dk.Tables(0).NewRow
                dr("id") = ff + 1
                dr("artikelnr") = dst.Tables(0).Rows(ff)("artikelnr")
                dr("parttype") = dst.Tables(0).Rows(ff)("parttype")
                dr("footprint") = dst.Tables(0).Rows(ff)("footprint")
                dr("bez") = dst.Tables(0).Rows(ff)("bez")
                dr("bez2") = dst.Tables(0).Rows(ff)("bez2")
                dr("bez3") = dst.Tables(0).Rows(ff)("bez3")
                dr("menge") = dst.Tables(0).Rows(ff)("expr1008")
                dr("abmess") = dst.Tables(0).Rows(ff)("abmess")
                dr("matspez") = dst.Tables(0).Rows(ff)("matspez")
                dk.Tables(0).Rows.Add(dr)
            Next
            Dim ocxi As OleDbCommandBuilder = New OleDbCommandBuilder(dak)
            dak.InsertCommand = ocxi.GetInsertCommand
            dak.Update(dk)

.Maytheforcebewithyou.Maxime.




Cette discussion est classée dans : base, donnée, valeur, champs, regroupement


Répondre à ce message

Sujets en rapport avec ce message

Base de Donnée access sous VB 6.0 [ par breizhoneg ] J'aimerais savoir 2 choses1erement : Comment en entrant un champ de la base de données, peut-on avoir automatiquement les champs qui lui sont associés sql et champ null [ par poulipe ] Bonjour,je voudrais rechercher dans ma base si il y a des champs null pour changer leurs valeurs en à ou en "".donc j ai mon sql :ssqlstring = "SELECT Concernant le DAO [ par happyjo ] Bonjour,Je suis debutant dans la programmation et j'aimerai une petite explication concernant l'extraction de donnée dans une base de donnéevois quand lire la donnée d'une valeur de la base de registre [ par SesechXP ] Salut!Quelqu'un sait-il comment on fait pour lire la donnée d'une valeur de la base de registre afin d'en faire une variable utilisable par le program MAJ Base ACCESS [ par gwiwi ] Bonjour,Je dois mettre une base de donnée a Jour (TABLE + Champs surtout) donc ajout de nouveau champs mais je ne sais pas du tout comment m'y prendre base de donnée [ par henri21 ] Bonjourje cherche une source capable d afficher sur une page Web un nombre de champs d'une base de donnee et au prochain utilisateur qui utilise la p base de donnée pervasive et champs date de type "btrieve date" [ par samourai_alex ] salut a tousbon voila my problems.g travaille avec vb6 sur une base de données pervasive sql. g n'arrive pas à faire de requete avec les champs de dat nom des champs d'une requette [ par pumaseed ] Bonjour a tousVoila je suis en train de faire un programme en vb qui utilise des base de donnée mais la je bloqueJe vous explique:En fait j'ai une bas nom des champs d'une requette [ par pumaseed ] Bonjour a tousVoila je suis en train de faire un programme en vb qui utilise des base de donnée mais la je bloqueJe vous explique:En fait j'ai une bas nom des champs d'une base de donnée [ par pumaseed ] Bonjour a tousVoila je suis en train de faire un programme en vb qui utilise des base de donnée mais la je bloqueJe vous explique:En fait j'ai une bas


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,108 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales