|
|
|
| [ACCESS] ins. TOP utilisable avec variable ? par 16-MARCO |
lundi 26 février 2007 à 11:59:01 |
INSERT INTO T_Prime SELECT TOP 3 * FROM T;
INSERT INTO T_Prime SELECT TOP P.p * FROM T,P;
INSERT INTO T_Prime SELECT TOP p.P * FROM T,P;
INSERT INTO T_Prime SELECT TOP (SELECT P.p FROM P) T.* FROM T;
Configuration: Windows XP Internet Explorer 6.0
Salut :-)
Tu le récupères où, ton nombre ? A+ Blux "Les cons, ça ose tout. C'est même à ça qu'on les reconnait" |
Je le récupère dans une table dans la même base....
j'ai entre temps testé une solution, qui marche, qui m'a été soufflée sur un forum "ami" (je ne sais pas quel est le terme consacré !) Il s'agit d'appeler par une macro une fonction définie dans un module, dont le code est Dim i as integer
Dim strSQL as string
i = CInt(DLookup("[p]","P"))
strSQL = "INSERT INTO T_Prime
strSQL = strSQL & " SELECT TOP " & i & " *"
strSQL = strSQL & " FROM T"
CurrentDb.Execute strSQL
ça me convient bien. Pour aller plus loin, j'en profite pour vous demander votre avis sur la faisabilité de faire en une seule opération la chose suivante : En réalité dans ma table T j'ai par exemple 100 enregistrements de 2 familles : 75 de la famille A suivis de 25 de la famille B. Dans ma table P j'ai pour chaque famille A et B le nombre de lignes que je dois extraire à partir de la table T, respectivement dans les familles A et B, par exemple 6 et 10. Comment modifier l'instruction ci-dessus pour extraire du même coup les 6 premières enre. de la table qui sont de famille A (autrement dit les lignes 1 à 6) et les 10 premiers enre. qui sont de la famille B (autrement dit les lignes 76 à 85) ? Merci d'avance! |
J'allais te proposer un truc comme ça, une fois que tu m'aurais dit comment tu récupérais ton nombre à extraire...
Dans le cas du paramétrage, je pense qu'il faut faire une boucle sur la table P et envoyer autant de requêtes qu'il y a de lignes... A+ Blux "Les cons, ça ose tout. C'est même à ça qu'on les reconnait"
|
solution trouvée :
créer un module "garder" à l'intérieur duquel on créé la fonction "garde" Function garde(famille As String, nb As Long) As Boolean Static fam As String Static compteur As Long If fam = famille Then compteur = compteur + 1 Else fam = famille compteur = 1 End If garde = compteur <= nb Exit Function End Function Dans la vue requête, créer une requête avec le code SQL : SELECT matable.famille, matable.valeur FROM matable INNER JOIN param ON matable.famille = param.famille WHERE garde([matable].[famille],[nb])=True ORDER BY matable.famille, matable.valeur; A+ |
| 01/08 10h00 | [ACCESS] insertion de données dans une table | Programmation | 06/08 15h14 | 12 |
| 04/04 18h22 | [ubuntu] Installer et utiliser eciadsl | Linux/Unix | 06/04 19h07 | 5 |
| 08/02 18h41 | Utilisation variable pr appelé une feuille | Programmation | 09/02 13h19 | 7 |
| 21/01 15h39 | [msn] 2 msn a la fois installer et utiliser | Internet | 06/04 21h43 | 9 |