IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

requete Update sur champ date vide


Sujet :

Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 483
    Points : 128
    Points
    128
    Par défaut requete Update sur champ date vide
    Salut tous j'ai un petit problème sur une requête .J'ai un champ de type date dans ma table paradox que je rempli a l'aide d'un Maskedit avec un masque de saisi 01/12/2000.Si je veux le modifier avec une requête et que le champ n'est pas vite ok pas de problème, mais si il est vide j'ai une érreur
    ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DataModule1.Query1.SQL.Clear;
    DataModule1.Query1.SQL.Add('Update matable.DB set Mat = '+ QuotedStr(Mat.Text)
    +',Statut = '+ QuotedStr(Statut.Text)
    +',Sexe = '+ QuotedStr(Sexe.Text)
    +',Nom = '+ QuotedStr(Nom.Text)
    +',Date = '+ QuotedStr(Date.Text)
    +' where Idmatable ='+ QuotedStr(Id.caption)+'');
    DataModule1.Query1.ExecSQL;
    et il possible de faire un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DataModule1.Query1.SQL.Clear;
    DataModule1.Query1.SQL.Add('Update matable.DB set Mat = '+ QuotedStr(Mat.Text)
    +',Statut = '+ QuotedStr(Statut.Text)
    +',Sexe = '+ QuotedStr(Sexe.Text)
    +',Nom = '+ QuotedStr(Nom.Text)
    if Date.text<>'  ' then begin
    +',Date = '+ QuotedStr(Date.Text)
    end;
    +' where Idmatable ='+ QuotedStr(Id.caption)+'');
    DataModule1.Query1.ExecSQL;
    comment faire dans le cas d'un champ date vide .Merci de votre aide

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    je ne connais pas paradox

    mais si les contraintes de la colonne date indique qu'une valeur NULL (et non vide) est interdite, cela n'est pas etonnant que cela renvoie une erreur.
    Par ailleurs, un type de champ date est un "numerique" donc une valeur vide au sens chaine (une chaine ne contenant rien; mais pas NULL) n'est pas valide non plus.


    donc une valeur de date doit contenir une dates ou un NULL

    a+
    Merci d'ajouter un sur les tags qui vous ont aidé

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 483
    Points : 128
    Points
    128
    Par défaut pas obligatoire
    Citation Envoyé par dehorter olivier Voir le message
    je ne connais pas paradox

    mais si les contraintes de la colonne date indique qu'une valeur NULL (et non vide) est interdite, cela n'est pas etonnant que cela renvoie une erreur.
    Par ailleurs, un type de champ date est un "numerique" donc une valeur vide au sens chaine (une chaine ne contenant rien; mais pas NULL) n'est pas valide non plus.


    donc une valeur de date doit contenir une dates ou un NULL

    a+
    dans ma table le champ n'est pas obligatoire .

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    donc il faut utiliser la syntaxe utilisant les NULLs (si cela existe sous paradox ?)

    a+
    Merci d'ajouter un sur les tags qui vous ont aidé

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 483
    Points : 128
    Points
    128
    Par défaut j'ai trouvé
    j'ai trouvé une petite astuce, j'ai simplement fais deux requête

    me requete principal j'ai retirer le champ date
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    DataModule1.Query1.SQL.Clear;
    DataModule1.Query1.SQL.Add('Update matable.DB set Mat = '+ QuotedStr(Mat.Text)
    +',Statut = '+ QuotedStr(Statut.Text)
    +',Sexe = '+ QuotedStr(Sexe.Text)
    +',Nom = '+ QuotedStr(Nom.Text)
    +' where Idmatable ='+ QuotedStr(Id.caption)+'');
    DataModule1.Query1.ExecSQL;

    et ma deuxieme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if Date1.Text<>'' then begin
    DataModule1.Query1.SQL.Clear;
    DataModule1.Query1.SQL.Add('Update matable.DB set Date1 = '+ QuotedStr(Date1.text)
    +' where Idmatable ='+ QuotedStr(Id.caption)+'');
    DataModule1.Query1.ExecSQL;
    end;
    merci tous le problème est résolu

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 483
    Points : 128
    Points
    128
    Par défaut re probleme
    Avec ma requête impossible de supprimer une date ,pourtant dans ma table paradox il n'est pas oblige de remplir le champs.
    j'ai le message

    le proget a provoqué une classe d'exeption EDBEngineError avec le message 'Différence de type dans une expression'

  7. #7
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    comme je l'ai indique normalement un champ date est en realite un nombre.

    La chaine date (ex : 25/04/201) est change implicitement par sa valeur numerique.

    lorsque la chaine est "vide", la conversion ne peut avoir lieu. Ce qui m'etonne c'est que cela fonctionne avec un update

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE table SET table.date = ''
    WHERE table.date = ''
    (requete stupide je l'avoue )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE FROM table
    WHERE table.date = ''
    c'est 2 types de requetes ne devraient pas fonctionner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE FROM table
    WHERE table.date IS NULL
    par contre celle ci est correcte
    Merci d'ajouter un sur les tags qui vous ont aidé

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 483
    Points : 128
    Points
    128
    Par défaut merci maiss
    Citation Envoyé par dehorter olivier Voir le message
    comme je l'ai indique normalement un champ date est en realite un nombre.

    La chaine date (ex : 25/04/201) est change implicitement par sa valeur numerique.

    lorsque la chaine est "vide", la conversion ne peut avoir lieu. Ce qui m'etonne c'est que cela fonctionne avec un update

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE table SET table.date = ''
    WHERE table.date = ''
    (requete stupide je l'avoue )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE FROM table
    WHERE table.date = ''
    c'est 2 types de requetes ne devraient pas fonctionner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE FROM table
    WHERE table.date IS NULL
    par contre celle ci est correcte
    Merci Oliver mais je ne veux pas faire un delete main impérativement un Update .comment dois je faire ?
    merci d'avance de ton aide

  9. #9
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    bonjour

    il ne s'agit pas d'une suppression donc mais d'une mise a jour.

    si tu veux mettre la date a NULL


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE table SET table.date = NULL
    WHERE table.Idmatable = :id_table
    la procedure pourrait ressembler a cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DataModule1.Query1.SQL.Clear;
    DataModule1.Query1.SQL.Add('Update matable.DB set Date1 = ';
    if Date1.Text<>'' then 
    begin
         DataModule1.Query1.SQL.Add(QuotedStr(Date1.text));
    end else
    begin
         DataModule1.Query1.SQL.Add(QuotedStr('NULL'));
    end
     DataModule1.Query1.SQL.Add(' where Idmatable ='+ QuotedStr(Id.caption)+'');
    DataModule1.Query1.ExecSQL;
    a+
    Merci d'ajouter un sur les tags qui vous ont aidé

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 271
    Points : 491
    Points
    491
    Par défaut
    Une bonne pratique a dopter est d'utiliser les parametres dans les requetes SQL, c'est plus rapide, permet d'eviter pas mal de problemes de securité et garde le code clair et facile a maintenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    with  DataModule1.Query1 do
      begin
      SQL.Clear;
      SQL.Add('Update matable.DB Set Date1 = :ParamDate Where Idmatable = :ParamIdmatable');
      ParamByName('ParamDate').DataType:=ftDate;
      ParamByName('ParamDate').value := NULL;
      if Date1.Text<>'' then ParamByName('ParamDate').AsDate := StrToDate(Date1.text);
      ParamByName('ParamIdmatable').AsString := Id.text;
      ExecSQL;
      end;

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 483
    Points : 128
    Points
    128
    Par défaut merci
    merci tous , votre aides est exceptionnel .Merci de vos réponces et de prendre le temps

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Update] sur champ vide
    Par userB dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 26/06/2007, 10h22
  2. Requete sur champ Date
    Par kmaniche dans le forum C++Builder
    Réponses: 5
    Dernier message: 31/10/2006, 10h38
  3. Requete sur champ DATE MySQL
    Par tom06440 dans le forum Requêtes
    Réponses: 3
    Dernier message: 17/09/2006, 17h45
  4. [SQL Server] Requete update sur 2 champs
    Par galou10 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 21/02/2006, 20h22
  5. champ date vide, requete
    Par w.b. dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 15/02/2005, 16h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo