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 :

[FB1.5] ADOQuery insert et Parameter DataTime


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 37
    Points : 19
    Points
    19
    Par défaut [FB1.5] ADOQuery insert et Parameter DataTime
    Bonjour,
    Je cherche à insérer dans un champ DateTime la valeur de la date du jour (avec l'heure en cours). J'utilise une ADOQuery et le code suivant pour affecter la valeur de datsais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parameters.ParamByName('datsais').Value := now;
    Mais, dans ma base je n'ai que la date, pas l'heure...
    Faut-il utiliser un autre composant? Une procédure stockée?
    Ou bien un paramètre à ajuster?
    Merci!

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut,

    Pourquoi tu n'utilises pas un trigger BeforeInsert et / ou BeforeUpdate sur ta table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      new.DATSAIS = 'NOW';
    Sinon est-ce que le paramètre est bien de type TDateTime ?

    @+

  3. #3
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par Claudius40
    Pourquoi tu n'utilises pas un trigger BeforeInsert et / ou BeforeUpdate sur ta table.
    @Claudius40 : elle utilise un AdoQuery donc elle doit passer par une requete insert, je pense donc que ce que tu lui proposes ne peux pas fonctionner ^^


    @celine33 : Peux tu montrer ta requete d'insertion ? Et même le code avant et après l'appel du paramètre
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    @Malatar, Salut !

    Je ne parlais d'une implémentation au niveau de l'appli Delphi, mais au niveau de la base de données Firebird.

    C'est ainsi que je procède pour renseigner les champs que je nomme en général UPDT_USER et UPDT_DATE.

    L'utilisation d'un trigger pour ce type d'infos est, je pense, le plus simple et le plus pratique.

    @+

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 37
    Points : 19
    Points
    19
    Par défaut
    En effet, je ne suis pas sûre de voir l'intérêt du Trigger.
    Voici mon code:
    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
    16
    17
    18
    with pdaDataModule.ADOQry_insertResa do
    begin
     
      SQL.Clear;
      SQL.Add('insert into resa  '+
                '( cde_datsais '+
                ) '+
                'values '+
                '(  :datsais '+
                ') ' );
      try
        ExecSQL;
      except
        on E: Exception do raise 
             Exception.Create(E.message +#13#10+ 
             msg_fr.m_erroraccess+' - table resa"');
      end;
    end;
    Le champ est bien de type fTDateTime et stocké en base Firebird au format TimeStam (passage au SQLDialect3)
    Merci de votre aide!

  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    OK, effectivement j'étais à côté de la plaque avec mon trigger, sorry !

  7. #7
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    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
    with pdaDataModule.ADOQry_insertResa do
    begin
    
      SQL.Clear;
      SQL.Add('insert into resa ( cde_datsais)');
      SQL.Add('values (NOW)');
      try
        ExecSQL;
      except
        on E: Exception do raise 
             Exception.Create(E.message +#13#10+ 
             msg_fr.m_erroraccess+' - table resa"');
      end;
    end;
    Si tu es sûr de toujours mettre la date du jour avec l'heure, autant mettre un now directement dans la requete (En plus tu ne renseignes pas le paramètre, un oubli ???)
    Si ca ne fonctionne pas (resultat incorrecte), c'est que le type de champ que tu utilises ne dois pas être le bon.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  8. #8
    Membre averti
    Profil pro
    xxxxxxxxxxx
    Inscrit en
    Juin 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : xxxxxxxxxxx

    Informations forums :
    Inscription : Juin 2004
    Messages : 308
    Points : 407
    Points
    407
    Par défaut
    Je te propose de réécrire le SQL comme suit :
    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
    16
    17
    18
     
    begin
     
      SQL.Clear;
      SQL.Add('insert into resa  '+
                '( cde_datsais '+
                ) '+
                'values '+
                '( CURRENT_TIMESTAMP  ) '+
                ') ' );
      try
        ExecSQL;
      except
        on E: Exception do raise 
             Exception.Create(E.message +#13#10+ 
             msg_fr.m_erroraccess+' - table resa"');
      end;
    end;
    Ainsi, c'est l'heure du serveur qui sera utilisée, quelle que soit l'heure des postes clients.

  9. #9
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 37
    Points : 19
    Points
    19
    Par défaut
    @Malatar : Oui, j'ai omis d'affecter le paramètre.
    Je vais essayé d'affecter directement la valeur now dans le code de la requête...
    Entre temps, je teste en passant par une ADOTable... mais je crains les ralentissements à l'exécution.
    Est-ce que c'est perceptible lorsque l'on fait par ex. un insert sur une table à plus de 1000 enregistrements?
    Merci.

  10. #10
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    reste avec une requete, ca sera mieux dans tous les cas.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/03/2014, 16h55
  2. ADOQuery Parameters Refresh ParamCheck
    Par ouiouioui dans le forum Bases de données
    Réponses: 0
    Dernier message: 03/07/2009, 12h13
  3. INSERT INTO ok via ACCESS Too few parameter via ODBC
    Par Frederick_Etudiant dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 15/01/2009, 12h37
  4. Réponses: 2
    Dernier message: 01/04/2008, 09h38
  5. [ADOQuery] Multiple INSERT
    Par lanonyme dans le forum C++Builder
    Réponses: 2
    Dernier message: 12/05/2006, 13h39

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