Bonjour,
Je suis en train de faire un petit formulaire en Vb.net pour ajouter des entrées à une base de données Access qui gère des commandes.
À l'ouverture, le formulaire n'est pas lié à la base, ce n'est qu'au moment de transférer les données que je fais la liaison.
Il y a un premier niveau, celui de la commande que j'arrive à enregistrer sans problème dans la base. J'arrive aussi à récupérer l'ID généré par access.
Là où j'ai un souci, c'est avec le DGV qui vient ensuite et dans lequel j'entre une ou plusieurs positions de la commande en question.
Dans mon exemple, j'ai un DGV avec trois colonnes (désignation, nombre, unité) que je veux transférer dans les champs Designation, nombre et unite de la table TblPosition.
Pour le moment, j'ai fait des essais, peu concluants, avec ce code:
Le problème, c'est que la dernière ligne du DGV est toujours vide pour permettre de nouveaux ajouts, et cette ligne génère une erreur puisqu'il n'y a rien à enregistrer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 conn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source = D:\bd.mdb;") Dim selStr As String = "INSERT INTO TblPosition (ID, Designation, nombre, unite) VALUES (@PosID, @Design, @nbre, @unit)" Dim pr(4) As OleDbParameter da1.InsertCommand = New OleDbCommand(selStr, conn) pr(0) = da1.InsertCommand.Parameters.Add("@PosID", OleDbType.Integer) pr(1) = da1.InsertCommand.Parameters.Add("@Design", OleDbType.VarChar) pr(2) = da1.InsertCommand.Parameters.Add("@nbre", OleDbType.Integer) pr(3) = da1.InsertCommand.Parameters.Add("@unit", OleDbType.VarChar) For i = 0 To Me.DataGridView1.Rows.Count - 1 Dim row As DataGridViewRow = Me.DataGridView1.Rows(i) pr(0).Value = Me.PositionID.Text pr(1).Value = Me.DataGridView1.Rows(i).Cells(1).Value pr(2).Value = Me.DataGridView1.Rows(i).Cells(3).Value pr(3).Value = Me.DataGridView1.Rows(i).Cells(4).Value Next conn.Open() da1.InsertCommand.ExecuteNonQuery() conn.Close()
Je me demande si c'est la bonne méthode pour faire ce que je veux. Je pense qu'il faudrait peut-être mieux passer par un dataset/datatable, non ?
Si c'est le cas, comment est-ce que je peux faire ça assez simplement, sachant que mon DGV n'est lié à aucune source au chargement du formulaire?
Merci pour votre aide!
Guillaume
Partager