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 :
(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).
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
Merci beaucoup de m'avoir lu jusqu'au bout !!
Partager