Pb de mise à jour automatique vb

Résolu
nague29 -  
Polux31 Messages postés 7219 Statut Membre -
Bonjour à tous,
Voilà j'ai un souci qui me tracasse depuis pas mal de temps maintenant. Je vais essayer de vous l'expliquer clairement :
à partir d'une application vb6 je porte des modifications sur une base de données existante access. J'arrive à m'y connecté sans aucun souci, mes modifications marchent également (modifier nom d'un produit, supprimer, ajouter...).Tout cela fonctionne sauf que les modifications apportées ne prennent pas effet automatiquement. Je suis alors obliger de quitter mon application vb et de la relancer et là par contre les produits ou famille de produits se sont bien rajouter dans mes combobox ou listbox.
Je serais vraiment heureux si quelqu'un avait la patience de m'aider et de trouver la solution pour que les modifications apportées se fassent tout de suite en direct. Pour vous aider à y voir plus clair je vous montre un bout de code qui sert à ajouter par exemple une famille de produit dans ma listbox :

Private Sub btn_ajou_Click()
Dim ajou As String
Dim cnn As New ADODB.Connection
Dim maj As String

' Connexion à la base de donnée
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\Raito-Kun\Mes documents\Numérim\calcul stock\numérim.mdb"

' Ajout d'un champ de type "String"
ajou = InputBox("Saisissez le nom de la nouvelle famille :")
cnn.Execute "INSERT INTO famille(famille) VALUES('" & (ajou) & "')"

cnn.Close

End Sub

et voici le code qui charger ma listbox au chargement du form (au cas où):

Private Sub Form_Load()

'/////////On remplie la listbox famille et la combo/////////////'
Dim oADO As ADODB.Connection
Dim ors As ADODB.Recordset
Dim strPWD As String
Dim strSQL As String

Set oADO = New ADODB.Connection

'Dans le cas d'une DB avec un mot de passe
With oADO
.Provider = "Microsoft.jet.oledb.4.0;"
.Mode = adModeShareDenyNone
.ConnectionString = "C:\Documents and Settings\Raito-Kun\Mes documents\Numérim\calcul stock\numérim.mdb"
.Open
End With

Set ors = New ADODB.Recordset

strSQL = "SELECT famille FROM famille ORDER BY id_famille"

With ors
.CursorLocation = adUseClient
.Open strSQL, oADO, adOpenForwardOnly, adLockOptimistic
.Properties.Refresh
.MoveLast
.MoveFirst

Do While Not .EOF
Lst_fam.AddItem .Fields("famille").Value
.MoveNext
Loop
.Close

End With

oADO.Close
Set ors = Nothing
Set oADO = Nothing
'/////////////////C'est fini pour la listbox et la combo!!!!!/////////////////////'

End Sub

voilà j'espère que j'ai été assez clair et que je ne vous embête pas trop avec mes problème qui peuvent paraitre bête mais je suis débutant en vb
Je vous remercie d'avance de votre aide précieuse.

nague29

3 réponses

  1. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    Voilà ce que je propose :

    Private Sub btn_ajou_Click() 
    Dim ajou As String 
    Dim cnn As New ADODB.Connection 
    Dim maj As String 
    
    ' Connexion à la base de donnée 
    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\Raito-Kun\Mes documents\Numérim\calcul stock\numérim.mdb" 
    
    ' Ajout d'un champ de type "String" 
    ajou = InputBox("Saisissez le nom de la nouvelle famille :") 
    cnn.Execute "INSERT INTO famille(famille) VALUES('" & (ajou) & "')" 
    
    cnn.Close 
    
    RefreshForm
    
    End Sub 
    
    Private Sub Form_Load() 
    RefreshForm
    End Sub
    
    Public Sub RefreshForm()
    
    '/////////On remplie la listbox famille et la combo/////////////' 
    Dim oADO As ADODB.Connection 
    Dim ors As ADODB.Recordset 
    Dim strPWD As String 
    Dim strSQL As String 
    
    Set oADO = New ADODB.Connection 
    
    'Dans le cas d'une DB avec un mot de passe 
    With oADO 
    .Provider = "Microsoft.jet.oledb.4.0;" 
    .Mode = adModeShareDenyNone 
    .ConnectionString = "C:\Documents and Settings\Raito-Kun\Mes documents\Numérim\calcul stock\numérim.mdb" 
    .Open 
    End With 
    
    Set ors = New ADODB.Recordset 
    
    strSQL = "SELECT famille FROM famille ORDER BY id_famille" 
    
    With ors 
    .CursorLocation = adUseClient 
    .Open strSQL, oADO, adOpenForwardOnly, adLockOptimistic 
    .Properties.Refresh 
    .MoveLast 
    .MoveFirst 
    
    Do While Not .EOF 
    Lst_fam.AddItem .Fields("famille").Value 
    .MoveNext 
    Loop 
    .Close 
    
    End With 
    
    oADO.Close 
    Set ors = Nothing 
    Set oADO = Nothing 
    '/////////////////C'est fini pour la listbox et la combo!!!!!/////////////////////' 
    
    End Sub 
    


    En fait, l'initialisation du listbox et du combo se fait sur le Load de la Form. J'ai juste modifier le Form_Load qui fait appel à la procédure RefreshForm() pour initialiser le listbox et combo. Cette procédure est également appelée à la fin du traitement d'insertion dans btn_ajou_click().

    ;o)
    0
  2. nague29
     
    Salut Polux31 !
    C'est génial ça marche ! franchement je ne sais pas comment te remercier. Tu peux pas savoir comment ça me faisait galérer ce truc !
    Juste un truc : lorsque je faisait ajouter et bien il me mettait la liste à jour (niquel), mais en double !
    Donc j'ai tout simplement fait :

    lst_fam.clear

    Avant la connexion à la base de données dans le form_refresh et ça marche impeccable ! Mais bon dis-moi si c'est une bêtise de faire un clear mais là je ne pense pas car au final ce sont bien les familles issues de ma base de données.

    Donc grâce à mon sauveur polux31 mon problème est résolu!
    Merci 1000 fois !!

    au fait merci également de la rapidité de ton intervention ça fait plaisir et tu m'a bien expliquer en plus comment ta fait donc mes respect
    0
  3. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Content de t'avoir aidé.

    Tu as raison, il faut bien mettre lst_fam.clear en tout début de la procédure ResfreshForm(), c'est là sa place ...

    Ma contribution a été mineure, je n'ai fait que modifier 2 choses et en plus j'ai oublié le lst_fam.clear ... tout le mérite te revient.

    Bon courage pour la suite.

    ;o)
    0