Mise à jour de ma base access

Résolu
cs_SEB73460 Messages postés 271 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 29 novembre 2022 - 26 juin 2007 à 10:58
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 - 1 juil. 2007 à 20:54
Bonjour à tous,

Lors de la mise à jour de ma base Access avec l'instruction "Update" je n'arrive pas à mettre à jour la ligne que j'ai selectionnée dans mon listview
J'ai du oublier quelque chose dans mon code !
Merci pour votre aide
A+
Mon code :

'Initialisation de la chaine de paramŠtres pour la connection

ConnString =

"Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & Application.StartupPath &
"\PROG.mdb;"

'Donne … la propri‚t‚ connectionstring les paramŠtres de connexionobjconnection.ConnectionString = ConnString

'Ouverture de la connectionobjconnection.Open()

'Fermeture de la connectionobjconnection.Close()
'Requete de mise … jour de la baseSQLString "UPDATE PROG SET [Fabricant]'" & TextBox7.Text &
"', [Type] ='" & TextBox8.Text &
"', [D‚signation] ='" & TextBox2.Text &
"', [Taille m‚moire] ='" & TextBox1.Text &
"', [Boitier] ='" & TextBox9.Text &
"', [Temps d'accŠs] ='" & TextBox3.Text &
"', [Nombre d'octets] ='" & TextBox4.Text &
"', [Code Fabricant] ='" & TextBox6.Text &
"', [Code Composant] ='" & TextBox5.Text &
"' WHERE Fabricant ='" & form11.ListView1.Items(form11.ListView1Position).Text &
"'"

Try

'Code qui execute la requeteobjconnection.Open()

Dim objCommand
As
New OleDb.OleDbCommand(SQLString, objconnection)objCommand.ExecuteNonQuery()

objconnection.Close()

'Gestionnaire d'erreurs sur la requete

Catch ex
As ExceptionMsgBox(ex.ToString)

End
Try

'Mise … jour de la listview de la form11 - Contenu des textbox dans le listview de la form11form11.ListView1.Items(form11.ListView1Position).SubItems(0).Text = TextBox7.Text

'Fabricantform11.ListView1.Items(form11.ListView1Position).SubItems(1).Text = TextBox8.Text

'Typeform11.ListView1.Items(form11.ListView1Position).SubItems(2).Text = TextBox2.Text

'D‚signationform11.ListView1.Items(form11.ListView1Position).SubItems(3).Text = TextBox1.Text

'Taille m‚moireform11.ListView1.Items(form11.ListView1Position).SubItems(4).Text = TextBox9.Text

'Boitierform11.ListView1.Items(form11.ListView1Position).SubItems(5).Text = TextBox3.Text

'Temps d'accŠsform11.ListView1.Items(form11.ListView1Position).SubItems(6).Text = TextBox4.Text

'Nombre d'octetsform11.ListView1.Items(form11.ListView1Position).SubItems(7).Text = TextBox6.Text

'Code Fabricantform11.ListView1.Items(form11.ListView1Position).SubItems(8).Text = TextBox5.Text

'Code Composant

'Ferme la form19

Me.Hide()

14 réponses

chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
26 juin 2007 à 12:13
Pour la question de la clé primaire,
le N° auto est déconseillé.C' est un truc pour la compta de pépère...:-)
Utilises un EntierLong que tu pourras gérer à ta guise.


WHERE Fabricant ='" & form11.ListView1.Items(form11.ListView1Position).Text & "'"
ne suffit pas pour être précis.
Si tu as plus d' une ligne pour un même fabriquant.
Toutes ses occcurences vont être mises à jour


Questions :
For Each ListView1Position In ListView1.SelectedIndices
???
Next


If ListView1.SelectedIndices.Count <> 0 Then
???
End If
 
Met plutôt
If ListView1.SelectedIndices.Count = 0 Then  Exit Sub tout au début
et avant même l' ouverture de la connection.











 
3
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
26 juin 2007 à 18:39
Volontier...
Il suffit de suivre...
Donc
>Champ Id type EntierLong
 De même dans toutes les tables ou il figure comme clé étrangère.


<>Pour ajouter un enregistrement
    >Récupèrer à travers une Requete sur la table pour avoir le Max de Id
     et  l' incrémenté de 1


  >Pour boucher un trou comme tu dis, voici une fonction qui renvoie
    le premier numéro non encore utilisé
    Ex:
1
2
3
7
8
10
20


cette fonction doit donc me renvoyer 4
 
Function Premier_Non_Utilise() As Long 
 
 Premier_Non_Utilise=1


 
  Dim Prec As Long
 
 With rs
     .MoveFirst
      Prec=![Id]
     .MoveNext
  
  Do While Not .Eof
       If  ![Id]-Prec=2 Then Exit Do
       Prec=![Id]
       .MoveNext
  Loop
 End With


 Premier_Non_Utilise=Prec+1


End Function











Ps: C' est fait à main levée .Il se peut que j' ai raté quelque chose.
Mais le principe est là...
3
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
26 juin 2007 à 11:01
Salut,

Est-ce que ta requête te positionnes bien le bon record de ta base avant l'update ?

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
0
fiko81 Messages postés 381 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 5 septembre 2010 3
26 juin 2007 à 11:02
Salut,
Je pense que tu n'as rien oublié... au contraire tu ouvres ta base mais la referme aussi tot :

'Initialisation de la chaine de param?tres pour la connection

ConnString =

"Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & Application.StartupPath &
"\PROG.mdb;"'Donne ? la propri?t? connectionstring les param?tres de connexionobjconnection.ConnectionString = ConnString

'Ouverture de la connectionobjconnection.Open()

<strike>'Fermeture de la connectionobjconnection.Close()
</strike>'Requete de mise ? jour de la baseSQLString "UPDATE PROG SET [Fabricant]'" & TextBox7.Text &
"', [Type] ='" & TextBox8.Text &
"', [D?signation] ='" & TextBox2.Text &
"', [Taille m?moire] ='" & TextBox1.Text &
"', [Boitier] ='" & TextBox9.Text &
"', [Temps d'acc?s] ='" & TextBox3.Text &
"', [Nombre d'octets] ='" & TextBox4.Text &
"', [Code Fabricant] ='" & TextBox6.Text &
"', [Code Composant] ='" & TextBox5.Text &
"' WHERE Fabricant ='" & form11.ListView1.Items(form11.ListView1Position).Text &
"'"Try'Code qui execute la requeteobjconnection.Open()

Dim objCommand
AsNew OleDb.OleDbCommand(SQLString, objconnection)objCommand.ExecuteNonQuery()

objconnection.Close()

'Gestionnaire d'erreurs sur la requeteCatch ex
As ExceptionMsgBox(ex.ToString)

EndTry'Mise ? jour de la listview de la form11 - Contenu des textbox dans le listview de la form11form11.ListView1.Items(form11.ListView1Position).SubItems(0).Text = TextBox7.Text

'Fabricantform11.ListView1.Items(form11.ListView1Position).SubItems(1).Text = TextBox8.Text

'Typeform11.ListView1.Items(form11.ListView1Position).SubItems(2).Text = TextBox2.Text

'D?signationform11.ListView1.Items(form11.ListView1Position).SubItems(3).Text = TextBox1.Text

'Taille m?moireform11.ListView1.Items(form11.ListView1Position).SubItems(4).Text = TextBox9.Text

'Boitierform11.ListView1.Items(form11.ListView1Position).SubItems(5).Text = TextBox3.Text

'Temps d'acc?sform11.ListView1.Items(form11.ListView1Position).SubItems(6).Text = TextBox4.Text

'Nombre d'octetsform11.ListView1.Items(form11.ListView1Position).SubItems(7).Text = TextBox6.Text

'Code Fabricantform11.ListView1.Items(form11.ListView1Position).SubItems(8).Text = TextBox5.Text

'Code Composant'Ferme la form19Me.Hide()

'Fermeture de la connectionobjconnection.Close()

 Fiko ;-)

La reponse vous convient pensez > Accepter <
<hr />
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
26 juin 2007 à 11:05
Re,

Car je crois que tu récupère la position de ton listview, qui n'est pas forcément la position de ton record dans ta base de donnée....

Si tu as créer une clé primaire, je te conseille de l'utiliser, cela sera plus pratique pour toi, pour te positionner sur le bon record à modifier...

Tu n'as cas créer un colonne dans ta listview qui affiche le numéro auto de ta table et quand tu fais ta requête tu te sers de celui-ci pour te positionner dessus dans ta table...

FIN REQUETE :

WHERE Fabricant = ' & NUMEROAUTO & '"

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
26 juin 2007 à 11:12
Oh le gros naz que je suis...., me suis focaliser sur sa requête et pas vu la fermeture de la base juste aprés l'ouverture...

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
0
cs_SEB73460 Messages postés 271 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 29 novembre 2022
26 juin 2007 à 11:12
Merci à tous pour vos réponses,

pour Exploreur,
 -non je n'ai pas creer de clé primaire et je ne prefere pas l'utiliser pour le moment
car apres avoir fais des essais , si je supprime un enregistrement je me retrouve avec un trou dans les clés

Voici le code que j'ai quand je Doubleclick sur mon listview :


' Pour ˆtre sur que vous avez s‚lectionner un item








If
ListView1.SelectedIndices.Count <> 0

Then






End



If






' Pour faire la ligne s‚lectionn‚ avec toutes les colonnes






For



Each
ListView1Position

In
ListView1.SelectedIndices


Next









'Affiche contenu de la ligne s‚lectionn‚e du listview1 dans les textbox de la Form11

Form19.TextBox7.Text = ListView1.Items(ListView1Position).Text()


Form19.TextBox8.Text = ListView1.Items(ListView1Position).SubItems(1).Text


Form19.TextBox2.Text = ListView1.Items(ListView1Position).SubItems(2).Text


Form19.TextBox1.Text = ListView1.Items(ListView1Position).SubItems(3).Text


Form19.TextBox9.Text = ListView1.Items(ListView1Position).SubItems(4).Text


Form19.TextBox3.Text = ListView1.Items(ListView1Position).SubItems(5).Text


Form19.TextBox4.Text = ListView1.Items(ListView1Position).SubItems(6).Text


Form19.TextBox6.Text = ListView1.Items(ListView1Position).SubItems(7).Text


Form19.TextBox5.Text = ListView1.Items(ListView1Position).SubItems(8).Text







'ouverture de la form19

Form19.Show()












 
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
26 juin 2007 à 11:20
Salut,

Tu as raison pour les trous, mais cela est parfois très utile d'avoir une clé primaire...Mais il existe des source pour pouvoir compacter et réparer une base de donnée sur le site, cela enlève justement les trous...Mais comme tu le dis, chacun fais comme il a envie....

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
26 juin 2007 à 11:49
Bonjour,
c' est quoi ListView1Position ?
De plus Subitems(0) n' existe pas 
je pense que les subitems commencent à 1
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
26 juin 2007 à 13:18
Salut,

Salut Chaibat05, tu es dur là : C' est un truc pour la compta de pépère  

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
26 juin 2007 à 14:15
Salut Exploreur,


Ma remarque traduit mon antipathie pour le N° Auto :-)
En plus c' est vrai...Microsoft l' a prévu pour des petites applic
pour gérer le budget familiale ou tout autre gestion pour la quel
on ne se soucie guère de la clé.
Du moment ou elle permet d' avoir un index pour afficher dans
l' ordre d' entrée,on s' en contrete.


PS: @ SEB, tu aurais compris cerainement que c' était sans
méchanceté de ma part.











 
0
cs_SEB73460 Messages postés 271 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 29 novembre 2022
26 juin 2007 à 15:12
Merci pout ta réponse Chaibat05

"Utilises un EntierLong que tu pourras gérer à ta guise." je ne comprends pas !
je débute en vb.net
peut tu me donner un peu plus d'infos à ce sujet ?
Merci beaucoup
A+
0
im_no_angel_510 Messages postés 7 Date d'inscription mercredi 16 mai 2007 Statut Membre Dernière intervention 15 juillet 2007
1 juil. 2007 à 13:19
dans une gestion commercial si un client a commandé une quantité on doi faire sortir cette quantité du stock donc on doit automatiquement faire un mise a jour a notre base de donnée pour reduire le nombre de ce produit dans le stock mai je sais pas comment y faire dans vb
please help me ,
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
1 juil. 2007 à 20:54
En règle général,
la quantité disponible d' un produit est calculée à partir de
(Stock_Initial+SommeQteEntree)-SommeQteSortie
En liant ta table Produits (Stock_iniial) à une requete regroupement
sur ta table Details_Commandes ou Detail_Mouvements (Qte entrée et Qte sortie)
tu peux générer un tel calcul.
Pour faire de telle requete, tout dépend si tu as une table pour les entrées
et une pour les sorties ou si tu n' as qu' une seule table avec un libellé:
achat ou vente. et donc entrée ou sortie
Difficile de te répondre avec précision si on ignore tout de ta base et
de la structure de tes tables.
En tout cas moi j' intervertis juste Qte en - Qte en cas de vente lors de ma requete
regroupement.
Je dis bien générer et non mettre à jour qte en stock.Pour moi , cette donnée ne figure
nulle part.C' est à dire qu' elle n' est pas enregistrée  mais juste calculée au moment
ou je désire avoir une idée sur le stock.
0
Rejoignez-nous