Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
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 30/01/2012, 11h54   #1
Membre du Club
 
Inscription : décembre 2008
Messages : 150
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 150
Points : 52
Points : 52
Envoyer un message via MSN à Salsaboy60
Par défaut Recherche multi-critères, adapter sql

Bonjour,

j'utilise dans mon bdd une formulaire multi-critères, comme trouver ici sur le site.
ça fonctionne très, très bien, mais, quand je entre une critère de recherche, il m'affiche tout les résultats dans la base entière. Par contre, j'aimerai voir uniquement les articles que j'ai effectivement EN STOCK.

Dans mon bdd, j'ai une table Marchandises et une table Détail Stock. La table Marchandises contient toutes les références marchandises unique et la table Détail Stock toutes les opérations IN / OUT.

J'ai changé donc la recherche sql comme ceci :

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
31
Private Sub RefreshQuery()
Dim sql As String
Dim SQLWhere As String
 
sql = "SELECT DetailStock!N°IdProduit, Marchandises![Numéro d'article], Marchandises!Désignation, Sum((nz([Mouvements]))-nz([Sortie])-nz([Perte])) AS Stock FROM Marchandises INNER JOIN DetailStock ON Marchandises!N°IdProduit = DetailStock!N°IdProduit Where Marchandises![N°IdProduit] <> 0 GROUP BY DetailStock!N°IdProduit, Marchandises![Numéro d'article], Marchandises!DésignationMarchandises"
 
If Not Me.chkFamille Then
    sql = sql & "And Marchandises![IdFamille] like '" & Me.txtRechFamille & "'"
    End If
If Not Me.chkArticle Then
    sql = sql & "And Marchandises![Numéro d'article] = '" & Me.cmbRechArticle & "' "
End If
If Not Me.chkFournisseur Then
    sql = sql & "And Marchandises![N°Fournisseur] like '*" & Me.txtRechFournisseur & "*' "
End If
If Not Me.chkDesignation Then
    sql = sql & "And Marchandises![Désignation] like '*" & Me.txtRechDesignation & "*' "
End If
If Not Me.chkCodebarre Then
    sql = sql & "And Marchandises![Code barre] = '" & Me.cmbRechCodebarre & "' "
End If
 
SQLWhere = Trim(Right(sql, Len(sql) - InStr(sql, "Where ") - Len("Where ") + 1))
 
sql = sql & ";"
 
Me.lblStats.Caption = DCount("*", "Marchandises", SQLWhere) & " / " & DCount("*", "Marchandises")
Me.lstResults.RowSource = sql
Me.lstResults.Requery
 
End Sub

Malheureusement, ça m'affiche aucun résultat. Est-ce que quelqu’un peut m'aider avec ce problème, car c'est un peu complexe pour moi.

Merci d'avance pour vos remarques.

Hans
Salsaboy60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 12h11   #2
Membre éclairé
 
Homme Michel
Développeur informatique
Inscription : février 2008
Messages : 263
Détails du profil
Informations personnelles :
Nom : Homme Michel
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : février 2008
Messages : 263
Points : 309
Points : 309
Ton truc est un peu long pour l'analyser en détail, mais déjà, juste "à vue d'oeil", je vois qu'entre :

Marchandises!DésignationMarchandises" et
sql = sql & "And Marchandises![IdFamille] like ..."
faudrait sans doute écrire
sql = sql & " And Marchandises![IdFamille] like ..."

il n'y a pas d'espace ... donc ton "Marchandises!DésignationMarchandises" va être collé à "And Marchandises![IdFamille] like ..." ce qui ne devrait pas être du meilleur effet...

Je te suggère, pour avancer dans ta recherche d'erreur, de mettre un "stop" suivi d'un "debug.print sql" juste avant de charger ton rowsource et de regarder dans le fenêtre d'exécution à quoi ressemble ce que tu mets dans le rowsource.. cela devrait te permettre de voir si ton code SQL généré est ok ou à quel endroit il ne l'est pas.

cela donnerait :
Code :
1
2
3
4
5
6
7
sql = sql & ";"
'Arrêt du programme
STOP
'Examen du contenu de la variable sql dans la fenêtre d'exécution
Debug.print sql
Me.lblStats.Caption = DCount("*", "Marchandises", SQLWhere) & " / " & DCount("*", "Marchandises")
Me.lstResults.RowSource = sql

Michel
Orion34080 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 13h11   #3
Membre du Club
 
Inscription : décembre 2008
Messages : 150
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 150
Points : 52
Points : 52
Envoyer un message via MSN à Salsaboy60
J'ai une message "Erreur de syntaxe (opérateur absent) dans l'expression ........
Salsaboy60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 13h31   #4
Membre éclairé
 
Homme Michel
Développeur informatique
Inscription : février 2008
Messages : 263
Détails du profil
Informations personnelles :
Nom : Homme Michel
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : février 2008
Messages : 263
Points : 309
Points : 309
Ben oui,
mais le mieux serait de faire un copier/coller de ce que tu obtiens (dans la fenêtre d'exécution) quand tu regardes la valeur du champs "sql" ... après avoir passé la commande "debug.print sql" comme dit plus haut et de nous communiquer ce copier/coller.
Michel
Orion34080 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 15h07   #5
Membre du Club
 
Inscription : décembre 2008
Messages : 150
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 150
Points : 52
Points : 52
Envoyer un message via MSN à Salsaboy60
La requête ne marche pas comme ça. Je dois d'abord trouver la bonne formule. Merci pour le moment
Salsaboy60 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 14h07.


 
 
 
 
Partenaires

Hébergement Web