Précédent   Forum des professionnels en informatique > Bases de données > DB2
DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/05/2007, 15h10   #1
Membre du Club
 
Inscription : mai 2005
Messages : 91
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 91
Points : 40
Points : 40
Par défaut Valeur Not Null sous Access

Bonjour,

J'utilise l'éditeur de tables Access pour remplir mes tables sous DB2.
J'ai une table dont la description (ddl) est la suivante :
CREATE TABLE table1
(D1 CHAR(6) NOT NULL ,
C1 CHAR(5) NOT NULL ,
X2 CHAR(4) NOT NULL ,
Q1 DECIMAL(9) NOT NULL WITH DEFAULT,
M1 DECIMAL(15) NOT NULL WITH DEFAULT,
CONSTRAINT DAMCED PRIMARY KEY (D1 ,
C1 ,
X2 ) )


D1 et C1 sont des clés étrangères qui sont contenues également dans la clé primaire.
J'ai une erreur d'ingrité si je ne remplis pas de valeurs dans D1 ou C1.
X2 fait parti de la clé primaire pourtant lorsque je remplis des valeurs dans D1, C1 et pas de valeurs pour X2 (laissé à blanc), je n'ai pas d'erreur.
Pourtant le champ X2 devrait etre not null... non ?

je vous remercie de votre aide.

Tux
tux2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2007, 18h07   #2
jab
Rédacteur
 
Avatar de jab
 
Homme Jean-Alain Baeyens
SharePoint developpeur
Inscription : février 2004
Messages : 1 172
Détails du profil
Informations personnelles :
Nom : Homme Jean-Alain Baeyens
Âge : 48
Localisation : Belgique

Informations professionnelles :
Activité : SharePoint developpeur
Secteur : Service public

Informations forums :
Inscription : février 2004
Messages : 1 172
Points : 3 131
Points : 3 131
Envoyer un message via ICQ à jab Envoyer un message via MSN à jab Envoyer un message via Skype™ à jab
Oui en effet, il faudrait voir la valeur mise dans la DB. Peut être une chaine vide et non pas une valeur nulle. Par expérience, je sais que Access à des fois du mal avec certaines tables liées de DB2.
jab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2007, 20h12   #3
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 097
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 53
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 097
Points : 1 706
Points : 1 706
Citation:
Envoyé par tux2005
...
J'ai une erreur d'intégrité si je ne remplis pas de valeurs dans D1 ou C1.
X2 fait parti de la clé primaire pourtant lorsque je remplis des valeurs dans D1, C1 et pas de valeurs pour X2 (laissé à blanc), je n'ai pas d'erreur.
Pourtant le champ X2 devrait etre not null... non ?
Non ... "blanc" n'est pas NULL ...
Pour DB2 X2 peut tout à fait contenir des espaces ...
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2007, 09h35   #4
Membre du Club
 
Inscription : mai 2005
Messages : 91
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 91
Points : 40
Points : 40
Bonjour,

Merci pour vos réponses.

Donc si je comprends bien Access considère que le blanc n'est pas pas une valeur Null ?
Et cela ne le dérange pas d'avoir une clé primaire à blanc ?

J'ai fait un essai en mettant à ma colonne X2 la valeur "Null" mais il ne m'a toujours pas sorti d'erreur.

Savez comment comment lui provoquer l'erreur ?
autrement dit quelle valeur est-ce que je dois mettre pour qu'il considère que c'est une valeur nulle et donc non acceptable dans mon cas ?

je vous remercie par avance.

Tux

NB :
Si cela peut vous aider voici l'erreur l'erreur que j'ai quand j'essaye de mettre 2 fois la meme valeur blanc :
Soit :
D1...C1...X2
1......5....
1......5....

Au moment de valider la 2 ème ligne, j'ai l'erreur suivante (normale car j'essaye d'attribuer 2 fois la meme clé primaire).
UPDATE WOULD CAUSE DUPLICATE VALUE FOR INDEX. SQLCODE = -803
Ce qui est prouve bien qu'il considère le blanc comme valeur... mais je ne comprends pas pkoi...
tux2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2007, 11h32   #5
jab
Rédacteur
 
Avatar de jab
 
Homme Jean-Alain Baeyens
SharePoint developpeur
Inscription : février 2004
Messages : 1 172
Détails du profil
Informations personnelles :
Nom : Homme Jean-Alain Baeyens
Âge : 48
Localisation : Belgique

Informations professionnelles :
Activité : SharePoint developpeur
Secteur : Service public

Informations forums :
Inscription : février 2004
Messages : 1 172
Points : 3 131
Points : 3 131
Envoyer un message via ICQ à jab Envoyer un message via MSN à jab Envoyer un message via Skype™ à jab
Citation:
Envoyé par tux2005
Donc si je comprends bien Access considère que le blanc n'est pas pas une valeur Null ?
C'est le cas de toute les DB donc de DB2 aussi.

Citation:
Envoyé par tux2005
Et cela ne le dérange pas d'avoir une clé primaire à blanc ?
Non une chaine vide (blanc) est une valeur donc pas de problème.
jab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2007, 12h06   #6
Membre du Club
 
Inscription : mai 2005
Messages : 91
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 91
Points : 40
Points : 40
ok merci
mais alors à quoi correspond une valeur nulle ?
par quoi remplacer cette chaine vide pour qu'il considère que c'est une valeur nulle ?

Merci par avance

Bonne journée

Tux
tux2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2007, 13h09   #7
Nouveau Membre du Club
 
Développeur Java
Inscription : septembre 2006
Messages : 37
Détails du profil
Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : septembre 2006
Messages : 37
Points : 29
Points : 29
Attention, ne pas confondre la valeur 'NULL', et NULL (sans quotes) qui signifie "pas de valeur". La 1ère est une chaine tout ce qu'il y a de plus valide, contenant les 4 lettres N, U, L et L. La 2ième est une constante (un mot-clé si tu préfères) clairement identifiée dans le language SQL de tous les SGBD.

Si tu as fait INSERT INTO tatable (tonchamp) values ('NULL') tu as inséré une valeur contenant la chaine 'NULL', ce qui n'équivaut absolument pas à faire :
INSERT INTO TABLE (tonchamp) VALUES (NULL).

Dans ce second cas uniquement, tu auras l'erreur que tu "souhaites" obtenir.
Fais attention à ne pas utiliser les guillemets/quotes de façon abusive, c'est ce qui manifestement te cause des ennuis, pour rien, puisqu'il y a des règles à leur utilisation :

- On utilise majoritairement les quotes pour délimiter les chaines de caractère et les dates. (Note, parfois pour les dates le délimiteur est # et non pas ')
- On utilise parfois des guillemets ou des quotes pour délimiter les noms de certains objets (noms des tables et des champs le plus souvent).
- En fonction du SGBD, on n'utilise pas de ' pour délimiter les valeurs numériques (en tout cas DB2 n'en veut pas)

Exemples corrects (au moins sur DB2) :

INSERT INTO "SCHEMA"."TABLE" (monblabla, dateblabla) VALUES ('du texte', NULL)
INSERT INTO tableBidon ("monblabla", "dateblabla") VALUES ('encore du texte', '2007-05-10')
INSERT INTO "matable" (nom, salaire) VALUES ('Bill Gates', 999999999)


Maintenant, il se peut que la syntaxe SQL d'ACCESS et celle de DB2 ne concordent pas complètement. Si après mon explication tu ne comprends toujours pas ou que tu n'as clairement pas le comportement attendu, j'imagine qu'ACCESS interprète NULL comme 'NULL'. Or 'NULL', pour DB2, c'est du texte, pas NULL Ca fait un moment que je n'ai pas utilisé Access, donc je ne sais pas si c'est vraiment vrai ou pas.
xss.xas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2007, 17h02   #8
Membre du Club
 
Inscription : mai 2005
Messages : 91
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 91
Points : 40
Points : 40
oki merci beaucoup pour toutes ses explications !!

je pense qu'Access interprete très mal la valeur null...
enfin en gros pour lui il n'y en a pas, si on laisse un blanc, il considère que c'est une chaine vide et si on met NULL (sans quote ou avec) il ne considère jamais que c'est la valeur nulle dont nous parlons depuis le début !!

encore merci pour les explications.

++
Tux
tux2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h24.


 
 
 
 
Partenaires

Hébergement Web