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

blux Messages postés 27146 Date d'inscription   Statut Modérateur Dernière intervention   3 362
 
Salut,

es-tu sûr que les contraintes à prendre en compte ne sont pas celles de la table (X) ?
0
Atom46
 
Erreur de ma part, les contraintes des tuples proviennent bien de la table (X)
0
blux Messages postés 27146 Date d'inscription   Statut Modérateur Dernière intervention   3 362
 
Et donc, c'est où que tu coinces ?
0
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
blux Messages postés 27146 Date d'inscription   Statut Modérateur Dernière intervention   3 362
 
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
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
blux Messages postés 27146 Date d'inscription   Statut Modérateur Dernière intervention   3 362
 
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
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
blux Messages postés 27146 Date d'inscription   Statut Modérateur Dernière intervention   3 362
 
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
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
blux Messages postés 27146 Date d'inscription   Statut Modérateur Dernière intervention   3 362
 
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
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