BrunoCheyrou
Messages postés61Date d'inscriptiondimanche 8 décembre 2002StatutMembreDernière intervention27 février 2009
-
3 juin 2008 à 16:50
BrunoCheyrou
Messages postés61Date d'inscriptiondimanche 8 décembre 2002StatutMembreDernière intervention27 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()
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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 & "')"
BrunoCheyrou
Messages postés61Date d'inscriptiondimanche 8 décembre 2002StatutMembreDernière intervention27 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
BrunoCheyrou
Messages postés61Date d'inscriptiondimanche 8 décembre 2002StatutMembreDernière intervention27 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. ;)
BrunoCheyrou
Messages postés61Date d'inscriptiondimanche 8 décembre 2002StatutMembreDernière intervention27 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 ;)