amxeph
Messages postés8Date d'inscriptionlundi 22 septembre 2008StatutMembreDernière intervention14 février 2009
-
17 oct. 2008 à 02:51
amxeph
Messages postés8Date d'inscriptionlundi 22 septembre 2008StatutMembreDernière intervention14 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
________________________
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 juillet 201137 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
swan94
Messages postés254Date d'inscriptionjeudi 29 juillet 2004StatutMembreDerniè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=================
amxeph
Messages postés8Date d'inscriptionlundi 22 septembre 2008StatutMembreDernière intervention14 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