begin process at 2008 07 07 02:54:53
1 205 881 membres
32 nouveaux aujourd'hui
14 120 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : requête SQL pour l'archivage !! [ Base de données / SQL ] (bezzaz)

requête SQL pour l'archivage !! le 25/05/2007 16:39:26

bezzaz
Bonjour, Dans ma base de données j'ai la table 'Patient ', 'Archive' et la requête 'lastvisite' qui renvoie la dernier visite de chaque patient et j'ai besoin de créer une requête SQL pour faire l'archivage des patients qui ne se sont pas était présent ses trois années précédentes Ma première requête pour copier ses patients dans la table 'Archive' est INSERT INTO Archive SELECT Patient.CodeP, Patient.Nom, Patient.Prénom, (Date()-[MaxDeDate de visite]) AS Expr1 FROM lastvisite, Patient WHERE (lastvisite.Réfpatient = Patient.CodeP) AND ((Date()-[MaxDeDate de visite])>1095) Et pour la suppression j'ai fais la chose suivante DELETE FROM Patient WHERE (SELECT Patient.CodeP, Patient.Nom, Patient.Prénom, (Date()-[MaxDeDate de visite]) AS Expr1 FROM lastvisite, Patient WHERE (lastvisite.Réfpatient = Patient.CodeP) AND ((Date()-[MaxDeDate de visite])>1095); Mais il m'affiche le message suivant 'vous avez écrit une sous requête pouvant renvoyer plus d'un champ sans utiliser le mot réservée EXISTS.' Que dois-je faire !! (Le tout en VB) Merci :)

Re : requête SQL pour l'archivage !! le 25/05/2007 20:09:14

jack
(Admin CS)
Réponse acceptée !
Salut
Tu aurais dû relire ta question avant de la poster, ta phrase est incomplète et incompréhensible :
"l?archivage des patients qui ne se sont pas était présent ses trois années précédentes "
La mise en forme du texte est bizarre, sans saut de ligne (difficile à lire). Quel explorateur utilises-tu ?
Tes deux requètes ressemblent donc à ça :

INSERT INTO Archive
SELECT Patient.CodeP,
       Patient.Nom,
       Patient.Prénom,
       (Date()-[MaxDeDate de visite]) AS Expr1
  FROM lastvisite, Patient
 WHERE (lastvisite.Réfpatient = Patient.CodeP)
   AND ((Date()-[MaxDeDate de visite])>1095)


On suppose (et il faut) que ta table Archive comporte 4 champs et seulement 4
"[MaxDeDate de visite]" appartient à quelle table ? précise-le comme tu l'as fait pour les premiers champs car sans cette info, difficile de corriger
On ne peut pas faire des additions/soustraction avec des dates.
Si tu veux sélectionner les enregistrements qui sont plus vieux de 3 ans :
   And [MaxDeDate de visite] < DateAdd("y", Date(), -3)
ou qque chose comme ça, regarde l'aide de DateAdd


DELETE FROM Patient
 WHERE (SELECT Patient.CodeP,
               Patient.Nom,
               Patient.Prénom,
               (Date()-[MaxDeDate de visite]) AS Expr1
          FROM lastvisite, Patient
         WHERE (lastvisite.Réfpatient = Patient.CodeP)
           AND ((Date()-[MaxDeDate de visite])>1095);


Tu as un problème de parenthèses : Manque une ) quelque part
On ne peut pas faire de Select directement dans un Where.
Un Delete supprimera tous les champs des enregistrements sélectionnés. On ne peut pas les lister dans un Delete.
Si tu veux supprimer les enregistrements plus vieux que 3 ans :
DELETE FROM Patient
 WHERE Patient.CodeP IN (SELECT lastvisite.Réfpatient
                           FROM lastvisite
                          WHERE [MaxDeDate de visite] < DateAdd("y", Date(), -3))
Là aussi, on ne sait pas à quelle table appartient "[MaxDeDate de visite]", donc impossible de dire si les tables listées dans le From sont utiles ou suffisantes.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)

Re : requête SQL pour l'archivage !! le 25/05/2007 21:38:32

bezzaz
Salut Jack, Merci pour ton aide, c’est vrai que la mise en forme est bizarre même plus !!, désolé,(j’utilise Opera comme explorateur). Sinon votre solution, ca fonctionne parfaitement. C'est cool Merci (pour le [MaxDeDate de visite] elle appartient à la requête ‘lastvisite’)


Classé sous : requête, patient, visite, lastvisite, codep

Participer à cet échange

Pub



Appels d'offres

Realisation graphique ...
Budget : 700€
WEB DESIGN
Budget : 1 000€
Plugin Dialer outlook
Budget : 2 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS