Bonjour,

Je fais l'un de mes premiers programmes après avoir suivi quelques cours de VB.NET en ligne et voici ce que je souhaiterais faire.
J'ai relié mon programme VB.NET à une base de données Access (qui est bien affichée dans ma fenêtre "Source de données"). Cette base de données comporte deux tables, "Games" et "Kicks".

Sur mon interface graphique Form1, j'ai une grande picturebox affichant un fond de terrain de foot, sur laquelle j'aimerais faire figurer une image pour chaque tir depuis la position où la balle a été frappée. Chaque enregistrement de la base de données correspond à un tir et contient les informations sur l'abscisse (abs) et l'ordonnée (ord) de la position de frappe. J'ai donc créé une boucle pour chaque enregistrement qui me permet d'afficher une nouvelle picturebox à la position souhaitée avec une image de balle verte ou rouge (si le tir est cadré ou pas). Je n'ai aucun message d'erreur mais rien ne s'affiche dans mon programme à part mon fond de terrain et quelques premières checkbox que j'avais mises pour pouvoir trier les tirs (le seul message est une alerte "Une exception de première chance de type System.Data.OleDb.OleDbException s'est produite dans System.Data.dll", mais le programme peut s'exécuter).

De plus, j'aimerais aussi créer des checkbox dynamiques pour chaque enregistrement de match (table "Games", comprenant notamment les champs "Team" et "Location"), permettant de cocher ou non les matchs, mais là encore malgré mes recherches sur internet mon code n'affiche pas d'erreur (mais la même alerte) et rien ne s'affiche...

Si vous pouviez m'aider ce serait super !! Je vous mets mon code :

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
Imports System
Imports System.Data
Imports System.Data.OleDb
Imports Microsoft.VisualBasic
 
Public Class Form1
    Public connection As OleDbConnection 'Connexion
    Public command As OleDbCommand 'Commande
    Public dataReader As OleDbDataReader 'Data reader (simple)
    Public dataAdapter As OleDbDataAdapter 'Data adapter (multiple)
    Public dataSet As New DataSet 'Data set
    Public SQL As String 'Requête
    Public dataTable As DataTable 'Data table
    Public dataRow As DataRow 'Ligne
    Public rowNumber As Integer 'Enregistrement
    Public connectionString As String 'String de connexion
    Public commandBuilder As OleDbCommandBuilder 'Command builder
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Ouverture de connexion
        connectionString = "provider = microsoft.ace.oledb.12.0 ; datasource = " & Application.StartupPath & "\DB_Kicks.accdb; Persist Security Info = false; Initial Catalog = Test"
        connection = New System.Data.OleDb.OleDbConnection
        connection.ConnectionString = connectionString
        connection.Open()
 
        'Création de requête SQL
        SQL = "SELECT * FROM Games"
 
        'Création de commande
        command = New OleDbCommand(SQL, connection)
 
        'Création du data reader (lecture champs simples)
        dataReader = command.ExecuteReader()
 
        'Création du data adapter (lecture de plusieurs champs)
        dataAdapter = New OleDbDataAdapter(command)
 
        'Instance de commande avec la connexion
        command.Connection = (connection)
 
        'Chargement du data set
        dataAdapter.Fill(dataSet, "Games")
 
        'Chargement de la data table
        dataTable = dataSet.Tables("Games")
 
        'Assignation de la valeur de lignes
        rowNumber = dataTable.Rows.Count
 
        'Création de CheckBox pour chaque enregistrement de match
        Dim i As Integer = 0
        For i = 0 To rowNumber - 1
            Dim BOXG As New CheckBox
            With BOXG
                .Name = "BOX_Game" & i + 1
                .Text = dataTable.Rows(i).Item("Team" & " (" & "Location" & ")")
                .Font = New System.Drawing.Font("Microsoft Sans Serif", 11)
                .Location = New System.Drawing.Point(592, 37 + 28 * i)
            End With
        Next
        i = 0
 
        'Modification de la requête pour passer à la table des coups de pieds
        SQL = "SELECT * FROM Kicks"
        command = New OleDbCommand(SQL, connection)
        dataReader = command.ExecuteReader()
        dataAdapter = New OleDbDataAdapter(command)
        command.Connection = (connection)
        dataAdapter.Fill(dataSet, "Games")
        dataTable = dataSet.Tables("Games")
        rowNumber = dataTable.Rows.Count
 
        'Création de PictureBox pour chaque coup de pied
        For i = 0 To rowNumber - 1
            Dim KickPBOX As New PictureBox
            With KickPBOX
                .Name = "Kick " & i + 1
                .Location = New System.Drawing.Point(dataTable.Rows(i).Item("abs"), dataTable.Rows(i).Item("ord"))
                Dim converted As Boolean = dataTable.Rows(i).Item("Converted")
                If converted = True Then
                    .BackgroundImage = Image.FromFile(Application.StartupPath & "greenball.png")
                    .BackgroundImageLayout = ImageLayout.Zoom
                Else : .BackgroundImage = Image.FromFile(Application.StartupPath & "redball.png")
                    .BackgroundImageLayout = ImageLayout.Zoom
                End If
            End With
        Next
 
 
    End Sub
 
    Private Sub BOX_All_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BOX_All.CheckedChanged
 
        BOX_Converted.Checked = BOX_All.Checked
        BOX_Missed.Checked = BOX_All.Checked
        BOX_Centered.Checked = BOX_All.Checked
        BOX_Offset.Checked = BOX_All.Checked
 
    End Sub
End Class
(PS : Petit détail : j'ai réassigné de nouvelles valeurs pour toutes les variables concernant la requête SQL alors que mes tables sont liées (la clef primaire de "Games" apparaît dans "Kicks" mais je ne sais pas comment chercher les champs de "Games" directement depuis "Kicks", il y a certainement un moyen plus rapide).

Merci beaucoup de m'avoir lu jusqu'au bout !!