Boucle et IsDBNull ?. [Résolu]

autodidacte3 59 Messages postés mardi 21 juillet 2009Date d'inscription 25 décembre 2014 Dernière intervention - 1 juil. 2012 à 16:33 - Dernière réponse : autodidacte3 59 Messages postés mardi 21 juillet 2009Date d'inscription 25 décembre 2014 Dernière intervention
- 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 ».
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
autodidacte3 59 Messages postés mardi 21 juillet 2009Date d'inscription 25 décembre 2014 Dernière intervention - 4 juil. 2012 à 17:16
3
Merci
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+

Merci autodidacte3 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de autodidacte3
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 1 juil. 2012 à 19:23
0
Merci
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
Commenter la réponse de ucfoutu
autodidacte3 59 Messages postés mardi 21 juillet 2009Date d'inscription 25 décembre 2014 Dernière intervention - 2 juil. 2012 à 09:33
0
Merci
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...
Commenter la réponse de autodidacte3
autodidacte3 59 Messages postés mardi 21 juillet 2009Date d'inscription 25 décembre 2014 Dernière intervention - 2 juil. 2012 à 09:40
0
Merci
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."
Commenter la réponse de autodidacte3
MJPMJPMJP 18 Messages postés jeudi 12 février 2009Date d'inscription 15 février 2013 Dernière intervention - 2 juil. 2012 à 12:41
0
Merci
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
Commenter la réponse de MJPMJPMJP
autodidacte3 59 Messages postés mardi 21 juillet 2009Date d'inscription 25 décembre 2014 Dernière intervention - 2 juil. 2012 à 16:25
0
Merci
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"
Commenter la réponse de autodidacte3

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.