slicksfr | Salut.
Je ne suis pas un pro de SQL et je n'arrive pas à trouver comment résoudre mon pb.
J'ai un script VBA sous Acces qui interroge une liste de PC (300 machines à therme) contenue dans une table.
Pour chaque PC, je relève la taille_Hdd, model_Hdd, Date_Reboot, IP,....
et j'insère toutes mes données (40) récoltées dans une autre table
avec les champs Date, NomDuPc, taille_Hdd, model_Hdd, Date_Reboot, IP,....,champ(40)
Jusque là pas de pb.
Par contre je voudrais ne pas insérer en base, des données d'un Pc qui n'ont pas changé depuis la dernière entrée en base
Date(now), NomDuPc, taille_Hdd, model_Hdd, Date_Reboot, IP,....
5 29/08/07, Pc1, 40, Seagate, 25/08/07, 195.10.2.1 4 28/08/07, Pc1, 40, Seagate, 25/08/07, 195.10.2.3 3 27/08/07, Pc1, 40, Seagate, 25/08/07, 195.10.2.3
2 27/08/07, Pc2, 20, Seagate, 25/08/07, 195.10.2.3
1 25/08/07, Pc1, 40, Seagate, 25/08/07, 195.10.2.1
|
L'enregistrement N°4 est inutile, il est identique au N°3
Par contre le N° 5 est utile car il est <> N°1 malgré qu'il soit identique au N°1
Pour obtenir ce que je veux il faut que je fasse :
- Filtrer la table avec le NomDuPc
- Récupérer la dernière écriture faite pour ce PC
- Tester sur tous champs sauf le champ date est égal
- Si test différent alors écriture des nouvelles données dans une nouvelle ligne avec la date du jour dans le champ date
La seule solution que j'ai trouvé ( je n'arrive pas à la faire marcher ) mais je ne suis même pas sur qu'elle réponde à mes besoins :
strRequete = "INSERT INTO Tbl_PC (Date, NomDuPc, TailleHdd, ....., IP) VALUES (#" & Now & "#, 'PC1', 40, ...., '195.10.2.1) NOT IN ( SELECT TOP 1 * FROM Tbl_PC WHERE Nom_Pc = '" & strComputer & "' ORDER BY Date_Evt desc);"
Peut-être faudrait-il que j'insère tout en base et à la fin de mon script VBA, lancer une requête qui filtrerait et effacerait les champs en doublon ?
Voilà, si quelqu'un voit un peu comment faire... Message édité par slicksfr le 30-08-2007 à 17:12:09
|