Soyez le premier à donner votre avis sur cette source.
Snippet vu 7 594 fois - Téléchargée 26 fois
Public Function Recherche(SuppFind As Boolean, CritFind As Boolean) Dim Criteres As String, Support As String, CritRech As String Dim FirstCritSupp As Boolean, SecondCritSupp As Boolean FrmIndex.GridList.Rows = 2 FrmIndex.GridList.Clear FrmIndex.GridList.Visible = False DoEvents FirstCritSupp = False SecondCritSupp = False Support = "" CritRech = "" 'Si la recherche est exclusive pour les supports If SuppFind = True Then 'Si la recherche est exclusive pour les critères If CritFind = True Then 'Pour chaque support on le rajoute dans la liste des supports For indexCmbFindSup = 1 To FrmIndex.ChkFindSup.Count - 1 If FrmIndex.ChkFindSup(indexCmbFindSup).Value = 1 Then If FirstCritSupp = False Then Support = LireINI("InterfaceLoad", "CmbFindSup" & indexCmbFindSup & "Title") & "='1'" FirstCritSupp = True Else Support = Support & " AND " & LireINI("InterfaceLoad", "CmbFindSup" & indexCmbFindSup & "Title") & "='1'" End If End If Next 'Pour chaque critère on le rajoute dans la liste des critères For indexCmbFind = 1 To FrmIndex.ChkFind.Count - 1 If FrmIndex.ChkFind(indexCmbFind).Value = 1 Then If FirstCritSupp = False Then CritRech = FrmIndex.CmbFind(indexCmbFind).Tag & " LIKE '%" & FrmIndex.CmbFind(indexCmbFind).Text & "%'" FirstCritSupp = True Else CritRech = CritRech & " AND " & FrmIndex.CmbFind(indexCmbFind).Tag & " LIKE '%" & FrmIndex.CmbFind(indexCmbFind).Text & "%'" End If End If Next 'Messages d'erreur et sinon on rassemble les supports et les critères If Support = "" Then MsgBox "Veuillez sélectionner un ou plusieurs critères de recherche. ", vbCritical, "Erreur dans " & App.Title Exit Function Else If CritRech = "" Then MsgBox "Veuillez sélectionner un ou plusieurs critères de recherche. ", vbCritical, "Erreur dans " & App.Title Exit Function Else Criteres = Support & CritRech End If End If 'Si la recherche est cumulative pour les critères Else 'Pour chaque critère on cherche les supports For indexCmbFind = 1 To FrmIndex.ChkFind.Count - 1 If FrmIndex.ChkFind(indexCmbFind).Value = 1 Then CritRech = " AND " & FrmIndex.CmbFind(indexCmbFind).Tag & " LIKE '%" & FrmIndex.CmbFind(indexCmbFind).Text & "%'" If SecondCritSupp = False Then SecondCritSupp = True 'On créé la liste des supports For indexCmbFindSup = 1 To FrmIndex.ChkFindSup.Count - 1 If FrmIndex.ChkFindSup(indexCmbFindSup).Value = 1 Then If FirstCritSupp = False Then Support = LireINI("InterfaceLoad", "CmbFindSup" & indexCmbFindSup & "Title") & "='1'" FirstCritSupp = True Else Support = Support & " AND " & LireINI("InterfaceLoad", "CmbFindSup" & indexCmbFindSup & "Title") & "='1'" End If Criteres = "(" & Support & CritRech & ")" End If Next Else 'Pour chaque support on le rajoute à la liste des supports For indexCmbFindSup = 1 To FrmIndex.ChkFindSup.Count - 1 If FrmIndex.ChkFindSup(indexCmbFindSup).Value = 1 Then If FirstCritSupp = False Then Support = LireINI("InterfaceLoad", "CmbFindSup" & indexCmbFindSup & "Title") & "='1'" FirstCritSupp = True Else Support = Support & " AND " & LireINI("InterfaceLoad", "CmbFindSup" & indexCmbFindSup & "Title") & "='1'" End If Criteres = Criteres & " OR (" & Support & CritRech & ")" End If Next End If End If Next If Support = "" Then MsgBox "Veuillez sélectionner un ou plusieurs critères de recherche. ", vbCritical, "Erreur dans " & App.Title: Exit Function If CritRech = "" Then MsgBox "Veuillez sélectionner un ou plusieurs critères de recherche. ", vbCritical, "Erreur dans " & App.Title: Exit Function End If 'Si la recherche est cumulative pour les supports Else 'Si la recherche est exclusive pour les critères If CritFind = True Then 'Pour chaque support on cherche les critères For indexCmbFindSup = 1 To FrmIndex.ChkFind.Count - 1 If FrmIndex.ChkFindSup(indexCmbFindSup).Value = 1 Then Support = LireINI("InterfaceLoad", "CmbFindSup" & indexCmbFindSup & "Title") & "='1'" If SecondCritSupp = False Then SecondCritSupp = True 'On créé la liste des critères For indexCmbFind = 1 To FrmIndex.ChkFind.Count - 1 If FrmIndex.ChkFind(indexCmbFind).Value = 1 Then CritRech = CritRech & " AND " & FrmIndex.CmbFind(indexCmbFind).Tag & " LIKE '%" & FrmIndex.CmbFind(indexCmbFind).Text & "%'" Criteres = "(" & Support & CritRech & ")" End If Next If CritRech = "" Then MsgBox "Veuillez sélectionner un ou plusieurs critères de recherche. ", vbCritical, "Erreur dans " & App.Title: Exit Function Else 'Pour chaque critère on le rajoute à la liste des critères For indexCmbFind = 1 To FrmIndex.ChkFind.Count - 1 If FrmIndex.ChkFind(indexCmbFind).Value = 1 Then CritRech = CritRech & " AND " & FrmIndex.CmbFind(indexCmbFind).Tag & " LIKE '%" & FrmIndex.CmbFind(indexCmbFind).Text & "%'" Criteres = Criteres & " OR (" & Support & CritRech & ")" End If Next If CritRech = "" Then MsgBox "Veuillez sélectionner un ou plusieurs critères de recherche. ", vbCritical, "Erreur dans " & App.Title: Exit Function End If End If If Support = "" Then MsgBox "Veuillez sélectionner un ou plusieurs critères de recherche. ", vbCritical, "Erreur dans " & App.Title: Exit Function Next 'Si la recherche est cumulative pour les critères Else 'Pour chaque support on cherche les critères For indexCmbFindSup = 1 To FrmIndex.ChkFind.Count - 1 If FrmIndex.ChkFindSup(indexCmbFindSup).Value = 1 Then Support = LireINI("InterfaceLoad", "CmbFindSup" & indexCmbFindSup & "Title") & "='1'" If SecondCritSupp = False Then 'Pour chaque critère on le rajoute à la liste de critères For indexCmbFind = 1 To FrmIndex.ChkFind.Count - 1 If FrmIndex.ChkFind(indexCmbFind).Value = 1 Then CritRech = " AND " & FrmIndex.CmbFind(indexCmbFind).Tag & " LIKE '%" & FrmIndex.CmbFind(indexCmbFind).Text & "%'" If FirstCritSupp = False Then Criteres = "(" & Support & CritRech & ")" FirstCritSupp = True Else Criteres = Criteres & " OR (" & Support & CritRech & ")" End If End If Next If CritRech = "" Then MsgBox "Veuillez sélectionner un ou plusieurs critères de recherche. ", vbCritical, "Erreur dans " & App.Title: Exit Function SecondCritSupp = True Else 'Pour chaque critère on le rajoute à la liste de critères For indexCmbFind = 1 To FrmIndex.ChkFind.Count - 1 If FrmIndex.ChkFind(indexCmbFind).Value = 1 Then CritRech = " AND " & FrmIndex.CmbFind(indexCmbFind).Tag & " LIKE '%" & FrmIndex.CmbFind(indexCmbFind).Text & "%'" Criteres = Criteres & " OR (" & Support & CritRech & ")" End If Next If CritRech = "" Then MsgBox "Veuillez sélectionner un ou plusieurs critères de recherche. ", vbCritical, "Erreur dans " & App.Title: Exit Function End If End If Next If Support = "" Then MsgBox "Veuillez sélectionner un ou plusieurs critères de recherche. ", vbCritical, "Erreur dans " & App.Title: Exit Function End If End If ConnectionBase Set enreg = New Recordset L = 1 enreg.Open "SELECT FILMno,FILMreal,FILMtito,FILMtitf,FILMpays,FILMdate,FILMlang,FILMcoul,FILMacte,FILMscen,FILMimag,FILMmont,FILMmusi," & _ "DVD,DVDajou,DVDform,DVDcoul,DVDlang,DVDsstt,DVDchai,DVDdate,DVDdure,DVDautr,DVDqual,DVDep,DVDlp,VHS,VHSajou,VHSform," & _ "VHScoul,VHSlang,VHSsstt,VHSchai,VHSdate,VHSdure,VHSautr,VHSqual,VHSrest,VHSchro " & _ "FROM [Films] " & _ "WHERE " & Criteres & " ORDER BY FILMtito", _ conne, adOpenStatic, adLockReadOnly enreg.MoveFirst Do Until enreg.EOF contenu = enreg!FILMno & Chr(9) & enreg!FILMreal & Chr(9) & enreg!FILMtito & Chr(9) & enreg!FILMtitf & _ Chr(9) & enreg!FILMpays & Chr(9) & enreg!FILMdate & Chr(9) & enreg!FILMlang & Chr(9) & enreg!FILMcoul & _ Chr(9) & enreg!FILMacte & Chr(9) & enreg!FILMscen & Chr(9) & enreg!FILMimag & Chr(9) & enreg!FILMmont & _ Chr(9) & enreg!FILMmusi & Chr(9) & enreg!DVD & Chr(9) & enreg!DVDajou & Chr(9) & enreg!DVDform & _ Chr(9) & enreg!DVDcoul & Chr(9) & enreg!DVDlang & Chr(9) & enreg!DVDsstt & Chr(9) & enreg!DVDchai & _ Chr(9) & enreg!DVDdate & Chr(9) & enreg!DVDdure & Chr(9) & enreg!DVDautr & Chr(9) & enreg!DVDqual & _ Chr(9) & enreg!DVDep & Chr(9) & enreg!DVDlp & Chr(9) & enreg!VHS & Chr(9) & enreg!VHSajou & _ Chr(9) & enreg!VHSform & Chr(9) & enreg!VHScoul & Chr(9) & enreg!VHSlang & Chr(9) & enreg!VHSsstt & _ Chr(9) & enreg!VHSchai & Chr(9) & enreg!VHSdate & Chr(9) & enreg!VHSdure & Chr(9) & enreg!VHSautr & _ Chr(9) & enreg!VHSqual & Chr(9) & enreg!VHSrest & Chr(9) & enreg!VHSchro FrmIndex.GridList.AddItem contenu FrmFlash.ProgFlash.Value = L / nb_film * 100 enreg.MoveNext L = L + 1 Loop FrmIndex.GridList.Visible = True Call Progression(False) enreg.Close Set enreg = Nothing DeConnectionBase (True) End Function
3 oct. 2006 à 18:12
En fait, je n'avais jamais entendu parlé du système de parenthèses dans le SQL... je connais quelques fonctions et la "grammaire" du langage en question mais je ne connais rien de sa ponctuation...
Si en effet les parenthèse fonctionnent comme tu le dis, je me lance directement. Là tout de suite je n'ai pas le temps (fac de philo et tout et tout, huhuhu), mais je me lance dans c't'enroule dès ce soir.
30 sept. 2006 à 14:32
"SELECT ... WHERE (VHS OR DVD) AND (REALISATEUR LIKE '%Duschmell%' AND ACTEUR LIKE '%lui%'
donc mon code deviendra :
SQL="Select * From table Where ("
+selection VHS et/ou DVD
SQL=SQL & ") " & Operateur de melange type et critaire (AND ou OR) & " ("
+selection critères
SQL=SQL & ")"
?
30 sept. 2006 à 12:37
"SELECT ... WHERE VHS OR DVD AND REALISATEUR LIKE '%Duschmell%' AND ACTEUR LIKE '%lui%'
Ce qui ne recherche pas du tout ce que je veux : il suffit que le film soit sur VHS pour qu'il soit affiché, sans tenir compte des critères de réalisateur et d'acteur... tout le problème est là. Mais c'est vrai qu'au début moi aussi j'avais fait un petit code tout propret.
Merci pour ta participation, et n'hésite pas à m'aider encore... j'en ai bien besoin.
30 sept. 2006 à 10:46
30 sept. 2006 à 10:42
Dim SQL as string
Dim OpSup as string
Dim OpCrit as string
SQL="Select * From table Where 1 "
if SupCumulée then OpSup=" AND " else OpSup=" OR "
if CritCumulée then OpsCrit=" AND " else OpCrit=" OR "
' ici intégrer les conditions de recherche, je montre que pour les critères:
for Teller=0 to nrcrit
if listbox(teller).text<>"" then
sql=sql & OpCrit & "Critère Like %""" & listbox(teller).text & "%"""
end if
next
Set RS=DB.openrecordset(SQL)
et voila tous les info's dans un recordset ....... pas bcp plus simple ça ??
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.