Private Sub attente_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles attente.CheckedChanged
If attente.Checked = True Then
warning.Visible = True
OK.Visible = False
Label2.Visible = True
Label1.Visible = False
Label3.Visible = False
End If
If attente.Checked = False Then
warning.Visible = False
OK.Visible = True
Label2.Visible = False
Label1.Visible = False
Label3.Visible = True
End If
End Sub
Private Sub encours_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles encours.CheckedChanged
If encours.Checked = True Then
warning.Visible = True
OK.Visible = False
Label1.Visible = True
Label2.Visible = False
Label3.Visible = False
End If
If encours.Checked = False Then
warning.Visible = False
OK.Visible = True
Label1.Visible = False
Label2.Visible = False
Label3.Visible = True
End If
End Sub
Private Sub resolu_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles resolu.CheckedChanged
If resolu.Checked = True Then
OK.Visible = True
warning.Visible = False
Label1.Visible = False
Label2.Visible = False
Label3.Visible = True
End If
If resolu.Checked = False Then
OK.Visible = False
Label3.Visible = False
End If
End Sub
Private Sub Filtre_Change() Handles searcharg.TextChanged, filtre.SelectedIndexChanged
Dim FilterArgs As String = filtre.Text & " LIKE '" & searcharg.Text & "%'"
ReferenceBindingSource.Filter = FilterArgs
End Sub
Private Sub DGV2_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DGV2.CellContentClick
btn_del.Enabled = (DGV2.RowCount <> 0)
btn_save.Enabled = (DGV2.RowCount <> 0)
End Sub
Private Sub DGV1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DGV1.CellContentClick
btn_del.Enabled = (DGV1.RowCount <> 0)
btn_save.Enabled = (DGV1.RowCount <> 0)
End Sub
Private Sub DGV3_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DGV3.CellContentClick
btn_del.Enabled = (DGV3.RowCount <> 0)
btn_save.Enabled = (DGV3.RowCount <> 0)
End Sub
Private Sub btn_save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_save.Click
Dim haserror As Boolean = False
EP.Clear()
If produit.Text.Length = 0 Then
EP.SetError(produit, "le champ "" Produit"" doit être renseigné! ")
haserror = True
End If
If type.Text.Length = 0 Then
EP.SetError(type, "le champ "" type"" doit être renseigné!")
haserror = True
End If
If haserror Then
Exit Sub
End If
Dim index As Guid = CType(DGV1.SelectedRows(0).Cells(0).Value, Guid)
Try
Dim Nbline As Integer = ReferenceTableAdapter.Update(produit.Text, type.Text, poids.Text, classe.Text, revetement.Text, information.Text, index)
If Nbline > 0 Then
MessageBox.Show("Le produit a bien été enregistré" & "dans la base de données", "mise à jour de la base", MessageBoxButtons.OK, MessageBoxIcon.Information)
Call RefreshDataSource()
End If
Catch ex As Exception
MessageBox.Show("erreur - accès BD" & Environment.NewLine & "detail de l'erreur:" & ex.Message, "Echec accès BD!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try
NHenry
Messages postés15112Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention13 avril 2024159 26 nov. 2012 à 13:40
Bonjour,
As-tu regardé l'aide de la fonction incriminée ?
{Point 2}
---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list ---
Mon site
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 26 nov. 2012 à 15:38
@lolokes>
Comme je te l'ai dit en MP c'est surement un problème de requête SQL. Le problème c'est que dans mon tuto je modifi les requêtes SQL, en as-tu fais de même ?
Les requêtes SQL se font via des assistants (celui du DataSet fortement typé) et ne sont pas visibles dans la partie code. Je ne peux donc pas faire grand chose car je ne connais pas la structure de ta base.
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
j'ai essayé de modifier la requete comme tu l'as fait en sql, mais ça n'a rien fait. En plus elle ne se présente pas pareil, donc je ne sais pas si il ne faut pas la modifier autrement...
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 26 nov. 2012 à 17:10
Qui plus est : Si je fais rennomer les requêtes SQL dans le tuto c'est pour éviter de se retrouver avec des p1, p2, p3... dans les procédures VB. Du coup si tu as modifé ta requête UPDATE, tu dois avoir remplacé tes paramètres @p1, @p2... par les noms des tes colonnes ?
Dim Nbline As Integer = ReferenceTableAdapter.Update(produit.Text, type.Text, poids.Text, classe.Text, revetement.Text, information.Text, index)
Je vois dans ton code, au niveau de la procédure Update que tu as bien remplacé tes champs tu ne les a pas mis par hasard ? tu as bien suivis l'intellisense ?
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Voilà la forme de la requete avant modification par exemple pour le delete...
DELETE FROM reference
WHERE ([INDEX] = ?) AND (? = 1 AND PRODUIT IS NULL OR
PRODUIT ?) AND (? 1 AND TYPE IS NULL OR
TYPE ?) AND (? 1 AND CLASSE IS NULL OR
CLASSE ?) AND (? 1 AND POIDS IS NULL OR
POIDS ?) AND (? 1 AND REVETEMENT IS NULL OR
REVETEMENT ?) AND (? 1 AND INFORMATION IS NULL OR
INFORMATION ?) AND (? 1 AND LIGNE IS NULL OR
LIGNE ?) AND (? 1 AND QUANTITE IS NULL OR
QUANTITE ?) AND (? 1 AND GRAPPE IS NULL OR
GRAPPE ?) AND (? 1 AND COMMENTAIRE IS NULL OR
COMMENTAIRE = ?)
voilà la requête UPDATE
Mais ,je me suis mal exprimé, toute la requête ne fonctionne pas...
en fait il doit y avoir un truc, je sais pas quoi qui bloque (j'ai renomé le "ID" de ton tuto en "index", mais je crois pas que ce soit ça???)
UPDATE reference
SET PRODUIT ?, TYPE ?, CLASSE = ?, POIDS = ?, REVETEMENT = ?, INFORMATION = ?, LIGNE = ?, QUANTITE = ?, GRAPPE = ?,
COMMENTAIRE = ?
WHERE ([INDEX] = ?) AND (? = 1 AND PRODUIT IS NULL OR
PRODUIT ?) AND (? 1 AND TYPE IS NULL OR
TYPE ?) AND (? 1 AND CLASSE IS NULL OR
CLASSE ?) AND (? 1 AND POIDS IS NULL OR
POIDS ?) AND (? 1 AND REVETEMENT IS NULL OR
REVETEMENT ?) AND (? 1 AND INFORMATION IS NULL OR
INFORMATION ?) AND (? 1 AND LIGNE IS NULL OR
LIGNE ?) AND (? 1 AND QUANTITE IS NULL OR
QUANTITE ?) AND (? 1 AND GRAPPE IS NULL OR
GRAPPE ?) AND (? 1 AND COMMENTAIRE IS NULL OR
COMMENTAIRE = ?)
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 27 nov. 2012 à 10:01
Effectivement non, renommer le champ n'a pas d’importance. Sauf que la tu as donner un nom (Index) utilisé par le langage SQL. Du coup chaque fois que tu fera référence à cette colonne elle devra se trouver entre crochet [] pour être échappée. C'est comme nommer une variable "if" en VB.
Aussi je constate que tu n'as pas modifié les requêtes comme je l'ai fait dans mon tuto. Lorsque je t'ai dis de le relire tu m'a affirmé l'avoir relus plusieurs fois. Si tu l'avait vraiment lu je pense que tu aurais tout de même fait attention aux modifications apportées pour les requêtes SQL qui concernent quand même une bonne partie du tuto.
UPDATE reference
SET PRODUIT ?, TYPE ?, CLASSE = ?, POIDS = ?, REVETEMENT = ?, INFORMATION = ?, LIGNE = ?, QUANTITE = ?, GRAPPE = ?,
COMMENTAIRE = ?
WHERE ([INDEX] = ?) AND (? = 1 AND PRODUIT IS NULL OR
PRODUIT ?) AND (? 1 AND TYPE IS NULL OR
TYPE ?) AND (? 1 AND CLASSE IS NULL OR
CLASSE ?) AND (? 1 AND POIDS IS NULL OR
POIDS ?) AND (? 1 AND REVETEMENT IS NULL OR
REVETEMENT ?) AND (? 1 AND INFORMATION IS NULL OR
INFORMATION ?) AND (? 1 AND LIGNE IS NULL OR
LIGNE ?) AND (? 1 AND QUANTITE IS NULL OR
QUANTITE ?) AND (? 1 AND GRAPPE IS NULL OR
GRAPPE ?) AND (? 1 AND COMMENTAIRE IS NULL OR
COMMENTAIRE = ?)
Si tu as bien défini la colonne INDEX en tant que clé primaire de ta table alors il n'est pas utile d'identifier la ligne par toutes ses colonnes. L'identifier via la clé primaire est amplement suffisant car elle est unique. Tu n'as donc aucun risque de te tromper. En suite il te faut remplacer les ? par les noms de colonnes. Je ne sais pas si ADO.Net autorise les @Var pour accès mais je suppose que oui. Ce remplacement a pour seul but de renommer les champs dans la saisie semi-automatique de VS (l'Intellisense), ainsi lorsque tu appelle ta méthode update, tu peux voir les noms des champs.
UPDATE reference
SET PRODUIT @PRODUIT, TYPE @TYPE, [etc...]
WHERE ([INDEX] = @Index)
Voilà, normalement ça devrait fonctionner avec un truc dans le genre.
Visual Studio est bien gentil car il génère du code pour aider le développeur à être plus productif. Mais ce code SQL est un code de base et l'IDE ne peut absolument pas deviner les besoins du développeur. C'est pour cette raison qu'étudier le Transact-SQL un minima est important car VS ne peut pas tout faire à notre place, même s'il en fait déjà beaucoup.
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Si je l'avais fais, mais à chaque fois je reviens à ma situation initiale pour ne pas "m'enfoncer"... tu comprends, comme ça je suis quitte de faire des modifs et de ne plus savoir quoi par la suite...
Alors OK, je vais voir comme tu as dis... et je te tiens au courant???
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 27 nov. 2012 à 10:10
OK je comprends mieux pourquoi.
Oui tiens nous informé. D'ailleurs si ça fonctionne je te suggère de poster ta requête ici et de marqué le sujet comme résolu (Bouton "réponse acceptée"). Ainsi ceux qui tomberont ici un jour profiteront de ton expérience sans avoir à reposer la même question.
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
pour le moment, ça ne marche pas, voilà ce que j'ai fait...
DELETE FROM reference
WHERE ([INDEX] = [INDEX])
(j'ai pas mis @ devant sinon quand j'execute la requete il me met une erreur et comme ça ça va... ???)
ensuite la requete UPDATE, ne fonctionne que comme ça (avec les @ ça va pas non plus)
UPDATE reference
SET PRODUIT PRODUIT, TYPE TYPE, CLASSE = CLASSE, POIDS = POIDS, REVETEMENT = REVETEMENT, INFORMATION = INFORMATION,
LIGNE LIGNE, QUANTITE QUANTITE, GRAPPE = GRAPPE, COMMENTAIRE = COMMENTAIRE
WHERE ([INDEX] = [INDEX])
Cependant, il y a toujours l'erreur dans le code...
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 27 nov. 2012 à 11:18
Heu... Je doute fort que ça fonctionne.
Comment VS peut-il savoir si tu parle de ta variable ou de ta colonne ???
WHERE ([INDEX] = [INDEX])
Laquelle correspond à la variable transmise à Delete et laquelle au nom de la colonne à mettre à jour ???
À mon avis c'est le transact qui diffère. Comme je te l'ai expliqué plus haut, virer les ? sert à voir les noms des champs dans les procédures VB c'est tout. Donc si les ? via Accès te marquent les noms des champs les modifier ne te sers à rien. Il faut les laisser et on gagne même du temps par rapport au MS SQL du coup car le renommage est inutile. Seul la modification de la clause WHERE reste à faire.
Si tu mets en requête delete :
DELETE FROM reference
WHERE ([INDEX] = ?)
Que vois-tu lorsque dans ton code tu saisie :
Dim NbLine As Integer = ReferenceTableAdapter.Delete(
Qu'est-ce que intellisense te marque ?
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 27 nov. 2012 à 11:38
J'ai du mal m'exprimer.
En fait je voulais dire, lorque tu saisie, pendant la saisie.
Dim NbLine As Integer = ReferenceTableAdapter.Delete(
Si tu tape uniquement ce code cela te mettra une errer c'est forcé car la ligne n'est pas complète. Mais lorsque tu saisi ton code sous VB, celui-ci te propose des choses et t'indique les types des paramètres à saisir. T'indique-t-il que le paramètre s'appel INDEX et que son type est GUID ?
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.