|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : mai 2005 Messages : 91 ![]() |
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 |
|
|
00
|
|
|
#2 |
![]() ![]() |
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.
|
|
00
|
|
|
#3 | |
|
Membre Expert
![]() ![]() François DurandSpécialiste Delivery Mainframe IBM Inscription : octobre 2005 Messages : 1 097 ![]() |
Citation:
Pour DB2 X2 peut tout à fait contenir des espaces ... |
|
|
|
00
|
|
|
#4 |
|
Membre du Club
![]() Inscription : mai 2005 Messages : 91 ![]() |
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... |
|
|
00
|
|
|
#5 | ||
![]() ![]() |
Citation:
Citation:
|
||
|
00
|
|
|
#6 |
|
Membre du Club
![]() Inscription : mai 2005 Messages : 91 ![]() |
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 |
|
|
00
|
|
|
#7 |
|
Nouveau Membre du Club
![]() Développeur Java Inscription : septembre 2006 Messages : 37 ![]() |
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 |
|
|
00
|
|
|
#8 |
|
Membre du Club
![]() Inscription : mai 2005 Messages : 91 ![]() |
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 |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com