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

Bases de données Delphi Discussion :

Ajout d'une valeur pour un champ


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Points : 14
    Points
    14
    Par défaut Ajout d'une valeur pour un champ
    Salut les Developpezeurs !

    Dans mon apply actuelle, j'essaie d'ajouter via le code la valeur d'une variable dans un champ de ma table. Le problème, c'est que la valeur du champ reste NULL quoi qu'il arrive.

    Voila mon code :
    FormGestion.TableParc.FieldByName('DATE_GARANTIE').AsDateTime:=tmp3;

  2. #2
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par rhodia Voir le message
    Salut les Developpezeurs !

    Dans mon apply actuelle, j'essaie d'ajouter via le code la valeur d'une variable dans un champ de ma table. Le problème, c'est que la valeur du champ reste NULL quoi qu'il arrive.

    Voila mon code :
    Salut

    Quel base de données ?
    Quel est la valeur de tmp3 ? (showmessage juste avant et donne nous le valeur)
    Quel est le Type de ta variable tmp3, string, TDate, integer... ?
    Type de Champ exacte dans la base pour DATE_GARANTIE ?

    Bye

  3. #3
    Membre habitué
    Homme Profil pro
    J'aime la programmation avec Delphi
    Inscrit en
    Avril 2011
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : J'aime la programmation avec Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 227
    Points : 132
    Points
    132
    Par défaut
    Et Plus,n'oublier pas l'instruction insert

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FormGestion.TableParc.insert;
    FormGestion.TableParc.FieldByName('DATE_GARANTIE').AsDateTime:=tmp3;

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par BuzzLeclaire Voir le message
    Salut

    Quel base de données ?
    Quel est la valeur de tmp3 ? (showmessage juste avant et donne nous le valeur)
    Quel est le Type de ta variable tmp3, string, TDate, integer... ?
    Type de Champ exacte dans la base pour DATE_GARANTIE ?

    Bye
    Mon tmp3 est une Date de type TDateTime. Et c'est également une date dans la base.
    Ensuite, j'ai essayé le showmessage de DateGarantie, et j'ai la valeur attendu qui s'affiche.

  5. #5
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par rhodia Voir le message
    Mon tmp3 est une Date de type TDateTime. Et c'est également une date dans la base.
    Ensuite, j'ai essayé le showmessage de DateGarantie, et j'ai la valeur attendu qui s'affiche.
    Re,

    Hmmm et c'est quoi la valeur !!
    Comme, tu donne pas le type de base de données, as-tu essayé format de jongler entre format Anglais et format Français mm/dd/yyyy ou dd/mm/yyyy.

    a+

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par louay02 Voir le message
    Et Plus,n'oublier pas l'instruction insert

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FormGestion.TableParc.insert;
    FormGestion.TableParc.FieldByName('DATE_GARANTIE').AsDateTime:=tmp3;
    Ca ne marche pas mieux


    Re,

    Hmmm et c'est quoi la valeur !!
    Comme, tu donne pas le type de base de données, as-tu essayé format de jongler entre format Anglais et format Français mm/dd/yyyy ou dd/mm/yyyy.

    a+
    La valeur dépend de chaque Pc du réseau, c'est la date d'expiration de garantie qui est calculé grace à une fonction qui split la date d'achat et qui additionne la durée de la garantie aux années, qui recompose tout ca et qui renvoi la valeur dans tmp3.
    Et cette fonction marche.

    C'est une base access, que je modifie avec Microsoft Access

  7. #7
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par rhodia Voir le message
    Ca ne marche pas mieux

    C'est une base access, que je modifie avec Microsoft Access
    Incroyable...

    Donne ta valeur en showmessage !!

    J'utilise pas mal ce genre de traitement de date dans access et je n'ai aucun probleme.

    Vérifie un truc : le mode de connection si tu est bien en ReadWrite

    A+

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par BuzzLeclaire Voir le message
    Incroyable...

    Donne ta valeur en showmessage !!

    J'utilise pas mal ce genre de traitement de date dans access et je n'ai aucun probleme.

    Vérifie un truc : le mode de connection si tu est bien en ReadWrite

    A+
    show message : 04/09/2000 etc .... Sachant qu'il y a 175 machines sur le réseau je ne t'en donne qu'une

    Et oui j'ai les droits en écriture

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 705
    Points : 25 575
    Points
    25 575
    Par défaut
    Avec un AsDateTime, il ne devrait pas y avoir de problème de conversion !
    ADO ou BDE ?

    Tu n'as pas oublié le Post qui va avec Insert\Append\Edit ?
    Si tu utilises First, Last, Next ou Prior sur TableParc, cela fait automatiquement le Post !

    CachedUpdates est bien à false ?

  10. #10
    Membre à l'essai
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Avec un AsDateTime, il ne devrait pas y avoir de problème de conversion !
    ADO ou BDE ?

    Tu n'as pas oublié le Post qui va avec Insert\Append\Edit ?
    Si tu utilises First, Last, Next ou Prior sur TableParc, cela fait automatiquement le Post !

    CachedUpdates est bien à false ?



    Pour ADO ou BDE a vrai dire j'en ai aucun idée Ca fait seulement une semaine que je bosse sur cette apply et sur Delphi en général.
    Ensutie, non je viens de rajouter Insert.
    Après j'utilise la boucle suivante


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    while not FormGestion.TableParc.Eof do
                    begin
                            FormGestion.DataSourceParc.Edit;
                            tmp2 := FormGestion.TableParc.FieldByName('DATE_ACHAT').AsDateTime;
                            tmp1:=FormGestion.TableParc.FieldByName('GARANTIE').AsFloat;                        
     tmp3:=calculDate(tmp2, leJour, leMois, lAnnee, tmp1);
     
                             FormGestion.TableParc.Insert;
                             FormGestion.TableParc.FieldByName('DATE_GARANTIE').AsDateTime:=tmp3;
                             showmessage(DateTimetoStr(FormGestion.TableParc.FieldByName('DATE_GARANTIE').AsDateTime));
                             FormGestion.TableParc.Next;
                    end;
    FormGestion.TableParc.ApplyUpdates;
             FormGestion.TableParc.CommitUpdates;
             FormGestion.TableParc.Close;
    Et la requetes SQL qui vont bien pour l'affichage

    Et CashUpdate est à false

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 59
    Points : 81
    Points
    81
    Par défaut
    Salut, comme te l'a dit Shail, avant de faire ton FormGestion.TableParc.Next... fait un poFormGestion.TableParc.post

  12. #12
    Membre à l'essai
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par Gwenou Voir le message
    Salut, comme te l'a dit Shail, avant de faire ton FormGestion.TableParc.Next... fait un poFormGestion.TableParc.post

    Le Insert + Le Post ça me fait bloquer le programme

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 59
    Points : 81
    Points
    81
    Par défaut
    bah en fait je pense que l'algo général n'est pas bon. Je pense que tu ne peux peut-être pas à la fois te balader dans TableParc et le modifier. Tu ne peux pas récupérer les infos à modifier dans une liste, puis boucler dessus afin de mettre à jour ton TableParc?
    [EDIT] euh je viens de voir un truc : c'est quoi DataSourceParc ? [/EDIT]

  14. #14
    Membre habitué
    Homme Profil pro
    J'aime la programmation avec Delphi
    Inscrit en
    Avril 2011
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : J'aime la programmation avec Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 227
    Points : 132
    Points
    132
    Par défaut
    Citation Envoyé par rhodia Voir le message
    Le Insert + Le Post ça me fait bloquer le programme
    merci de vérifier bien la config des composants de connections (ADO ou BDE)

  15. #15
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par Gwenou Voir le message
    Salut, comme te l'a dit Shail, avant de faire ton FormGestion.TableParc.Next... fait un poFormGestion.TableParc.post
    +1

    Forcément si tu post pas t'aura que dalle...

    Maintenant si ca plante....Hmmm 175 machines en reseau sur Access !!!!!! faut pas pousser..maurice....Bonne chance

    a+

  16. #16
    Membre à l'essai
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Points : 14
    Points
    14
    Par défaut
    DataSourceParc est mon TDataSource de la table que je veux modifier.

    Et oui dans ma table il y a 175 entrées, c'est une apply de gestion de parc informatique qui regroupe tous les Pc du réseau de l'entreprise. Si tu veux je te fait un copy-screen.

    Edit: J'ai remarqué quelquechose et c'est pour n'importe quel champs de ma base que j'ajoute via l'application. Quand je vais dans l'explorateur de base via Delphi les modifications sont acceptés, par contre quand j'ouvre ma base avec access, que dalle.

  17. #17
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 705
    Points : 25 575
    Points
    25 575
    Par défaut
    Au lieu de Insert(), il fallait faire Edit() !
    tu pourrais lire la documentation de Delphi, pour chaque fonction que l'on te propose et reflechir quelques instants !
    Si tu débutes, tu DOIS passer 90% de ton temps à lire l'aide !
    As-tu déjà des notions de programmation dans un autre langage ?

    Petite remarque pout tous : Le Next fait le Post !

    Dans ton code, tu parcours la table jusqu'au bout, mais tu y fais un insert donc la table grandi, la boucle ne s'arrêtera jamais ! c'est comme courrir après son ombre ou comme les chiens après leur queue

    Le Post ne remplace pas le Next, car dans ce cas, tu n'avancerais jamais, donc la boucle ne s'arrêterait jamais !

    Avant de continuer, tu devrais prendre le temps de faire les tutoriels de base de Données

    ApplyUpdates, c'est BDE !
    CashUpdate = CacheUpdate a false donc ApplyUpdates et CommitUpdates sot inutiles !
    encore une fois, il faut lire l'aide, c'est écrit !

    Pour tes 175 Postes, c'est juste une table qui contient 175 lignes ?
    Ton programme lui ne tournera que sur une seule machine ?
    Comment apporter une information floue qui complique la compréhension de la demande !
    Si 175 Lignes, OK, rien d'extraordinaire !
    Il est évident, que l'utilisation BDE + ACCESS doit être limité à du monoposte !


    Je suppose que FormGestion.DataSourceParc.DataSet c'est la même chose que FormGestion.TableParc

    Attention ! FormGestion.DataSourceParc.Edit requiert FormGestion.DataSourceParc.AutoEdit à true, si oui cela lance
    FormGestion.TableParc.Edit, sinon c'est sans effet !
    je te conseille d'appeler directement FormGestion.TableParc.Edit() comme je le disais plus haut par rapport au Insert()

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 59
    Points : 81
    Points
    81
    Par défaut
    Merci ShaiLeTroll je pense que tu viens d'effrayer rhodia

  19. #19
    Membre à l'essai
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par Gwenou Voir le message
    Merci ShaiLeTroll je pense que tu viens d'effrayer rhodia

    Non pas du tout, c'est juste que je pense avoir trouvé et ca ne vient pas vos diverses remarques, mais ca viendrait du type qui sera SQLTimeStamp au lieu de DateTime.

  20. #20
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 264
    Points : 41 665
    Points
    41 665
    Billets dans le blog
    64
    Par défaut
    bonjour ,

    mais ca viendrait du type qui sera SQLTimeStamp au lieu de DateTime.
    non , je ne pense pas que cela vienne de là ! il y aurait eu erreur de compilation ou de traitement .
    maintenant , un Next ne faisant pas une mise à jour de l'enregistrement automatiquement sauf si spécifié en propriété je suggère de ne pas oublier le Post

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while not FormGestion.TableParc.Eof do
                    begin
                            FormGestion.DataSourceParc.Edit;
                            tmp2 := FormGestion.TableParc.FieldByName('DATE_ACHAT').AsDateTime;
                            tmp1:=FormGestion.TableParc.FieldByName('GARANTIE').AsFloat;                        
     tmp3:=calculDate(tmp2, leJour, leMois, lAnnee, tmp1);
     
                             FormGestion.TableParc.FieldByName('DATE_GARANTIE').AsDateTime:=tmp3;
                             FormGestion.TableParc.Post;
                                                      FormGestion.TableParc.Next;
                    end;
    Maintenant , le problème des applyupdates et commitupdates totalement inutile si cacheUpdate:=False

    enfin Une Query UPDATE (execsql) aurait certainement été beaucoup plus efficace a moins qu'Access ne soit pas capable de traiter les dates

    (humour noir @BuzzLeclaire humour noir )

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 16
    Dernier message: 06/10/2010, 11h27
  2. Comment ajouter par défaut une valeur dans un champ?
    Par zouloute dans le forum Access
    Réponses: 2
    Dernier message: 04/03/2008, 08h53
  3. [SQL]ajout d'une valeur au début d'un champs
    Par lifemaker2025 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 03/04/2007, 15h07
  4. Afficher un etat pour une valeur d'un champ
    Par merilith dans le forum Access
    Réponses: 1
    Dernier message: 07/06/2006, 18h45
  5. Popup ajoutant une valeur a un champ
    Par kalan dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/09/2005, 16h39

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