Bonjour,
Je developpe actuellement une petite application sous ACCESS 2007 servant a gerer des contrats pour une societe commerciale.
En simplifiant, j'ai trois tables :
1 - Table Customers (ce sont les clients de ma societe qui ont signe avec elle des contrats)
Cust_ID (cle)
Cust_Name (nom du client)
Cust_Spe (domaine d'activite du client . C'est un champ a valeurs multiples puisqu'ACCESS 2007 l'autorise)
2 - Table Contracts (les contrats signes entre ma societe et les clients precedents)
Ct_Nr (cle)
Ct_Name
Ct_Effectivedate (date d'entree en vigueur)
Ct_Term (date de fin du contrat)
Ct_Status (statut du contrat = actif/expire/resilier...)
Cust_ID (le client parti au contrat - lie a la table precedente)
3 - Table Fees (A chaque contrat sont associes des frais factures au client)
Fee_ID
Fee_Cat (categorie de frais)
Fee_Serv (type de prestation)
Fee_Ct_Nr (contrat auquel ces frais sont associes - lie a la table precedente)
Mon probleme:
J'ai realise un moteur de recherche des contrats selon certains criteres (le moteur est construit sur le tres bon exemple de Cafeine : http://cafeine.developpez.com/access...echerchemulti/
J'ai deux soucis actuellement :
- Lorsqu'un contrat n'a pas de Fee (aucun enregistrement dans la table Fees), le Contrat n'apparait pas dans les resultats de la recherche alors meme qu'il devrait apparaitre du fait des criteres saisis (par exemple le nom du contrat)
- 2eme probleme plus complique : les resultats dans le tableau affichent plusieurs fois le meme contrat... en fait, chaque contrat apparait autant de fois qu'il y de Fees attachees a celui-ci
Autrement dit : pas de Fees associes = pas de contrat liste apres la recherche
3 Fees associees au contrat = le meme contrat liste 3 fois
J'ai essaye de supprimer ces doublons de l'affichage en recourant a DISTINCT et DISTINCTROW sur le champ Ct_Nr, mais cela ne fait rien voire bloque la requete. J'ai egalement essaye des GROUP BY Ct_Nr HAVING ... mais la encore sans succes.
Je vous mets ci-dessous ma requete.
Un tres grand merci par avance si vous avez des pistes a me proposer pour avoir un affichage clair.
Julien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
32
33
34
35
36
37
38 Private Sub RefreshQuery() Dim SQL As String Dim SQLWhere As String SQL = "SELECT Contracts.Ct_Nr, Customers.Cust_Name, Contracts.Ct_Name, Contracts.Ct_Effectivedate, Contracts.Ct_Term, Contracts.Ct_Status, Contracts.Cust_ID, Customers.Cust_Spe, Fees.Ct_Nr, Fees.Fee_Cat, Fees.Fee_Serv FROM (Customers INNER JOIN Contracts ON Customers.Cust_ID = Contracts.Cust_ID) INNER JOIN Fees ON Fees.Ct_Nr = Contracts.Ct_Nr WHERE Contracts!Ct_Nr <> 0 " If Me.txt_SearchContract <> "" Then SQL = SQL & "And Contracts!Ct_Name like '*" & Me.txt_SearchContract & "*' " End If If Me.txt_SearchDate <> "" Then SQL = SQL & "And Contracts!Ct_Effectivedate like '*" & Me.txt_SearchDate & "*' " End If If Me.txt_SearchTerm <> "" Then SQL = SQL & "And Contracts!Ct_Term like '*" & Me.txt_SearchTerm & "*' " End If If Me.txt_SearchStat <> "" Then SQL = SQL & "And Contracts!Ct_Status = '" & Me.txt_SearchStat & "' " End If If Me.txt_SearchCust <> "" Then SQL = SQL & "And Customers!Cust_Name like '*" & Me.txt_SearchCust & "*' " End If If Me.txt_SearchServ <> "" Then SQL = SQL & "And Fees!Fee_Cat = '" & Me.txt_SearchServ & "' " End If If Me.txt_SearchFees <> "" Then SQL = SQL & "And Fees!Fee_Serv = '" & Me.txt_SearchFees & "' " End If If Me.txt_SearchIndustry <> "" Then SQL = SQL & "And Customers!Cust_Spe.value like '*" & Me.txt_SearchIndustry & "*' " End If SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1)) SQL = SQL & ";" Me.lstResults.RowSource = SQL Me.lstResults.Requery End Sub
Partager