Problème type DBNULL

Résolu
amxeph Messages postés 8 Date d'inscription lundi 22 septembre 2008 Statut Membre Dernière intervention 14 février 2009 - 17 oct. 2008 à 02:51
amxeph Messages postés 8 Date d'inscription lundi 22 septembre 2008 Statut Membre Dernière intervention 14 février 2009 - 17 oct. 2008 à 18:30
Bonjour, j'ai un problème assez embêtant :

Voilà , j'ai un data set dont j'aimerais bien prendre la valeur de la 3e colonne pour toutes les lignes. Ici dans mon exemple je sais que j'ai 6 lignes j'ai donc fais ce petit code qui marche très bien.

       Dim angle As Integer = DSResume.Tables(0).Rows(0).Item(2) / 100 * 360
        Dim angle1 As Integer = DSResume.Tables(0).Rows(1).Item(2) / 100 * 360
        Dim angle2 As Integer = DSResume.Tables(0).Rows(2).Item(2) / 100 * 360
        Dim angle3 As Integer = DSResume.Tables(0).Rows(3).Item(2) / 100 * 360
        Dim angle4 As Integer = DSResume.Tables(0).Rows(4).Item(2) / 100 * 360
        Dim angle5 As Integer = DSResume.Tables(0).Rows(5).Item(2) / 100 * 360

Cependant, dans mon programme, je ne sais pas combien j'aurai de lignes j'aimerais donc faire une boucle de ce type :

For i As Integer = 1 To DSResume.Tables(0).Rows.Count
            Dim angle As Integer = DSResume.Tables(0).Rows(i - 1).Item(2) / 100 * 360
        Next

Mais probblème, dès que je fais ça lorsque je lance le programme VS m'envoie un erreur du type :
La conversion du type 'DBNull' en type 'Integer' n'est pas valide.

Je ne vois vraiment pas d'où vient le problème... une idée?

PS la datacolumn est en double et j'ai beeau mettre ma variable en double, je sais bien que ce n'est pas de là que vient le problème
________________________

Stéphane

4 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
17 oct. 2008 à 15:08
Salut
Le problème est que ta
tabled de la base de données contient des données NULL

Il faut tester ce cas avant.

De plus, il est recommandé de travailler avec option strict et explicit a ON sur des projet VB.NET
Et supprimer la bibliotheque de compatibility VB6 (msgbox --> MessageBox.Show()

Car normalement c'est incoherent de faire
DSResume.Tables(0).Rows(i - 1).Item(2) / 100 * 360
car
DSResume.Tables(0).Rows(i - 1).Item(2) est un object

il faut faire
Ctype(DSResume.Tables(0).Rows(i - 1).Item(2) / 100 * 360,Integer32) / 100 * 360

Et avant faire test
if(Not DSResume.Tables(0).Rows(i - 1).Item(2).Equals(DbNull.Value)) then
messagebox.show((Ctype(DSResume.Tables(0).Rows(i - 1).Item(2) / 100 * 360,Integer32) / 100 * 360).ToString())
else

end if

Bon coding
3
swan94 Messages postés 254 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 2 avril 2010
17 oct. 2008 à 10:05
Salut,

Déjà pourquoi tu commences à 1 dans ta boucle et non 0 alors que l'indice commence normalement à 0 et termine donc à Count-1 ?

Ensuite essaye de te faire afficher la valeur de chaque cellule en mettant un messagebox.show(DSResume.Tables(0).Rows(i - 1).Item(2)) à chaque itération.

Tiens nous au courant.

Cordialement,

Swan94
===============Si la réponse vous convient, merci de l'accepter=================
0
amxeph Messages postés 8 Date d'inscription lundi 22 septembre 2008 Statut Membre Dernière intervention 14 février 2009
17 oct. 2008 à 11:20
Oui j'avais déjà essayé ceci

    For i As Integer = 1 To DSResume.Tables(0).Rows.Count
            MsgBox(DSResume.Tables(0).Rows(i - 1).Item(2) / 100 * 360)
        Next

ça marche très bien. c'est pour ça que je comprends pas. Les valurs sont des nombres à virgule.. je sais pas si ça change qqc.

Sinon, merci bcp pour essayer de comprendre

Et l'histoire du Count -1 j'ai fait ça aussi mais ça change rien.
________________________
Stéphane
0
amxeph Messages postés 8 Date d'inscription lundi 22 septembre 2008 Statut Membre Dernière intervention 14 février 2009
17 oct. 2008 à 18:30
En effet j'avais une ligne dans le dataset qui était vide. J'avais oublié que j'avais une ligne pour vérifier la cloture des données dans le  dataset. Merci à toi et bonne soirée






________________________
Stéphane
0
Rejoignez-nous