Insérer tuples d'une table dans une autre

Atom46 -  
 tessel75 -
Bonjour,

Débutant sur Access depuis peu de temps, je cherche à insérer des tuples d'une Table (X) vers une autre (Y), avec les contraintes de champs de la table (Y) suivantes:

CodeRelance -> = 3
Règlement -> Non
Date d'infraction antérieure à la date actuelle moins 120jours -> ( date()-120 )

Je recherche de l'aide pour la mise en forme de ma syntaxe de requête SQL avec si possible une clause INSERT INTO.

Merci d'avance pour votre aide

4 réponses

  1. blux Messages postés 2046 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Salut,

    es-tu sûr que les contraintes à prendre en compte ne sont pas celles de la table (X) ?
    0
  2. Atom46
     
    Erreur de ma part, les contraintes des tuples proviennent bien de la table (X)
    0
    1. blux Messages postés 2046 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      Et donc, c'est où que tu coinces ?
      0
    2. Atom46
       
      Au niveau de la syntaxe de ma requete :

      INSERT INTO TableY (CodeRelance, Reglement, DateP)
      SELECT Table X
      WHERE CodeRelance='3'
      And Reglement ='non'
      And DateP >Date()-120
      FROM TableY

      Je dois avoir une erreur quelque part, mais je ne parviens pas à m'y retrouver
      0
    3. blux Messages postés 2046 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      date()-120 ne fonctionnera pas, car access ne sait pas que tu parles d'ôter 120 jours...
      Il faut passer par la fonction dateadd() avec ses multiples paramètres...
      0
    4. tessel75
       
      Bonsoir, Excuse moi de te contredire mais l'écriture "DateP >Date()-120" est tout à fait correcte et ne présente aucune difficulté dans Access, je l'utilise sans arrêt; nul besoin de la fonction "DateAdd()". Par contre je suis beaucoup moins certain que l'écriture "Reglement ='non' " n'accroche pas si elle est booléenne, auquel cas il est nécessaire de ne pas mettre de guillemets, j'ai rencontré le problème il y a seulement qq jours.
      Bonne soirée à tous les deux.
      0
    5. blux Messages postés 2046 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      Je ne savais pas qu'access avait fait des progrès aussi notables depuis que je m'en sers !
      Quand j'ai commence à l'utiliser, la gestion des dates était catastrophique, il semble donc qu'ils aient amélioré ça, mais je ne m'en étais pas rendu compte.

      Par contre, en regardant de plus près, si coderelance est numérique, les quotes ne doivent pas être mises.
      0
  3. tessel75
     
    Bonsoir,
    Dans une précédente réponse, je t'avais indiqué qu'il fallait retirer les quotes " ' " encadrant ta valeur "NON", l'as-tu fait? Si ça ne marche toujours pas, il faut essayer avec " -1 ". C'est une bizarrerie de Access où les valeurs booléenne sont "0" et "-1", je n'ai jamais bien compris pourquoi, mais c'est indiqué comme ça dans le tutoriel pour développeurs.
    Bonne suite.
    0
    1. blux Messages postés 2046 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      En Basic, depuis des temps immémoriaux, faux s'énonce 0 et vrai s'énonce -1.
      Mais pour un booléen de SQL on peut dire reglement = true ou reglement = false.
      0
    2. tessel75
       
      OK ! Merci aussi pour ta correction. Et merci pour ton explication!
      Mais alors pourquoi "-1" alors qu'on apprend partout que le langage binaire est constitué de 0 et de 1 ?
      0
    3. blux Messages postés 2046 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      Ne pas confondre le binaire, système de numération en base 2, avec un langage ; le binaire n'est qu'une façon particulière d'écrire les nombres.
      Ne pas confondre également 'binaire' avec 'algèbre de boole' : branche des mathématiques qui traite les problèmes/opérations faisant intervenir des variables à deux états (quelles qu'en soient les valeurs : 0 ou 1, vrai ou faux, ouvert ou fermé...) et qui est utilisée par la plupart des langages de programmation qui se respectent.
      Pour le VB, je te propose de mettre ce petit bout de code dans un bouton et de voir ce qui se passe :

      MsgBox a = a                       
      If (a = 1) = -1 Then                       
          MsgBox "vrai"                       
      Else                       
          MsgBox "faux"                      
      End if                    
      If (a = a) = -1 Then                       
          MsgBox "vrai"                       
      Else                       
          MsgBox "faux"                      
      End if                    
      If (a = 1) Then                     
          MsgBox "vrai"                     
      Else                     
          MsgBox "faux"                     
      End If                   
      If Not (a = 1) Then                    
          MsgBox "vrai"                    
      Else                    
          MsgBox "faux"                    
      End If                
      If a Then                    
          MsgBox "vrai"                    
      Else                    
          MsgBox "faux"                    
      End If

      C'est comme ça que l'on voit qu'un test n'est pas évalué par un programme comme le ferait un humain, mais simplement en fonction de sa véracité : si on teste a =3, le programme ne cherche qu'à savoir si (a = 3) est vrai (même si pour cela il va lui falloir comparer 'a' avec 3 !). C'est pour cela que le VB que je t'ai mis au-dessus marche avec une syntaxe peu courante, un test renvoyant la valeur vrai ou faux... (-1 ou 0 en VBA).
      Il y a aussi une raison plus pragmatique (mais plus complexe). En binaire, le 0 est noté 00000000 et le 1 est noté 00000001 (dans un codage à 8 bits). Il peut y avoir confusion (un seul bit d'écart), alors que le -1 est noté 11111111 (plus guère de confusion possible).

      Voir ici la grande faute de 'débutant' qui raisonne humain et non 'booléen' ;-)
      A noter, pour la compréhension, que le OR s'écrit || et le AND s'écrit && en shell Unix.
      0
  4. tessel75
     
    Bonjour,
    Excuse-moi pour ma réponse si tardive. J'avais lu ta réponse le jour même bien sûr, mais c'est vrai que j'avais négligé d'y répondre. Alors Je te remercie sincèrement avec retard.
    Bonne suite
    0