Problème de champs vide.

Résolu
boy77000 Messages postés 12 Date d'inscription mardi 4 janvier 2005 Statut Membre Dernière intervention 5 mai 2006 - 24 avril 2006 à 18:12
boy77000 Messages postés 12 Date d'inscription mardi 4 janvier 2005 Statut Membre Dernière intervention 5 mai 2006 - 3 mai 2006 à 09:37
Salut je gère une base de données via OleDb de ADO.NET !

Descriptif de l'application:
Les données 'Nom' et 'Prénom' de ma table 'Clientold' sont affichées dans des textbox ('Nom.text' et 'Prenom.text') et j'ai des boutons 'précédent' et 'suivant' pour passer d'un enregistrement à l'autre. Certains prénoms ne sont pas rempli dans la base de données ( des gens ont un nom mais pas de prénom en gros )

Problème:
Quand je veux lire ma base de données cela fonctionne si je demande que le nom mais pas quand je demande le prénom car le champ est NULL sûrement.

Je ne sais pas où mettre ma requête pour annuler les contraintes de champs NULL sachant que sur ma base de données la contrainte champ null est autorisé.

Si il faut une requête Sql voici ce que j'ai trouver dites moi si c'est bon si il faut bien ce code Sql SVP merci!

Solution 1:
ALTER TABLE Clientold CHANGE 'Prénom' 'Prenom' TEXT
Solution 2:
ALTER TABLE Clientold CHANGE 'Prénom' VARCHAR( 100 ) ;

La question:
Comment enlevé la contrainte de champ non null

Merci d'avnce de vos nombreux messages que j'attends avec impatience!

7 réponses

boy77000 Messages postés 12 Date d'inscription mardi 4 janvier 2005 Statut Membre Dernière intervention 5 mai 2006
3 mai 2006 à 09:37
J'ai revérifier et en fait je mettais tromper de table quand j'avais vérifier et autorisé les champs vide je l'avais fait pour la table de  sauvegarde.

Donc maintenant ca fonctionne. Merci ++
3
asecher Messages postés 262 Date d'inscription lundi 20 octobre 2003 Statut Membre Dernière intervention 27 avril 2007 1
24 avril 2006 à 19:50
Un truc qui ne marche pas mal, c'est :

prenom.text = "" & rs!Prenom
(les joies du empty, null & c°)

Cordialement,

Alain 31
0
boy77000 Messages postés 12 Date d'inscription mardi 4 janvier 2005 Statut Membre Dernière intervention 5 mai 2006
25 avril 2006 à 10:23
@ mcs2006 :
Ta dernière solution est bien, j'y avais pas pensais, mais je suis pas sur qu'il accepte que j'update sous prétexte que c'est un champ vide. Faut que je regarde mais le Update fonctionne pas à cause des champs vides! Donc il faut que je l'autorise avant toutes manipulations!

@ asecher :
Désolé de paraître ignare Mais rs: c'est RecordSet
Et que fait ta fonction:
prenom.text = "" & rs!Prenom
Quoi si tu peut m'expliquer vite fait et me dire dans quoi je dois le mettre! (update, form load, read, ... )

En tout cas merci d'avoir répondu aussi vite.
0
asecher Messages postés 262 Date d'inscription lundi 20 octobre 2003 Statut Membre Dernière intervention 27 avril 2007 1
25 avril 2006 à 11:55
1 : rs est bien un recordset

Sinon, n'ayant pas ton code sous les yeux, ce n'est pas évident.

Tu peux enlever la contrainte NOT NULL en faisant un :
ALTER TABLE Clientold
ALTER Prenom SET NULL

Normalement "vide" n'est pas équivalent à Null (ce que fait mcs2006 en mettant '' (vide) sur tous les premons qui sont à Null).

A+

Alain 31
0

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

Posez votre question
boy77000 Messages postés 12 Date d'inscription mardi 4 janvier 2005 Statut Membre Dernière intervention 5 mai 2006
25 avril 2006 à 17:23
Attention les yeux je me lance, je postes le code de mon read.

<hr size= "2" width="100%"> ''''''''''Voir un enregistrement''''''''''
' 'Update' lock les table, le fait de faire un Close puis Open les délock
Me.ObjetConnection.Close()
Me.ObjetConnection.Open()

strSql = "SELECT Clientold.* FROM Clientold ORDER BY Nom" Pour info le ORDER BY fonctionne pas mais ceci est une autre histoire! lol
ObjetCommand = New OleDbCommand(strSql)
ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand)
ObjetCommand.Connection() = ObjetConnection
Me.ObjetDataAdapter.Fill(ObjetDataSet, "Clientold")
ObjetDataTable = ObjetDataSet.Tables("Clientold")

If RowNumber < 0 Then
ObjetConnection.Close()
Exit Sub
End If
'Lors de l'ouverture de la BD, s'il yn'y a aucun enregistrement
If RowNumber > ObjetDataTable.Rows.Count - 1 Then
ObjetConnection.Close()
Exit Sub
End If

'ObjetTable.Rows(Numéro de lignes).Item(Nom de colonne) donne le contenu d'un champ dans une case donnée
'Item peut avoir en paramètre le nom de la colonne ou son index
Me.Nom.Text = ObjetDataTable.Rows(RowNumber).Item("Nom").ToString
If Not isnull (ObjetDataSet, "Prénom") Then
Prenom.Text = ObjetDataTable.Rows(RowNumber).Item("Prénom").ToString
Else
Prenom.Text = ""
End If
'affichage des données dans le datagrid
DataGrid1.SetDataBinding(ObjetDataSet, "Clientold")

Me.ObjetConnection.Close()
<hr size="2" width="100%">En bleu la partie changée!
En vert ce qui n'est pas accepter!

Je rappel que je suis sous VB.NET et je n'ai pas fait de RecordSet mais un DataSet!

Voilà donc ce que mcs2006 ne va pas je sais pas pourquoi j'ai fais un Imports System.DBNull au début donc ca ne viens pas de là!

Ce n'est pas contre toi mcs2006 lol J'y peux rien si ca veux pas moi

@ asecher: Je te l'ai dit par MP mais je redis ici au cas ou quelqu'un d'autre puisse me répondre!
le :
ALTER TABLE Clientold
ALTER Prenom SET NULL

Cà se met où? (read, update, form load,..) et dans quoi? (dataset, dataadapter,...) car je suis pas en Sqlserver mais OleDb!
0
asecher Messages postés 262 Date d'inscription lundi 20 octobre 2003 Statut Membre Dernière intervention 27 avril 2007 1
25 avril 2006 à 17:51
Moi, je mettrais
Prenom.Text = "" & ObjetDataTable.Rows(RowNumber).Item("Prénom").ToString

à la place de
If Not isnull (ObjetDataSet, "Prénom") Then
Prenom.Text = ObjetDataTable.Rows(RowNumber).Item("Prénom").ToString
Else
Prenom.Text = ""
End If

D'autre part, pour le Alter Table (qui n'est à faire qu'une fois) :
Soit tu as ma main sur la base de données et tu enlève la contrainte Not Null sur le prénom, soit tu le met dans un strSQL avec un GO à la fin.
je n'utilise pas l'OLEDB donc je ne connais pas les syntaxes.

Cordialement,

Alain 31
0
boy77000 Messages postés 12 Date d'inscription mardi 4 janvier 2005 Statut Membre Dernière intervention 5 mai 2006
26 avril 2006 à 11:28
        <hr size= "2" width="100%">If Not IsDBNull( ObjetDataSet!Prénom ) Then
    Prenom.Text = "" & ObjetDataTable.Rows(RowNumber).Item("Prénom").ToString
Else
    Prenom.Text = ""
End If<hr size="2" width="100%">C'est bien IsDBNull maintenant qu j'y repense! lol
Mais cette fois c'est çà qu'il veut pas!
Mais moi j'ai un DataSet aors est-ce que c'est pareil avec un DataSet et un RecordSet !?!?

Ensuite j'ai tester un changement car le '!' m'a parut bizarre je me suis dit que c'était peut être du VB6 çà aussi, car dans mon code j'écrivais pas de cette façon. lol:
ObjetDataSet!Prénom ===> ObjetDataSet, "Prénom"
Mais ca ne marche pas non plus ! lol

Pour les Imports je penses qu'il vaut mieu en appeler trop que pas assez alors j'ai appeler tout çà:
<hr size="2" width="100%">Imports System
Imports System.Data
Imports System.Data.DataSet
Imports System.Data.OleDb
Imports Microsoft.VisualBasic
Imports System.DBNull
Imports Microsoft.VisualBasic.Information
<hr size="2" width="100%">Si ca n'est pas bien d'en appeler pour une certaines raison merci de me dire!
En rouge celle que j'ai appelées pour notre partie du code!
Car System.VisualBasic.Information ne fonctionne pas sûrement en VB6

Merci de m'avoir aider et de continuer à me supporter encore un peu car je sais que je suis relou!
On peut croire que j'atends tout sans chercher mais je vous assure avoir chercher et c'est la première fois que j'utilise VB.NET, je dois faire une gestion de base de données pour mon stage de fin d'étude! Et je penses m'en être bien sortit jusque là car j'ai réussi un read update ..... Je dis çà pour montrer que je suis pas là pour demander à chaue fois sans chercher avant! Voilà ++

Et merci d'avance!
0
Rejoignez-nous