Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access
Access Forum d'entraide sur Microsoft Access. Avant de poster -> La F.A.Q Access
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/04/2011, 08h33   #1
Membre du Club
 
Homme Mathieu
Étudiant
Inscription : avril 2011
Messages : 133
Détails du profil
Informations personnelles :
Nom : Homme Mathieu
Localisation : France, Vosges (Lorraine)

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : avril 2011
Messages : 133
Points : 50
Points : 50
Envoyer un message via MSN à theuma
Par défaut Créer une fonction SQL avec variable

Bonjour,
Voila ce que j'aimerais faire ...
J'ai une grosse requette SQL qui fait pas loin de 15 lignes et je doit réaliser cette fonction 36 fois .... Je vouderais crée en VB une fonction de type

Fonction(Lettre) et il me change dans mon SQL la variable ... C'est possible ???

Voici le code en question ...
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
SELECT Sum(A) AS AA, FK_Prefab
FROM (SELECT Count(*) AS A, FK_Prefab FROM LignePrefab WHERE Left(Repere1,1) like 'A' AND FK_Prefab in (Select FK_Prefab From LignePrefab) Group BY FK_Prefab
UNION ALL
SELECT Count(*) AS A, FK_Prefab FROM LignePrefab WHERE Mid(Repere1,2,1) LIKE 'A' AND FK_Prefab in (Select FK_Prefab From LignePrefab) Group BY FK_Prefab
Union ALL
SELECT Count(*) AS A, FK_Prefab FROM LignePrefab WHERE Mid(Repere1,3,1) LIKE 'A' AND FK_Prefab in (Select FK_Prefab From LignePrefab) Group BY FK_Prefab
Union ALL
SELECT Count(*) AS A, FK_Prefab FROM LignePrefab WHERE Mid(Repere1,4,1) LIKE 'A' AND FK_Prefab in (Select FK_Prefab From LignePrefab) Group BY FK_Prefab
Union ALL
SELECT Count(*) AS A, FK_Prefab FROM LignePrefab WHERE Mid(Repere1,5,1) LIKE 'A' AND FK_Prefab in (Select FK_Prefab From LignePrefab) Group BY FK_Prefab
Union ALL
SELECT Count(*) AS A, FK_Prefab FROM LignePrefab WHERE Mid(Repere1,6,1) LIKE 'A' AND FK_Prefab in (Select FK_Prefab From LignePrefab) Group BY FK_Prefab
Union ALL
SELECT Count(*) AS A, FK_Prefab FROM LignePrefab WHERE Mid(Repere1,7,1) LIKE 'A' AND FK_Prefab in (Select FK_Prefab From LignePrefab) Group BY FK_Prefab
Union ALL
SELECT Count(*) AS A, FK_Prefab FROM LignePrefab WHERE Left(Repere2,1) LIKE 'A' AND FK_Prefab in (Select FK_Prefab From LignePrefab) Group BY FK_Prefab
UNION ALL
SELECT Count(*) AS A, FK_Prefab FROM LignePrefab WHERE Mid(Repere2,2,1) LIKE 'A' AND FK_Prefab in (Select FK_Prefab From LignePrefab) Group BY FK_Prefab
Union ALL
SELECT Count(*) AS A, FK_Prefab FROM LignePrefab WHERE Mid(Repere2,3,1) LIKE 'A' AND FK_Prefab in (Select FK_Prefab From LignePrefab) Group BY FK_Prefab
Union ALL
SELECT Count(*) AS A, FK_Prefab FROM LignePrefab WHERE Mid(Repere2,4,1) LIKE 'A' AND FK_Prefab in (Select FK_Prefab From LignePrefab) Group BY FK_Prefab
Union ALL
SELECT Count(*) AS A, FK_Prefab FROM LignePrefab WHERE Mid(Repere2,5,1) LIKE 'A' AND FK_Prefab in (Select FK_Prefab From LignePrefab) Group BY FK_Prefab
Union ALL
SELECT Count(*) AS A, FK_Prefab FROM LignePrefab WHERE Mid(Repere2,6,1) LIKE 'A' AND FK_Prefab in (Select FK_Prefab From LignePrefab) Group BY FK_Prefab
Union ALL
SELECT Count(*) AS A, FK_Prefab FROM LignePrefab WHERE Mid(Repere2,7,1) LIKE 'A' AND FK_Prefab in (Select FK_Prefab From LignePrefab) Group BY FK_Prefab
)
GROUP BY FK_Prefab;
La lettre A est ma variable que j'aimerais changer ....
theuma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 11h31   #2
Membre Expert
 
Avatar de nico84
 
Homme Nicolas Guimbal
Consultant/développeur ERP
Inscription : mai 2008
Messages : 1 254
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Guimbal
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant/développeur ERP
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2008
Messages : 1 254
Points : 1 870
Points : 1 870
Bonjour,

Il suffit de remplacer 'A' par x et il demandera la valeur de x à chaque exécution

Par ailleurs les joies du français font que requête s'écrit différemment de quéquette quelqu'en soit la taille
nico84 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/04/2011, 11h56   #3
Membre du Club
 
Homme Mathieu
Étudiant
Inscription : avril 2011
Messages : 133
Détails du profil
Informations personnelles :
Nom : Homme Mathieu
Localisation : France, Vosges (Lorraine)

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : avril 2011
Messages : 133
Points : 50
Points : 50
Envoyer un message via MSN à theuma
comment je declare ca ?? au final il me fauderait un tableau avec toute les lettres et tous les chiffres ...
theuma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 13h49   #4
Membre Expert
 
Inscription : juin 2003
Messages : 1 203
Détails du profil
Informations personnelles :
Localisation : Sénégal

Informations forums :
Inscription : juin 2003
Messages : 1 203
Points : 1 413
Points : 1 413
Citation:
Envoyé par theuma Voir le message
comment je declare ca ?? au final il me fauderait un tableau avec toute les lettres et tous les chiffres ...
Pour ton besoin en l'état actuel, tu n'as pas besoin de déclarer un tableau de lettre et de chiffres.

Il te faut juste une fonctions qui recoit des variables pour faire ta requête.
De plus dans ta requête SQL, il n'y a pas que la lettre qui change, il ya aussi deux autres varaibles dans Mid(Repere1,3,1); repere1 et le premier chiffre changent.

Ta fonctions doit être déclarer de la facon suivante
Code :
1
2
3
4
 
Public Function mafonction(vlettre as String; vindicerepere as integer; vindice as integer)
 
end function
Dans la fonction, tu boucle sur vindicerepere (pour repere1 et repere2) et sur vindice pour construire ta requête.

A l'appel tu aura mafonction('A', 2, 7)

Si tu as plusieurs lettre, tu fais plusieurs appel

Voila.
__________________
Amicalement
DMboup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 14h22   #5
Membre du Club
 
Homme Mathieu
Étudiant
Inscription : avril 2011
Messages : 133
Détails du profil
Informations personnelles :
Nom : Homme Mathieu
Localisation : France, Vosges (Lorraine)

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : avril 2011
Messages : 133
Points : 50
Points : 50
Envoyer un message via MSN à theuma
Merci de ton aide ...
voila ce que j'ai fait ...
Code :
1
2
3
4
5
6
Public Function Recherche(vlettre As String, vindicerepere As Integer, vindice As Integer)
    For vindicerepere = vindicerepere To i < vindice Step 1
        Dim SQL As String
        SQL = "SELECT Count(*) AS B10, FK_Prefab,Nb, B10*Nb AS vlettre FROM LignePrefab WHERE Mid(Repere1,vindicerepere,1) LIKE vlettre AND FK_Prefab in (Select FK_Prefab From LignePrefab) Group BY FK_Prefab,Nb"
        DoCmd.RunSQL SQL
  End Function
Mais il doit y avoir un return quelqupart pour lui dire quoi retourner nan ??
theuma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 19h04   #6
Membre Expert
 
Inscription : juin 2003
Messages : 1 203
Détails du profil
Informations personnelles :
Localisation : Sénégal

Informations forums :
Inscription : juin 2003
Messages : 1 203
Points : 1 413
Points : 1 413


aïe

Tu est très mal parti.

Ce que tu veux faire n'est vraiment pas simple du tout.
Tu doit construire ta requête UNION dans une boucle.

Cherche dans la FAQ comment faire une boucle avec for ... next.
Mais surtout arrête toi une minute pour coucher sur du papier une logique de ton problème.

Je suis désolé, mais d'après ce que j'ai vu, tu est mal parti.
__________________
Amicalement
DMboup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2011, 12h02   #7
Membre du Club
 
Homme Mathieu
Étudiant
Inscription : avril 2011
Messages : 133
Détails du profil
Informations personnelles :
Nom : Homme Mathieu
Localisation : France, Vosges (Lorraine)

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : avril 2011
Messages : 133
Points : 50
Points : 50
Envoyer un message via MSN à theuma
Voila la fonction que j'ai ...
Code :
1
2
3
4
5
6
7
8
9
10
11
12
Public Function Recherche(vlettre As String, vindice As Integer)
    For i = 1 To vindice
        Dim SQL As String
 
        Dim rst As DAO.Recordset
        Dim resultat As Integer
        SQL = "Select SUM(Nbr)AS Resultat, Prefab FROM(SELECT Count(*) AS Compteur,Prefab,Compteur*Nb AS nbr FROM RepereConcat WHERE MID(Repere," & i & ",1) LIKE '" & vlettre & "' AND Prefab = Prefab GROUP BY Prefab, Nb)WHERE Prefab=Prefab GROUP By Prefab;"
        Set rst = CurrentDb.OpenRecordset(SQL, dbOpenForwardOnly, dbReadOnly)
        rst.Close
    Next
 
End Function
Mais ca ne me retourne rien ... Commenbt faire pour que ca me retourne une table avec resultat et prefab ??
theuma est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h05.


 
 
 
 
Partenaires

Hébergement Web