Boucle et IsDBNull ?.

Résolu
autodidacte3 Messages postés 58 Date d'inscription mardi 21 juillet 2009 Statut Membre Dernière intervention 25 décembre 2014 - 1 juil. 2012 à 16:33
autodidacte3 Messages postés 58 Date d'inscription mardi 21 juillet 2009 Statut Membre Dernière intervention 25 décembre 2014 - 4 juil. 2012 à 17:16
Bonjours à tous les programmeurs et j’espère trouvé une solution.

Comme Autodidacte que je suis, je cherche à faire une boucle sur plusieurs colonnes de ma BDD Access dans une procédure de navigation mais je n’arrive
pas à le faire.

Voilà mon code

Private Sub Navigation()
        Beep()
'Pour naviguer dans la table j'utilise la variable N_l'enregistrement
'rows(N_l'enregistrement): cela permet de se déplacer dans les lignes du dataset.

  Val_ID = ds.Tables("Decision").Rows(N_Enregistrement).Item(0)

'On place ensuite les valeurs dans les textbox
'Avec le IF ça marche bien 
If IsDBNull(ds.Tables("Decision").Rows(N_Enregistrement).Item("NumDecisions")) Then
            Me.TB_NumDecision.Text = ""
        Else
            Me.TB_NumDecision.Text = ds.Tables("Decision").Rows(N_Enregistrement).Item(2)
        End If

If IsDBNull(ds.Tables("Decision ").Rows(N_Enregistrement).Item("Gestionnaires")) Then
            Me.txtGestionnaire.Text = ""
        Else
            Me.txtGestionnaire.Text = ds.Tables("Liste_Amis").Rows(N_Enregistrement).Item(8)
        End If

'J’utilise une boucle en raison que j’ai beaucoup de TextBox à géré.
'la navigation arrive sur un champ des champs vide. et oups
'Ça coince avec le message « La conversion du type 'DBNull' en type 'String' n'est pas valide. »
'L'exception InvalideCastException n'a pas été gérée
Dim i As Integer
        i = 0
Do While IsDBNull(ds.Tables("Decision").Rows.Count - 1 <> i) = False
            &#8217;30 textBox_11 ... à textBox_30
            If IsDBNull(ds.Tables("Decision").Rows.Item(i)) Then
                Me. textBox _11.Text = ""
                Me. textBox _12.Text = ""
                Me. textBox _13.Text = ""
'... 
            Else
               Me. textBox _11.Text = ds.Tables("Decision").Rows(N_Enregistrement).Item(16)
               Me. textBox _12.Text = ds.Tables("Decision").Rows(N_Enregistrement).Item(17)
               Me. textBox _13.Text = ds.Tables("Decision").Rows(N_Enregistrement).Item(18)
'... 
                Exit Do
            End If
            i = i + 1
        Loop
End Sub

'S&#8217;il y&#8217;à pas de solution de boucler royalement sur toutes les textbox alors je me contente de travailler avec Le IF « System « D ».

6 réponses

autodidacte3 Messages postés 58 Date d'inscription mardi 21 juillet 2009 Statut Membre Dernière intervention 25 décembre 2014
4 juil. 2012 à 17:16
Bonjours, après plusieurs essais, voilà ma boucle tant aimée "le boucle sur les champs IsDBnull" à adapter selon vos besoins. se n'est pas académique je le sais, mais c'est aux experts de le jugé...

Dim i As Integer
        Dim j As Integer
        i = 0
        Do While IsDBNull(ds.Tables("Decision").Rows.Count - 1 <> i) = False
            If IsDBNull(ds.Tables("Decision").Rows(i).Item(0)).ToString Then
                Me.txtRub1Detail.Text = ""
                Me.txtRub12Detail.Text = ""
                Me.txtRub13Detail.Text = ""
            Else
                Me.txtRub1Detail.Text = (ds.Tables("Decision").Rows(Place_Enregistrement).Item(16)).ToString
                Me.txtRub12Detail.Text = (ds.Tables("Decision").Rows(Place_Enregistrement).Item(17)).ToString
                Me.txtRub13Detail.Text = (ds.Tables("Decision").Rows(Place_Enregistrement).Item(18)).ToString
                Exit Do
            End If
            i = i + 1
            Loop


A+
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 juil. 2012 à 19:23
Bonjour,
Je crois que le plus simple est de reconsidérer tes tables.
Si tu ne veux pas de champ NULL, définis donc le champ en cause comme n'acceptant par ce NULL. Si tu veux qu'il accepte néanmoins une valeur, fais-lui accepter, par exemple, une chaîne vide.
J'ai d'ailleurs trouvé la discussion suivante, qui arrive à la même conclusion :
Tapez le texte de l'url ici.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
autodidacte3 Messages postés 58 Date d'inscription mardi 21 juillet 2009 Statut Membre Dernière intervention 25 décembre 2014
2 juil. 2012 à 09:33
Merci beaucoup ucfoutu, je vais faire de mon mieux pour faire une ptit Boucle sur les colonnes avec IsDBNull et j'espère y arriver pour la publier ici. y on a beaucoup d'amateur comme moi d'ailleurs qui ne trouve pas de repenses.
Merci encore...
0
autodidacte3 Messages postés 58 Date d'inscription mardi 21 juillet 2009 Statut Membre Dernière intervention 25 décembre 2014
2 juil. 2012 à 09:40
La repense du lien que ucfoutu donne ceci
En anglais:
"The exception is by design. You can't convert DBNull to a
string.
What do you want your function to return if the column
contains a null value? You could use the IsNull function on the
DataRow object to test for a Null value and avoid throwing the
exception.
There are a couple other options.
You can add attributes into your DataSet schema so the
strongly-typed DataSet class will automatically return a
particular value for the column when it contains DBNull. There's
a little bit of information on this in the documentation.
If you really have no use for null values in your database
or applications, you could mark the column in your database so it
does not support null values. Then mark the column in the
database and DataSet so its default value is an empty string."

En Français traduit par google:
"La seule exception est par la conception. Vous ne pouvez pas convertir DBNull à un
chaîne.

Que voulez-vous votre fonction de revenir si la colonne
contient une valeur nulle? Vous pouvez utiliser la fonction IsNull sur le
Objet DataRow pour tester une valeur Null et éviter de jeter le
exception.

Il ya quelques options autres.

Vous pouvez ajouter des attributs dans votre schéma DataSet de sorte que le
classe DataSet fortement typée sera automatiquement retourner une
une valeur particulière pour la colonne si elle contient DBNull. Il ya
un peu d'informations à ce sujet dans la documentation.

Si vous n'avez vraiment aucune utilisation pour les valeurs NULL dans votre base de données
ou des applications, vous pouvez marquer la colonne dans votre base de données de sorte qu'il
ne supporte pas les valeurs NULL. Ensuite, marquez la colonne dans la
base de données et DataSet donc sa valeur par défaut est une chaîne vide."
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MJPMJPMJP Messages postés 18 Date d'inscription jeudi 12 février 2009 Statut Membre Dernière intervention 15 février 2013
2 juil. 2012 à 12:41
bonjour
Do While IsDBNull(ds.Tables("Decision").Rows.Count - 1 <> i) = False

peut etre
Do While IsDBNull(ds.Tables("Decision").Rows.Count - 1 < i) = False

@+JP
0
autodidacte3 Messages postés 58 Date d'inscription mardi 21 juillet 2009 Statut Membre Dernière intervention 25 décembre 2014
2 juil. 2012 à 16:25
Merci MJPMJPMJP, je pense que le problème de ma boucle réside dans le IF que je ne trouve pas encore la bonne formule. Voici mon dernier essai de la boucle, ça marche jusqu'à qu'un champ vide pointe son nez...

Dim i As Integer
        Dim j As Integer
        i = 0
        j = 16
Do While IsDBNull(ds.Tables("Decision").Rows.Count - 1 < i) = False
            'Do While IsDBNull(ds.Tables("Decision").Rows.Count - 1 <> i) = False
            If IsDBNull(ds.Tables("Decision").Rows(i).Item(j)) Then
                Me.txtRub1Detail.Text = ""
                Me.txtRub12Detail.Text = ""
                Me.txtRub13Detail.Text = ""

            Else
                Me.txtRub1Detail.Text = (ds.Tables("Decision").Rows(Place_Enregistrement).Item(16))
                Me.txtRub12Detail.Text = (ds.Tables("Decision").Rows(Place_Enregistrement).Item(17))
                Me.txtRub13Detail.Text = (ds.Tables("Decision").Rows(Place_Enregistrement).Item(18))
                Exit Do
            End If
            i = i + 1
        Loop

L'erreur est toujours "L'exception InvalideCastException n'a été géré"
"La conversion du type 'DBNull en type 'string' n'est pas valide"
0
Rejoignez-nous