[ACCESS] ins. TOP utilisable avec variable ?
Résolu/Fermé
16-MARCO
Messages postés
8
Date d'inscription
vendredi 23 février 2007
Statut
Membre
Dernière intervention
7 mars 2007
-
26 févr. 2007 à 11:59
JM30 Messages postés 2 Date d'inscription vendredi 27 novembre 2009 Statut Membre Dernière intervention 28 novembre 2009 - 28 nov. 2009 à 23:23
JM30 Messages postés 2 Date d'inscription vendredi 27 novembre 2009 Statut Membre Dernière intervention 28 novembre 2009 - 28 nov. 2009 à 23:23
A voir également:
- [ACCESS] ins. TOP utilisable avec variable ?
- Top site telechargement - Accueil - Outils
- Touche ins - Guide
- Access appdata - Guide
- Acer quick access - Forum Logiciels
5 réponses
blux
Messages postés
26756
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
1 avril 2025
3 332
26 févr. 2007 à 16:53
26 févr. 2007 à 16:53
Salut :-)
Tu le récupères où, ton nombre ?
Tu le récupères où, ton nombre ?
16-MARCO
Messages postés
8
Date d'inscription
vendredi 23 février 2007
Statut
Membre
Dernière intervention
7 mars 2007
26 févr. 2007 à 22:42
26 févr. 2007 à 22:42
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
ç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'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!
blux
Messages postés
26756
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
1 avril 2025
3 332
27 févr. 2007 à 08:55
27 févr. 2007 à 08:55
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...
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...
16-MARCO
Messages postés
8
Date d'inscription
vendredi 23 février 2007
Statut
Membre
Dernière intervention
7 mars 2007
3 mars 2007 à 13:40
3 mars 2007 à 13:40
Re-
j'ai essayé de rajouter un peu de complexité à la solution écrite ci-dessus. En réalité la sélection des x 1eres lignes ne se fera pas sur 1 seul critère (la famille), mais sur plusieurs :
"matable" ressemblera donc à :
famille1
famille2
valeur
"param" ressemblera donc à :
famille1
famille2
nombre lignes à selectionner dans "matable" lorsque les 2 critères matchent.
j'ai modifié de la façon suivante le code de la fonction :
et la requête sql:
Pour autant j'ai le message d'erreur à l'execution de la requête :
"erreur de compilation dans l'expression gardemarc([matable].[famille1],[matable].[famille2],[param])=True
vois-tu où es l'erreur ?
j'ai essayé de rajouter un peu de complexité à la solution écrite ci-dessus. En réalité la sélection des x 1eres lignes ne se fera pas sur 1 seul critère (la famille), mais sur plusieurs :
"matable" ressemblera donc à :
famille1
famille2
valeur
"param" ressemblera donc à :
famille1
famille2
nombre lignes à selectionner dans "matable" lorsque les 2 critères matchent.
j'ai modifié de la façon suivante le code de la fonction :
Function gardemarc(famille1 As String, famille2 As String, nb As Long) As Boolean Static fam1 As String Static fam2 As String Static compteur As Long If fam1 = famille1 Then If fam2 = famille2 Then compteur = compteur + 1 Else fam1 = famille1 fam2 = famille2 compteur = 1 End If Else fam1 = famille1 fam2 = famille2 compteur = 1 End If garde = compteur <= nb Exit Function End Function
et la requête sql:
SELECT matable.famille1, matable.famille2, matable.valeur FROM matable INNER JOIN param ON (matable.famille1=param.famille1) AND( matable.famille2=param.famille2) WHERE gardemarc([matable].[famille1],[matable].[famille2],[param])=True ORDER BY matable.famille1, matable.famille2;
Pour autant j'ai le message d'erreur à l'execution de la requête :
"erreur de compilation dans l'expression gardemarc([matable].[famille1],[matable].[famille2],[param])=True
vois-tu où es l'erreur ?
16-MARCO
Messages postés
8
Date d'inscription
vendredi 23 février 2007
Statut
Membre
Dernière intervention
7 mars 2007
2 mars 2007 à 00:08
2 mars 2007 à 00:08
solution trouvée :
créer un module "garder" à l'intérieur duquel on créé la fonction "garde"
Dans la vue requête, créer une requête avec le code SQL :
A+
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+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
JM30
Messages postés
2
Date d'inscription
vendredi 27 novembre 2009
Statut
Membre
Dernière intervention
28 novembre 2009
28 nov. 2009 à 23:23
28 nov. 2009 à 23:23
Bonjour,
J'ai essayé le modèle "proposé" dans le forum mais sans succés... D'abord parque je suis débutant en ce domaine mais je pense qu'il n'est pas adaptée à mes besoins ... moins complexes.
Alors si quelqu'un peut me donner les moyens à l'aide d'une requête et la possibilté de modifier la Fonction TOP avec une "variable" pour extraire d'une table un nombre limité d'enregistrements. Grand merci.
J'organise une journée de formation avec des ateliers. Les ateliers ont des places limités. il me faut donc extraire un nombre d'inscrits en fonction du nombre de places disponibles dans l'atelier. En l'occurence, mon choix s'appuiera sur les premiers inscrits donc en fonction de la date d'inscription.
Je souhaiterais pouvoir entrer le nombre de places disponible comme "variable" dans la fonction TOP.
Table Inscription
champs:
Date Inscription
Nom
Prénom
J'ai essayé d'utiliser la numérotation automatique mais il me faut renuméroter donc réaliser des requêtes ajouts et je trouve la méthode lourde. J'ai également utilisé le "Cumul" type compteur mais en s'appuyant sur les champs identiques cela ne fonctionne pas.
Surtout n'oubliez pas que vous avez à faire à un débutant... soyez patient et explicatif.
Merci beaucoup pour votre aide.
JM30
J'ai essayé le modèle "proposé" dans le forum mais sans succés... D'abord parque je suis débutant en ce domaine mais je pense qu'il n'est pas adaptée à mes besoins ... moins complexes.
Alors si quelqu'un peut me donner les moyens à l'aide d'une requête et la possibilté de modifier la Fonction TOP avec une "variable" pour extraire d'une table un nombre limité d'enregistrements. Grand merci.
J'organise une journée de formation avec des ateliers. Les ateliers ont des places limités. il me faut donc extraire un nombre d'inscrits en fonction du nombre de places disponibles dans l'atelier. En l'occurence, mon choix s'appuiera sur les premiers inscrits donc en fonction de la date d'inscription.
Je souhaiterais pouvoir entrer le nombre de places disponible comme "variable" dans la fonction TOP.
Table Inscription
champs:
Date Inscription
Nom
Prénom
J'ai essayé d'utiliser la numérotation automatique mais il me faut renuméroter donc réaliser des requêtes ajouts et je trouve la méthode lourde. J'ai également utilisé le "Cumul" type compteur mais en s'appuyant sur les champs identiques cela ne fonctionne pas.
Surtout n'oubliez pas que vous avez à faire à un débutant... soyez patient et explicatif.
Merci beaucoup pour votre aide.
JM30