Problème d'UPDATE requête

Résolu
BrunoCheyrou Messages postés 61 Date d'inscription dimanche 8 décembre 2002 Statut Membre Dernière intervention 27 février 2009 - 3 juin 2008 à 16:50
BrunoCheyrou Messages postés 61 Date d'inscription dimanche 8 décembre 2002 Statut Membre Dernière intervention 27 février 2009 - 9 juin 2008 à 10:28
Bonjour, depuis peu, je code pour les besoins de mon entreprise en VB.NET.
Mon projet consiste à gérer une base de donnée Access à partir d'une application Windows totalement créer par mes soins. Cette base de donnée regroupe tous les contacts des différents sites de l'entreprise ainsi que les contacts extérieurs à l'entreprise. Pour le moment, j'ai réussi à créer une forum permettant l'ajout de contact. En ce moment je suis dans la phase de developpement de la form permettant la modification et la mise à jour de la base. Pour celà, j'utilise une datagridview sans modifications possible directement dans cette datagrid mais lorsque l'on clique sur une ligne, les informations se retrouvent juste en dessous dans des TextBox, MaskedTextBox, ComboBox, etc. Le problème c'est que pour Update (lors du clique sur le bouton), la modification de ma requête se fait sur tous les champs modifiés à partir d'un champ automatique, le champ d'identification appelé Num_auto (dans le WHERE). Voici mon code :

Imports

System.Data.OleDb

Imports System.Globalization
Public

Class Edit_data

      Private
Sub Edit_data_Load(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles
MyBase.Load
            
'TODO : cette ligne de code charge les données dans la table 'ContactsDataSet.annuaire'. Vous pouvez la déplacer ou la supprimer selon vos besoins.
            Me.AnnuaireTableAdapter.Fill(
Me.ContactsDataSet.annuaire)

            ' Format des MaskedTextBox en culture EN-US pour accepter les points
            Ligne_DirecteMaskedTextBox.Culture =
New CultureInfo(
"En-us")
            Ligne_DirecteMaskedTextBox.Mask =
"00.00.00.00.00"
            PortableMaskedTextBox.Culture =
New CultureInfo(
"En-us")
            PortableMaskedTextBox.Mask =
"00.00.00.00.00"
      End
Sub

      ' Mise à jour de la table lors du clique sur le bouton
      Private
Sub Button1_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles Button1.Click
            
Dim connec
As
New OleDbConnection()
            
Dim cmd_update
As
New OleDbCommand()
            connec =
New OleDbConnection(
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Contacts.mdb")
            cmd_update =
New OleDbCommand _ 
            (
"UPDATE annuaire SET Nom=('" & NomTextBox.Text &
"') WHERE Num_auto=('" & Num_autoTextBox.Text &
"')", connec)
            connec.Open()
            cmd_update.Connection = connec
            cmd_update.ExecuteNonQuery()
      

End
SubEnd

Class

MERCI

4 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
3 juin 2008 à 20:35
J'ai pas vraiment bien compris ton problème, mais tu parle d'un champ automatique appelé num_auto.
Je presume que ce champ est numérique, probablement un entier.

Pourquoi alors dans ta requette, dans le where lui passe-tu une chaine de caractère :
WHERE Num_auto= ( ' " & Num_autoTextBox.Text & "')"

---- Sevyc64  (alias Casy) ---- <hr size ="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
3
BrunoCheyrou Messages postés 61 Date d'inscription dimanche 8 décembre 2002 Statut Membre Dernière intervention 27 février 2009
3 juin 2008 à 17:23
Le problème viendrait apparament du fait que j'effectue un WHERE sur un champ incrémenté automatiquement. Pourtant je souhaite juste qu'il récupère le num_auto afin qu'il puisse faire les modifications au bon endroit. En effet lorsque j'effetue des test avec le prénom à la place du num_auto il n'y a pas d'erreur et la modification s'effectue normalement mais le WHERE doit obligatoirement se faire avec le num_auto.

Merci de m'aider je reste bloqué depuis trop longtemps
0
BrunoCheyrou Messages postés 61 Date d'inscription dimanche 8 décembre 2002 Statut Membre Dernière intervention 27 février 2009
9 juin 2008 à 09:42
En fait, j'ai remarqué qu'il m'était impossible d'inclure dans une requête un champ de type numéro automatique appelé num_auto.
Donc ici :
            cmd_update = New OleDbCommand _ 
            ("UPDATE annuaire SET Nom=('" & NomTextBox.Text & "') WHERE Num_auto=('" & Num_autoTextBox.Text & "')", connec)

La commande OleDb effectue une UPDATE dans la table annuaire en changeant le champ Nom par ce qui est contenu dans NomTextBox avec la condition du WHERE où le Num_auto est égal au texte contenu dans Num_autoTextBox.
Donc voilà c'est la condition qui ne fonctionne pas apparament parce que Num_auto est un champ de type numéro automatique. J'ai essayé (pour un simple test), d'effectuer la condition avec un autre type de champ et ca fonctionnait.

Merci de me donner si possible des explications. ;)
0
BrunoCheyrou Messages postés 61 Date d'inscription dimanche 8 décembre 2002 Statut Membre Dernière intervention 27 février 2009
9 juin 2008 à 10:28
Apparament il semblerait que ce soit dû aux ' ' qui mettent le Num_autoTextBox.Text comme chaine de caractère, j'ai donc enlevé ces 2 quotes et maintenant celà fonctionne.

Merci casy tu avais finalement bien compris mon problème ;)
0
Rejoignez-nous