Page 1 sur 1

[RESOLU]Test d'un champs vide

Publié : mer. 03/nov./2021 12:07
par omega
Bonjour

J'ai une table qui contient, entre autres, un champs numérique nommé statut. Au moment de la création de ma table, le champs statut ne contient rien du tout. Mon problème est le suivant:

Regardez ce code:

Code : Tout sélectionner

sql="Update MaTable set statut='1' where statut <>'1' "
La table contient environ une centaine d'enregistrements et statut est vide dans tous les enregistrements.
Cette instruction ne fait rien comme si statut n'est pas différent de 1.

Merci

Re: Test d'un champs vide

Publié : mer. 03/nov./2021 12:38
par Marc56
Si c'est un champs numérique alors status=1 pas '1' :wink:

Re: Test d'un champs vide

Publié : mer. 03/nov./2021 13:54
par omega
Bonjour Mar56

La syntaxe sql exige ce format d'écriture: where x='1' et non pas where x=1. Par contre on peut écrire if x=1 .....

Cela ne répond donc pas à ma question

Merci d'avoir essayé

Re: Test d'un champs vide

Publié : mer. 03/nov./2021 14:15
par GallyHC
sql="Update MaTable set statut='1' where statut is null" > null n'est pas une valeur donc pas comparable.

Re: Test d'un champs vide

Publié : mer. 03/nov./2021 14:39
par Marc56
omega a écrit : mer. 03/nov./2021 13:54 La syntaxe sql exige ce format d'écriture: where x='1' et non pas where x=1. Par contre on peut écrire if x=1 .....
Tu peux parfaitement te passer des ' ' pour des valeurs numériques dans un champs NUMERIC

Code : Tout sélectionner

UseSQLiteDatabase()

Filename$ = GetTemporaryDirectory() + "Test.sqlite"

If CreateFile(0, Filename$)
  Debug "Fichier de base de données créé"
  CloseFile(0)
EndIf

If OpenDatabase(0, Filename$, "", "")
  Debug "Connecté à PureBasic.sqlite"
  If DatabaseUpdate(0, "CREATE TABLE MaTable (statut NUMERIC);")
    Debug "Table créée"
  EndIf
  
;     If DatabaseUpdate(0, "INSERT INTO MaTable VALUES ('1');"  + 
;                          "INSERT INTO MaTable VALUES ('2');"  +
;                          "INSERT INTO MaTable VALUES ('3');")  
  
  If DatabaseUpdate(0, "INSERT INTO MaTable VALUES (1);"  + 
                       "INSERT INTO MaTable VALUES (2);"  +
                       "INSERT INTO MaTable VALUES (3);")
    

      
    Debug "INSERT 3 OK"
  EndIf  
  
  ;SQL.s = "Update MaTable set statut='1' where statut <>'1' "
  SQL.s = "Update MaTable set statut = 1 where statut <> 1 "
  
  If DatabaseUpdate(0, SQL)
    Debug "UPDATE OK"
  EndIf
  
EndIf

CloseDatabase(0)
(testé aussi avec MariaDB et PostgreSQL)

La solution est donnée par GallyHC

Code : Tout sélectionner

SQL.s = "UPDATE MaTable SET statut = 1 WHERE statut IS NULL;"
(avec ou sans ' ' )

:wink:

[RESOLU] Test d'un champs vide

Publié : mer. 03/nov./2021 14:59
par omega
Merci beaucoup à toi GallyHc merci à toi aussi Marc pour cette précision de format. De toute façon, les deux solutions marchent bien avec ou sans quotes. Je les ai testées toutes les 2.

IS NULL est exactement ce que je cherchais. Je viens de tester et a marche !

Merci encore et bonne continuation