Filtre listeview vb6 avec base de donnée access

avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 - 31 déc. 2009 à 15:22
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 - 1 janv. 2010 à 15:53
Bonjour à tous.

Je un petit problème de code. En ce moment, je suis capable de faire apparaitre dans un listeview le contenu d'une base de donnée access.

Ce que je voudrais faire, c'est de placer 2 combobox, un pour choisir le nom et l'autre pour choisir le prénom. Ensuite, en cliquant sur le bouton OK, il me filtre la liste d'access avec seulement le nom désiré.

Premier combo = Com_nom
2e combo = Com_prenom

Comment faire s.v.p?

Voici mon code:
Private Sub cmdOk_Click()
Dim sSQL1 As String
 Dim oRST1 As ADODB.Recordset
  Set oRST1 = New ADODB.Recordset
    Dim oConnect1 As ADODB.Connection
  Set oConnect1 = New ADODB.Connection

sSQL1 = "SELECT [Nom],[Prénom],[Compagnie],[Division],[Événement],[Facture],[Service],[Coût] FROM [Table3]"
oConnect1.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & Paramètres.Text2.Text & ";"

    With Me.ListView1
        'Set ListView style
        .View = lvwReport
        'This is not supported by ListView 5
        .GridLines = True
        .FullRowSelect = True
        'Clear Header and ListItems
        .ListItems.Clear
        .ColumnHeaders.Clear
    End With
    'Set up column headers
    With Me.ListView1.ColumnHeaders
        .Add , , "Nom", 1800, lvwColumnLeft
        .Add , , "Prénom", 1800, lvwColumnLeft
        .Add , , "Compagnie", 2000, lvwColumnLeft
        .Add , , "Division", 2000, lvwColumnLeft
        .Add , , "Événement", 2000, lvwColumnLeft
        .Add , , "Facture", 2000, lvwColumnLeft
        .Add , , "Service", 2000, lvwColumnLeft
        .Add , , "Coût", 2000, lvwColumnLeft
    End With

oRST1.Open sSQL1, oConnect1


    ' Add items and subitems to list control.
On Error Resume Next
    oRST1.MoveFirst
    Do Until oRST1.EOF
     'Set oRST1.Filter "Nom '" & Com_nom.Text & "' AND Prénom = '" & Com_prenom.Text & "'"
       Set lstItem = Me.ListView1.ListItems.Add()
        lstItem.Text = oRST1!Nom
        lstItem.SubItems(1) = oRST1!Prénom
        lstItem.SubItems(2) = oRST1!Compagnie
        lstItem.SubItems(3) = oRST1!Division
        lstItem.SubItems(4) = oRST1!Événement
        lstItem.SubItems(5) = oRST1!facture
        lstItem.SubItems(6) = oRST1!Service
        lstItem.SubItems(7) = oRST1!Coût
       'Next row
        oRST1.MoveNext
    Loop
    'close recordset
    oRST1.Close
    DoCmd.Echo True


End Sub


Merci beaucoup pour votre aide.

4 réponses

cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
31 déc. 2009 à 15:38
bonjour

je n'utiliserai pas 2 combo et un bouton OK, lorsqu'une seule combo suffit .
utiliser la concanténation de 2 champs en un seul champ : j'espère que s'est possible en access je le fais avec SQL Server

Sub Form_Load
Dim oRST1 as ...
oRST1.Open select [Nom]+ '_'+ {Prenom] from [table3]
while not oRST1.EOF
'Combo.AddItem nom+'_'+prenom
Combo.AddItem oRST1.field(0)
Wend
En Sub

Sub Combo_Click()
'pour filtrer recharger en faisant un select ,,, from table3 where nom=patie avant le caractère souligné AND prenom=partie parès le souligné
End sub
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
31 déc. 2009 à 17:16
salut,


et le WHERE? il faut l'utiliser ;)

sSQL1 = "SELECT [Nom] ....", OK

ensuite on peut imaginer quelque chose du genre:

dim sWhere as string
swhere = vbnullstring
if len(Com_nom.text)>0 then
  swhere " WHERE [Nom] '" & replace(Com_nom.text, "'","''") & "'"
endif

if len(Com_prenom .text)>0 then
  if len(swhere)=0 then
    swhere " WHERE [Prénom] '" & replace(Com_prenom.text, "'","''") & "';"
  else
    swhere swhere & " AND [Prénom] '" & replace(Com_prenom.text, "'","''") & "';"
  endif
endif

'un dernier ; pour finir et go
if len(swhere)=0 then swhere=";"
oRST1.Open sSQL1 & swhere, oConnect1


çà devrait le faire ;)
tapé ici, vérifier un brin la syntaxe...

++
[hr]
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
31 déc. 2009 à 17:19
entre les derniers
  endif
endif



on peut mettre :
else
  swhere = swhere & ";"



enfin c'est pas vital non plus, access n'est pas pointilleux
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
1 janv. 2010 à 15:53
Super, merci.

Je fais le test et je vous reviens avec le verdict.
0
Rejoignez-nous