IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Prendre donnée de type Double dans une colonne d'une BDD sql en recherchant par String


Sujet :

VB.NET

  1. #21
    Membre du Club Avatar de Adakhum
    Homme Profil pro
    Ingénieur Mécanique Numérique
    Inscrit en
    Mars 2014
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur Mécanique Numérique

    Informations forums :
    Inscription : Mars 2014
    Messages : 125
    Points : 58
    Points
    58
    Par défaut
    Merci pour ces infos, je l'ignorai chaparo !

    J'arrête pas de faire des points d'arrêt et des espions pour voir ce qui se cache dans mes variables c'est bien pratique !

    Il y a des nombres dans mes cases de "ligne" quand ça va bien, et quand il n'a rien trouvé dans ligneTrouvees, il met des {System.DBNull}" dans les cases. Je ne vois pas trop l’intérêt, toujours est-il que je n'arrive pas à lui dire :

    SI il y a des {System.DBNull} dans une cases, TU n'y vas pas ! (et il y va quand même ... et du coup ça fait une erreur parce qu'il essaie de convertir {System.DBNull} en double donc forcément ...

    Du coup j'ai essayé de lui dire :
    SI il y a "Nothing" ou "" dans une cases, TU n'y vas pas ! (et il y va quand même ... idem ... )

    S'il y a des Dieux du DataRowView, je m'incline devant leur savoir !


    EDIT pour Kropernic : D'accord, mais lorsque mon DataRowView va chercher dans ma DB et qu'il y a des trous dans celle-ci (et ça me fait bien ch.. ) il renvoie direct un {System.DBNull} Je ne sais pas si je peux vraiment l’empêcher ?

    Maintenant j'aimerais juste détecter quand il y en a un, et j'y arrive même pas ^^
    Hey sinon ... je peux détecter si ça fait une erreur ? du coup je sais que s'il y a une erreur ça vient de là.. je peux peut-être utiliser un Try Catch ?!

  2. #22
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 206
    Points : 455
    Points
    455
    Par défaut
    Tu as essayer avec ca ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nullCheck = IsDBNull(testVar)
    Penses à aller voir la MSDN (ici) ils ont réponse à toutes les fonctions présentes dans le framework.

  3. #23
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Hello,

    Suis loin d'être un pro du datarowview vu que je n'en utilise jamais ^^.

    Par contre, j'ai encore une remarque à faire. D'après le code que tu montres, la clause SELECT de ta requête sql est SELECT *.

    Ce n'est pas une bonne pratique non plus.

    Cela pourrait encore passer si dans ton code, tu accédais aux infos via les noms des colonnes mais si tu n'as pas vraiment besoin de toutes les colonnes de ta table, tu vas donc faire transiter par le réseau tout un tas d'infos inutiles. Suivant le volume de données à récupérer cela pourrait être assez pénalisant.
    Dans ton cas en plus, tu accèdes aux données via un indice. Selon toi, que se passera-t-il si quelqu'un (toi ou l'admin db) modifie la structure de la table (ou vue, ou fonction de type table) et y ajoute une colonne ailleurs qu'à la fin ? Du coup, vu que tout sera décalé d'un cran, tu n’accéderas plus aux bonnes infos.

    En conclusion, ne jamais utiliser SELECT * mais toujours spécifier la liste des colonnes nécessaires (et rien de plus).

    En plus, si tu sais que certaines colonnes peuvent contenir un marqueur NULL, si tu as la possibilité de leur attribuer une valeur par défaut, n'hésite surtout pas ! Tu ne seras plus ennuyer avec les System.DBNULL. J'ignore quel est ton domaine de travail mais dans le mien, j'ai la chance de pouvoir toujours m'arranger pour n'avoir jamais de NULL dans mes résultats de requête et cela simplifie la vie de tout le monde.

  4. #24
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 206
    Points : 455
    Points
    455
    Par défaut
    Dans le prochain message Kropernic nous explique l'architecture DAL-PARSER-DTO-POCO.

    Sinon il a tout à fait raison pour remplacer le * contre le nom des colonnes nécessaire.

  5. #25
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Citation Envoyé par chaparo Voir le message
    Dans le prochain message Kropernic nous explique l'architecture DAL-PARSER-DTO-POCO.

    Sinon il a tout à fait raison pour remplacer le * contre le nom des colonnes nécessaire.
    Bah quoi ? Elle est très bien cette architecture. Bon après, j'suis loin d'être un pro en POO.

  6. #26
    Membre du Club Avatar de Adakhum
    Homme Profil pro
    Ingénieur Mécanique Numérique
    Inscrit en
    Mars 2014
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur Mécanique Numérique

    Informations forums :
    Inscription : Mars 2014
    Messages : 125
    Points : 58
    Points
    58
    Par défaut
    Tu as bien raison Kropernic ! Si l'admin de la DB change le truc je suis foutu ! ^^ Mais vu que la DB en question dépend de doc de l'ASME, c'est un truc plutot méga immuable dans le temps donc je suis plutot à l'aise je pense ! Sinon il me rappellerons, me rembaucherons et j'aurais tout gagné haha


    J'ai enfin réussi (et grâce à vous TOUS ! Chaque contribution m'a aidé!) à finir ce code ! Je vous donne le morceau que j'ai modifié pour que ça marche. Je vous rappelle le problème principal : savoir quand est ce qu'une case indique {System.DBNull} dans un DataRowView :

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    If ligneTrouvees.Length = 0 Then
                'MsgBox("Il n'y a pas de valeurs pour le matériau choisi.")
            Else
                For Each ligne In ligneTrouvees
     
                    ' Recherche des bornes inférieure et supérieure des températures 
                    If TempCelsius < -30 And Not IsDBNull(ligne.Item(8)) Then
                        dStressAllowInf = 0
                        dStressAllowSup = ligne.Item(8)
                        dTemperatureInf = 0
                        dTemperatureSup = -30
                    ElseIf TempCelsius <= 40 Then
                        dTemperatureInf = -30
                        dTemperatureSup = 40
                        If Not IsDBNull(ligne.Item(8)) And Not IsDBNull(ligne.Item(9)) Then
                            dStressAllowInf = ligne.Item(8)
                            dStressAllowSup = ligne.Item(9)
                        Else
                            dStressAllowInf = 0
                            dStressAllowSup = 0
                        End If
                    ElseIf TempCelsius <= 65 Then
                        dTemperatureInf = 40
                        dTemperatureSup = 65
                        If Not IsDBNull(ligne.Item(9)) And Not IsDBNull(ligne.Item(10)) Then
                            dStressAllowInf = ligne.Item(9)
                            dStressAllowSup = ligne.Item(10)
                        Else
                            dStressAllowInf = 0
                            dStressAllowSup = 0
                        End If
     
                    ElseIf TempCelsius <= 100 Then
                        dTemperatureInf = 65
                        dTemperatureSup = 100
                        If Not IsDBNull(ligne.Item(10)) And Not IsDBNull(ligne.Item(11)) Then
                            dStressAllowInf = ligne.Item(10)
                            dStressAllowSup = ligne.Item(11)
                        Else
                            dStressAllowInf = 0
                            dStressAllowSup = 0
                        End If
     
                    ElseIf TempCelsius <= 900 Then
                        i = 0
                        While TempCelsius <= 900 - (i * 25)
                            dTemperatureInf = 900 - ((i + 1) * 25)
                            dTemperatureSup = 900 - (i * 25)
                            i += 1
                        End While
     
                        Try
                            If Not IsDBNull(ligne.Item(44 - i)) _
                                And Not IsDBNull(ligne.Item(44 - i + 1)) Then
                                dStressAllowInf = ligne.Item(44 - i)
                                dStressAllowSup = ligne.Item(44 - i + 1)
                            Else
                                If Not IsDBNull(ligne.Item(44 - i)) _
                                And Not IsDBNull(ligne.Item(44 - i + 2)) _
                                And TempCelsius <= 875 Then
                                    dStressAllowInf = ligne.Item(44 - i)
                                    dStressAllowSup = ligne.Item(44 - i + 2)
                                Else
                                    If Not IsDBNull(ligne.Item(44 - i - 1)) _
                                    And Not IsDBNull(ligne.Item(44 - i + 1)) _
                                    And TempCelsius <= 875 Then
                                        dStressAllowInf = ligne.Item(44 - i - 1)
                                        dStressAllowSup = ligne.Item(44 - i + 1)
                                    End If
                                End If
                            End If
                        Catch
                            TB_metSa.Text = "NA"
                            Exit Function
                            'MsgBox("Veuillez vérifier la saisie de votre température et de votre matériau car sa sontrainte admissible n'est pas interpolable")
                        End Try
                    End If
                Next
            End If

  7. #27
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Citation Envoyé par Adakhum Voir le message
    Tu as bien raison Kropernic ! Si l'admin de la DB change le truc je suis foutu ! ^^ Mais vu que la DB en question dépend de doc de l'ASME, c'est un truc plutot méga immuable dans le temps donc je suis plutot à l'aise je pense ! Sinon il me rappellerons, me rembaucherons et j'aurais tout gagné haha
    C'est crapuleux mais bon, même si je n'aime pas (la façon de penser), par les temps qui courent, je peux comprendre ^^.
    Par contre, penseras-tu à ce moment-là que c'est à cause de cela ? Peut-être t'arracheras tu les cheveux pendant de longue heure avant de te rendre compte que c'est juste un problème d'indice.

    Tu pourrais aussi voir les choses sous cet angle : lors d'un changement de format, ils s'étonneront que ton application fonctionne toujours et se souviendront que tu as fait du bon boulot quand ils chercheront quelqu'un pour leur prochain projet.

  8. #28
    Membre du Club Avatar de Adakhum
    Homme Profil pro
    Ingénieur Mécanique Numérique
    Inscrit en
    Mars 2014
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur Mécanique Numérique

    Informations forums :
    Inscription : Mars 2014
    Messages : 125
    Points : 58
    Points
    58
    Par défaut
    Nan mais sérieusement ces tables ne sont jamais retouchées, au pire il y a des lignes en plus de rajoutées et ça mon programme le prendra en compte sans problèmes.

    Ensuite c'est aussi parce que ça marche comme ça et que je suis d'être très bon en vb.net donc ... Et enfin je n'ai plus le temps ^^
    c'était pour ma bonne conscience merci pour tout Kropernic

  9. #29
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Mais il n'y aurait que la clause SELECT de la requête à modifier... (et éventuellement les indices utilisés suivant ce que * renvoi et ce que tu aurais besoin).

  10. #30
    Membre du Club Avatar de Adakhum
    Homme Profil pro
    Ingénieur Mécanique Numérique
    Inscrit en
    Mars 2014
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur Mécanique Numérique

    Informations forums :
    Inscription : Mars 2014
    Messages : 125
    Points : 58
    Points
    58
    Par défaut
    Ok, mais j'exploite quasiment toute les données que je prend dans la table. Elle fait 50 colonnes et je peux en utiliser 40 environ ...

  11. #31
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    50 colonnes !!!

    Et une table obèse, une ! J'me doute que tu n'y es pour rien mais en général, une table avec plus de 20 colonnes (et encore j'suis large), c'est qu'il y a un problème au niveau de la modélisation déjà ^^.

    Comme ça tu sais

  12. #32
    Membre du Club Avatar de Adakhum
    Homme Profil pro
    Ingénieur Mécanique Numérique
    Inscrit en
    Mars 2014
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur Mécanique Numérique

    Informations forums :
    Inscription : Mars 2014
    Messages : 125
    Points : 58
    Points
    58
    Par défaut
    Non en effet je n'y suis pour rien, mais je pense que le mec qu'il l'a faite n'y était pour rien non plus. (et c'est pas la plus grosse )

    Cette table contient, pour des paliers de température, des coefficients d'admissibilité de contraintes matériaux. Du coup le faire sur plus d'une table aurait été vraiment gavant :/ Du coup je récupère ces valeurs et j'interpole à la température que je souhaite et voila !

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 7
    Dernier message: 04/06/2015, 12h23
  2. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 13h58
  3. Réponses: 2
    Dernier message: 18/11/2012, 12h25
  4. Réponses: 7
    Dernier message: 25/03/2011, 11h52
  5. [2.0] Mettre une Checkbox dans le header d'une colonne d'une DatagridView
    Par aurelien.tournier dans le forum Windows Forms
    Réponses: 5
    Dernier message: 23/01/2007, 11h27

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