Mise à jour de ma base access [Résolu]

cs_SEB73460 259 Messages postés vendredi 15 avril 2005Date d'inscription 5 février 2015 Dernière intervention - 26 juin 2007 à 10:58 - Dernière réponse : chaibat05 1884 Messages postés samedi 1 avril 2006Date d'inscription 20 novembre 2007 Dernière intervention
- 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()
Afficher la suite 

Votre réponse

14 réponses

Meilleure réponse
chaibat05 1884 Messages postés samedi 1 avril 2006Date d'inscription 20 novembre 2007 Dernière intervention - 26 juin 2007 à 12:13
3
Merci
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.











 

Merci chaibat05 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 125 internautes ce mois-ci

Commenter la réponse de chaibat05
Meilleure réponse
chaibat05 1884 Messages postés samedi 1 avril 2006Date d'inscription 20 novembre 2007 Dernière intervention - 26 juin 2007 à 18:39
3
Merci
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à...

Merci chaibat05 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 125 internautes ce mois-ci

Commenter la réponse de chaibat05
cs_Exploreur 4824 Messages postés lundi 11 novembre 2002Date d'inscription 15 novembre 2016 Dernière intervention - 26 juin 2007 à 11:01
0
Merci
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

 
Commenter la réponse de cs_Exploreur
fiko81 381 Messages postés vendredi 24 septembre 2004Date d'inscription 5 septembre 2010 Dernière intervention - 26 juin 2007 à 11:02
0
Merci
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 />
Commenter la réponse de fiko81
cs_Exploreur 4824 Messages postés lundi 11 novembre 2002Date d'inscription 15 novembre 2016 Dernière intervention - 26 juin 2007 à 11:05
0
Merci
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

 
Commenter la réponse de cs_Exploreur
cs_Exploreur 4824 Messages postés lundi 11 novembre 2002Date d'inscription 15 novembre 2016 Dernière intervention - 26 juin 2007 à 11:12
0
Merci
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

 
Commenter la réponse de cs_Exploreur
cs_SEB73460 259 Messages postés vendredi 15 avril 2005Date d'inscription 5 février 2015 Dernière intervention - 26 juin 2007 à 11:12
0
Merci
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()












 
Commenter la réponse de cs_SEB73460
cs_Exploreur 4824 Messages postés lundi 11 novembre 2002Date d'inscription 15 novembre 2016 Dernière intervention - 26 juin 2007 à 11:20
0
Merci
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

 
Commenter la réponse de cs_Exploreur
chaibat05 1884 Messages postés samedi 1 avril 2006Date d'inscription 20 novembre 2007 Dernière intervention - 26 juin 2007 à 11:49
0
Merci
Bonjour,
c' est quoi ListView1Position ?
De plus Subitems(0) n' existe pas 
je pense que les subitems commencent à 1
Commenter la réponse de chaibat05
cs_Exploreur 4824 Messages postés lundi 11 novembre 2002Date d'inscription 15 novembre 2016 Dernière intervention - 26 juin 2007 à 13:18
0
Merci
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

 
Commenter la réponse de cs_Exploreur
chaibat05 1884 Messages postés samedi 1 avril 2006Date d'inscription 20 novembre 2007 Dernière intervention - 26 juin 2007 à 14:15
0
Merci
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.











 
Commenter la réponse de chaibat05
cs_SEB73460 259 Messages postés vendredi 15 avril 2005Date d'inscription 5 février 2015 Dernière intervention - 26 juin 2007 à 15:12
0
Merci
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+
Commenter la réponse de cs_SEB73460
im_no_angel_510 7 Messages postés mercredi 16 mai 2007Date d'inscription 15 juillet 2007 Dernière intervention - 1 juil. 2007 à 13:19
0
Merci
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 ,
Commenter la réponse de im_no_angel_510
chaibat05 1884 Messages postés samedi 1 avril 2006Date d'inscription 20 novembre 2007 Dernière intervention - 1 juil. 2007 à 20:54
0
Merci
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.
Commenter la réponse de chaibat05

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.