1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    décembre 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : décembre 2013
    Messages : 16
    Points : 2
    Points
    2

    Par défaut Compatibilité des produits

    Bonjour,

    J'ai commencé à développer une application qui permet de vérifier la compatibilité entre un produit et un autre (ou même avec plusieurs), je dois concevoir cette table de compatibilité sur SQL Server (fichier joint), et créer un form Visual Studio avec deux Combobox pour le choix des produits avec affichage du résultat , True = Is compatible, False = Is not compatible, ainsi une autre option qui peut me permettre de masquer un produit de la dropdownlist quand je désire ( true = is displayed, false = hide).

    Nom : form_ComboboxDDLProduit_TableComp.JPG
Affichages : 92
Taille : 21,6 Ko

    Nom : table_compatibilité.JPG
Affichages : 78
Taille : 28,5 Ko

    Nom : table_compatibilité_design.JPG
Affichages : 81
Taille : 22,0 Ko

    les compatibilités.xlsx

    products.xlsx

  2. #2
    Membre expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    octobre 2008
    Messages
    1 516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 516
    Points : 3 116
    Points
    3 116
    Billets dans le blog
    6

    Par défaut

    Citation Envoyé par osgentleman Voir le message
    Bonjour,

    J'ai commencé à développer une application qui permet de vérifier la compatibilité entre un produit et un autre (ou même avec plusieurs), je dois concevoir cette table de compatibilité sur SQL Server (fichier joint), et créer un form Visual Studio avec deux Combobox pour le choix des produits avec affichage du résultat , True = Is compatible, False = Is not compatible, ainsi une autre option qui peut me permettre de masquer un produit de la dropdownlist quand je désire ( true = is displayed, false = hide).

    Nom : form_ComboboxDDLProduit_TableComp.JPG
Affichages : 92
Taille : 21,6 Ko

    Nom : table_compatibilité.JPG
Affichages : 78
Taille : 28,5 Ko

    Nom : table_compatibilité_design.JPG
Affichages : 81
Taille : 22,0 Ko

    les compatibilités.xlsx

    products.xlsx
    Bonjour,

    Et ta question elle est où exactement ??

  3. #3
    Expert éminent

    Homme Profil pro
    Développeur .NET
    Inscrit en
    janvier 2012
    Messages
    3 796
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : janvier 2012
    Messages : 3 796
    Points : 7 749
    Points
    7 749
    Billets dans le blog
    17

    Par défaut

    Bonjour,

    Citation Envoyé par wallace1 Voir le message
    Bonjour,

    Et ta question elle est où exactement ??
    Il veut qu'on lui donne le code pour transférer ses deux fichiers-joints dans une base SQL Server. Cela lui prend juste deux connexions, une avec System.Data.OLEDB pour Excel et une autre classique avec SQL Server. Le reste, c'est un jeu de DataAdapter et de requêtes SQL.

    Même qu'il pourra trouver un exemple sur MSDN.

    Même qu'il pourrait peut-être s'en tirer rapidement avec SQLBULKCOPY


    Mais là j'ai la flemme ce soir. J'en ai déjà sermonné un autre et il est déjà tard. Et puis je n'ai rien à transférer d'Excel à SQL Server actuellement sous la main. Et puis, je suis comme les autres répondeurs du forum Excel, très réticent à ouvrir des pièces jointes, même si les fichiers xlsx ne sont pas supposés contenir de macros.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    À force de vouloir considérer les utilisateurs comme des imbéciles patentés, on risque de se mettre dans le trouble.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    décembre 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : décembre 2013
    Messages : 16
    Points : 2
    Points
    2

    Par défaut

    Bonjour tout le monde,

    Ce n'est pas que je veux transférer les fichier en base SQL, ma question est comment communiquer entre SQL Server et Visual Studio et réussir à avoir les résultats qui vérifie la compatibilité entre deux produits sélectionnés à partir de la table bdd, et affichés sur un Form comme j'ai indiqué ci dessus.

    Voilà le code de la requête que j'ai fait sur SQL server :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    /*create table COMPATIBILITY_CONNECTION
    (
    	Id_ProductPin int not null references	CDS_PRODUCTS(Id_Product),
    	Id_ProductBox int not null references CDS_PRODUCTS(Id_Product),
    	check (Id_ProductPin <= Id_ProductBox),
    	primary key (Id_ProductPin, Id_ProductBox)
    );
    go*/
    -- Ce trigger est là pour rendre la contrainte sur l'ordre des produits compatibles non restrictive : si on ne respecte pas l'ordre, le trigger remet tout dans l'ordre
    create trigger trg_new_compatibility on COMPATIBILITY_CONNECTION
    instead of insert
    as
    begin
    	insert into COMPATIBILITY_CONNECTION (Id_ProductPin, Id_ProductBox)
    	select 
    		case when Id_ProductPin <= Id_ProductBox then Id_ProductPin else Id_ProductBox end,
    		case when Id_ProductPin <= Id_ProductBox then Id_ProductBox else Id_ProductPin end
    	from inserted;
    end;
    go
    /*insert into COMPATIBILITY_CONNECTION (Id_ProductPin, Id_ProductBox) values
    (18, 18),
    (18, 48),
    (18, 47),
    (47, 47),
    (47, 48),
    (48, 48),
    (39, 39); -- Cette ligne doit être remise dans le bon sens par le trigger "trg_new_compatible"
    */
    -- Cette fonction retourne 1 si les produits sont compatibles, 0 sinon
    create function dbo.AreCompatibles(@Id_ProductPin int, @Id_ProductBox int)
    returns bit
    as
    begin
    	if @Id_ProductPin > @Id_ProductBox
    	begin
    		return dbo.AreCompatibles(@Id_ProductBox, @Id_ProductPin);
    	end
    	return (select count(*) from COMPATIBILITY_CONNECTION where Id_ProductPin = @Id_ProductPin and Id_ProductBox = @Id_ProductBox);
    end;
     
     
    select p1.Id_Product, p2.Id_Product, dbo.AreCompatibles(p1.Id_Product, p2.Id_Product)
    from CDS_PRODUCTS p1
    inner join CDS_PRODUCTS p2 on p2.Id_Product <> p1.Id_Product
     
    select p1.Id_Product, p1.Connection, p2.Id_Product, p2.Connection
    from CDS_PRODUCTS p1
    inner join COMPATIBILITY_CONNECTION on c.Id_ProductPin = p1.Id_Product or c.Id_ProductBox = p1.Id_Product
    inner join CDS_PRODUCTS p2 on p2.Id_Product = case c.Id_ProductPin when p1.Id_Product then c.Id_ProductBox else c.Id_ProductPin end
    --where p1.Id_Product = 18

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    juillet 2005
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : juillet 2005
    Messages : 456
    Points : 1 159
    Points
    1 159

    Par défaut

    Bonjour,

    Pour le dialogue entre ton programme et ton serveur SQL regarde du coté de SQLCommand, SQLConnexion ...etc
    Explore la doc, et surtout inspire toi des exemples, et si ce n'est pas suffisant demande à Google ou un de ces petits frères.
    Je te conseil d'isoler ce code d'accès à ton serveur dans une dll réservée, nulle doute que tu t'en resservira.

    Regarde la doc et pose des questions sur les points ou tu bloques.

    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    décembre 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : décembre 2013
    Messages : 16
    Points : 2
    Points
    2

    Par défaut

    Citation Envoyé par J@ckHerror Voir le message
    Bonjour,

    Pour le dialogue entre ton programme et ton serveur SQL regarde du coté de SQLCommand, SQLConnexion ...etc
    Explore la doc, et surtout inspire toi des exemples, et si ce n'est pas suffisant demande à Google ou un de ces petits frères.
    Je te conseil d'isoler ce code d'accès à ton serveur dans une dll réservée, nulle doute que tu t'en resservira.

    Regarde la doc et pose des questions sur les points ou tu bloques.

    J@ck.
    Bonjour Jack,

    J'ai réussi à remplir les deux combobox, maintenant je voudrais bien que ça affiche un résultat (compatible ou non) quand je sélectionne deux produits, j'ai aucune idée comment y procéder :/ :/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
            Dim connection As New SqlConnection("Server= local ; Database = test ; Integrated Security = true")
     
            Dim command As New SqlCommand("select * from COMPATIBILITY_CONNECTION", connection)
     
            Dim adapter As New SqlDataAdapter(command)
     
            Dim table_PIN As New DataTable()
     
            adapter.Fill(table_PIN)
     
            ComboBox1.DataSource = table_PIN
     
            ComboBox1.DisplayMember = "Id_ProductPin"
     
            ''ComboBox1.ValueMember = "Id"
     
            Dim table_BOX As New DataTable()
     
            adapter.Fill(table_BOX)
     
            ComboBox2.DataSource = table_BOX
     
            ComboBox2.DisplayMember = "Id_ProductBox"
     
            ''ComboBox2.ValueMember = "Id"
    merci de m'aider svp!

  7. #7
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    juillet 2005
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : juillet 2005
    Messages : 456
    Points : 1 159
    Points
    1 159

    Par défaut

    Bonjour,

    Pour commencer plusieurs remarques, les using qu'il y a dans les exemples de la doc sont quasis indispensables. Sans eux tu vas forcement oublier de clore une connexion ou autre, bref tu vas inutilement surcharger ton serveur en connexion obsolètes, de plus c'est une bonne pratique à appliquer partout, dès que l'on a besoin de ressources extérieures, même (surtout) pour les petits projets. D'ailleurs je mets une pièce que tu ne ferme jamais ta connexion dans ton programme !!!
    De plus il faut aussi éviter de faire des "select *", il est préférable de lister les champs.

    Sinon j'ai du mal a croire que ton code fonctionne, on va donc pas aller plus loin si c'est pas fonctionnel... ça fait longtemps que j'ai pas regardé de près ce genre de code mais j'ai du mal a croire que tu n'ai jamais besoin de faire de Open() sur la connexion, ou de ExecuteReader(..) ou de ExecuteNonQuery(..) ...etc bref dis moi si ton code est fonctionnel et si non, dis moi ce qui t'empêche d'avancer... Normalement la doc a tout ce qu'il faut pour avancer, mais c'est vrai que lorsque l'on débute elle peut être un peu déroutante...

    J@ck.

    [Edit] Bon ok ça passe ! ton code fonctionne. Maintenant tu as toutes les clés pour faire la suite, tu sais requêter ton serveur, donc tu n'as plus qu'a ...
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  8. #8
    Candidat au Club
    Homme Profil pro
    Inscrit en
    décembre 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : décembre 2013
    Messages : 16
    Points : 2
    Points
    2

    Par défaut

    Oui, j'ai modifié le code pour les connexions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim _sSqlConnection As String = " SELECT [Id],[Id_ProductPin],[Id_SpecialNamePin],[Id_ProductBox],[Id_SpecialNameBox]" &
                                            " FROM [COMPATIBILITY_CONNECTION] where Id_ProductPin = " & IdProductPin & " and  Id_SpecialNamePin = " & Id_specialnamePin & " and Id_ProductPin = " & IdProductBox & " and  Id_SpecialNamePin = " & Id_specialnameBox
     
     
            Dim _oBddConnection As New BddUtils
            Dim _odtConnection As DataTable = _oBddConnection.ExecuteDataTable(_sSqlConnection, _oConn)
    Ce que je veux faire c'est quand je sélectionne les deux produit à partir les comboboxs, je dois afficher le résultat de la compatibilité dans un textbox ou un simple msgbox ou label, et que cet résultat apparaisse directement après la sélection du produit dans le deuxième combobox.

    Franchement je n'arrive pas à concrétiser ce besoin.

    Est ce que vous pourriez m'aider svp!?

    Nom : form.jpg
Affichages : 42
Taille : 33,1 Ko

  9. #9
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    juillet 2005
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : juillet 2005
    Messages : 456
    Points : 1 159
    Points
    1 159

    Par défaut

    Cool on avance !

    Par contre tu vas vite aller voir cette page SQLParameter et ainsi faire des requêtes paramétrés en lieu et place des requetes concat que je viens de voir dans ton précédent post.
    C'est indispensable sur ce forum , sinon tu vas t'attirer les foudres de bien des helpers ....
    Trêve de plaisanterie, c'est souvent à ce genre de détailles que l'on distingue un pro d'un débutant/étudiant, une requête concat dans le monde du travail c'est le mal absolue, cela ouvre les portes, entre autre, à l'injection SQL, ça pose des problèmes de cast, c'est moche... etc etc. bref que des avantages.

    Maintenant je vais lire ton post

    J@ck.

    [Edit après lecture] Tu as fait le plus dur ! Tu requêtes ton srv, tes combos sont pleines, maintenant tu veux faire le test de compatibilité entre tes 2 produits sélectionner.
    Aller on va se faire une méthode qui a comme paramètre 2 produits et retourne un boolean. Dans cette méthode tu te connecte à ton serveur, tu le requêtes pour connaitre la compatibilité, tu récupères le résultat et pouff !
    ET maintenant tu appels cette méthode soit sur l'event click d'un bouton de validation, soit tu l'appel (comme tu semblais le suggérer) dans le SelectedIndexChanged de la 2eme combo box..

    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  10. #10
    Candidat au Club
    Homme Profil pro
    Inscrit en
    décembre 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : décembre 2013
    Messages : 16
    Points : 2
    Points
    2

    Par défaut

    Merci, bon j'y suis depuis ce matin lol, et voilà ce que j'ai pu faire comme requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ...
    Private Sub ComboBox2_SelectedValueChanged(sender As Object, e As EventArgs) Handles ComboBox2.SelectedValueChanged
        Dim _sSqlComp As String = "Select p1.Id_Product, p1.Connection, p2.Id_Product, p2.Connection From CDS_PRODUCTS p1" &
                                  "inner Join COMPATIBILITY_CONNECTION c on c.Id_ProductPin = p1.Id_Product Or c.Id_ProductBox = p1.Id_Product" & " and p1.BoolIsCompatible = 1 " &
                                  "inner Join CDS_PRODUCTS p2 On p2.Id_Product = Case c.Id_ProductPin When p1.Id_Product Then c.Id_ProductBox Else c.Id_ProductPin End"
    ...
                End Sub

  11. #11
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    juillet 2005
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : juillet 2005
    Messages : 456
    Points : 1 159
    Points
    1 159

    Par défaut

    Eh oui en effet les débuts en développement sont souvent fastidieux, mais on pas des mecs pressés, y a que le chef qui est pressé !

    Sinon pour ton problème de comparaison de produit pour savoir si ils sont compatible ou non, la je ne pourrais pas vraiment t'aider, tout dépend de la logique que tu as mis dans ta bdd.
    Si tu as une table de compatibilité, avec une colonne refProduit1 une autre refProduit2 est une colonne IsCompatible, c'est bingo tu fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select IsCompatible From MaTableDesCompatibilite WHERE refProduit1 = @refPdt1 AND refProduit2 = @refProduit2
    Si tu as un résultat tu le traite et tu modifie l'affichage si pas de résultat alors c'est que ton association n'existe pas.

    Je vais être franc j'ai pas lu ton SQL, je le ferais demain si j'ai le temps pour essayer de te donner une piste, mais la maintenant ton pb n'est plus du VB, mais du SQL.

    J@ck.

    [EDIT] Du coup tu a bien une table de compatibilité, à partir de là tu as tout pour avancer.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  12. #12
    Candidat au Club
    Homme Profil pro
    Inscrit en
    décembre 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : décembre 2013
    Messages : 16
    Points : 2
    Points
    2

    Par défaut

    Bonjour,

    Voilà ce que j'ai pu faire par contre le résultat ne change pas quand je change les produits, donc y a un soucis avec ma requête ou dans la façon dont j'ai lu le résultat de la requête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     Private Sub ComboBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox2.SelectedIndexChanged
     
            Dim connection As New SqlConnection("Server= local; Database = test; Integrated Security = true")
     
            Dim command As New SqlCommand("select BoolIsCompatible FROM [test].[dbo].[COMPATIBILITY_CONNECTION]" &
                                          "WHERE Id_ProductPin='" & IdProductPin & "' and Id_ProductBox='" & IdProductBox & "'", connection)
     
            connection.Open()
     
            Dim reader As SqlDataReader = command.ExecuteReader()
     
            If (reader.HasRows()) Then
     
                reader.Read()
     
                TextBox1.Text = reader.GetBoolean(0)
     
            End If
     
            reader.Close()
     
            connection.Close()
        End Sub

  13. #13
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    juillet 2005
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : juillet 2005
    Messages : 456
    Points : 1 159
    Points
    1 159

    Par défaut

    Tu n'as pas appliqué mes conseils des posts précèdent....
    Du coup ma motivation va à la baisse...

    Je vais donc t'orienter vers la doc SqlDataReader et plus particulièrement, sa méthode Read()... que tu n'utilise pas correctement.

    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

Discussions similaires

  1. compatibilité des réels avec pascal (pour fichier de record)
    Par jacquesberger dans le forum Langage
    Réponses: 2
    Dernier message: 12/08/2005, 19h58
  2. [INFO] Liste des produits Oracle
    Par orafrance dans le forum SQL
    Réponses: 2
    Dernier message: 01/08/2005, 21h42
  3. [info]Licence des produits Java
    Par XavierZERO dans le forum Général Java
    Réponses: 12
    Dernier message: 16/01/2004, 16h27
  4. compatibilité des librairies directX8
    Par Freakazoid dans le forum DirectX
    Réponses: 3
    Dernier message: 23/05/2002, 21h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo