Pb de mise à jour automatique vb

Résolu/Fermé
-
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
-
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

Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 190
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)

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
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 190
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)