Optimisation code VB.net avec requetes SQL multi tables
kaelinou
Messages postés9Date d'inscriptionjeudi 4 septembre 2014StatutMembreDernière intervention14 septembre 2014
-
Modifié par kaelinou le 13/09/2014 à 08:59
jordane45
Messages postés38138Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention17 avril 2024
-
14 sept. 2014 à 15:28
Bonjour,
je souhaite rediger un code avec des Requetes en SQL en vb.net pour remplir un datagridview d'après plusieurs tables :
1- Remplir les entetes de colonnes avec une liste dans la table [HISTO]
2- Remplir la premiere colonne 'Noms' avec les noms de la table [SPV]
3- Remplir les cellules avec les dates les plus recentes des tables [HISTO] + [VM] + [NOMINATION]
Voici mon code avec mes differentes requetes mais ca met un certain temps a s'executer :
'----------------Remplissage des entetes de colonnes----------------- DataGridView1.Columns.Add("NOM", "NOM") DataGridView1.Columns(0).Frozen = True DataGridView1.Columns.Add("GRADE", "GRADE") DataGridView1.Columns.Add("DATE", "DATE") DataGridView1.Columns.Add("VM", "VM")
mySelectquery = "SELECT distinct FORMATION from [HISTO] where recu='O'"
While dtaRead.Read() DataGridView1.ROWS.Add(dtaRead.GetValue(0).ToString) End While
dtaRead.Close() MyConnection.Close()
'---------------------Remplissage des cellules---------------------
'-----Grade + Date_Nomination----- For i As Integer=1 To DataGridView1.Rows.Count-2 Dim t As date="01/01/1900" mySelectquery = "SELECT distinct N.Grade,N.Date_NOMINATION from [NOMINATION] N WHERE N.NOM='" & datagridview1.Rows(i).Cells(0).value & "'"
While dtaRead.Read() If CDate(dtaRead.GetValue(1).ToString)>CDate(t.ToString) Then t=CDate(dtaRead.GetValue(1).ToString) DataGridView1.ROWS(i).Cells(1).value=dtaRead.GetValue(0).ToString DataGridView1.ROWS(i).Cells(2).value=Format(month(dtaRead.GetValue(1).ToString),"00") & "/"& microsoft.VisualBasic.Right(year(dtaRead.GetValue(1).ToString),2) End if End While
dtaRead.Close() MyConnection.Close() Next
'-----VM----- For i As Integer=1 To DataGridView1.Rows.Count-2 Dim t As date="01/01/1900" mySelectquery = "SELECT distinct Date_VM from [VM] WHERE NOM='" & datagridview1.Rows(i).Cells(0).value & "'"
While dtaRead.Read() If CDate(dtaRead.GetValue(0).ToString)>CDate(t.ToString) Then t=CDate(dtaRead.GetValue(0).ToString) DataGridView1.ROWS(i).Cells(3).value=Format(month(dtaRead.GetValue(0).ToString),"00") & "/"& microsoft.VisualBasic.Right(year(dtaRead.GetValue(0).ToString),2) End if End While
dtaRead.Close() MyConnection.Close() Next
'-----Formation----- For i As Integer=1 To DataGridView1.Rows.Count-2 Dim t As date="01/01/1900" For j As Integer=4 To DataGridView1.ColumnCount-1
mySelectquery = "SELECT distinct FIN from [HISTO] WHERE RECU='O' and NOM='" & datagridview1.Rows(i).Cells(0).value & "' and FORMATION='" & datagridview1.columns(j).HeaderText & "'"
While dtaRead.Read() If CDate(dtaRead.GetValue(0).ToString)>CDate(t.ToString) Then t=CDate(dtaRead.GetValue(0).ToString) DataGridView1.ROWS(i).Cells(j).value=microsoft.VisualBasic.Right(year(dtaRead.GetValue(0).ToString),2) End if End While
dtaRead.Close() MyConnection.Close() Next Next
Je ne sais pas faire un code plus simple et plus efficace pour arriver à faire la meme chose.
Quelqu'un pourrait me donner un coup de pouce? Merci d'avance!
jordane45
Messages postés38138Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention17 avril 2024344 13 sept. 2014 à 12:00
Bonjour,
Le souci est que tu utilises plusieurs requêtes et qu'en plus tu en utilises certaines dans une boucle...
Donc... ton programme ouvre/ferme des connexion à ta BDD...l'interroge...plusieurs fois....
En règle générale on essai de faire UNE seule requête qui récupère toutes les données et Ensuite on les manipules... comme ça on ne fait qu'UN seul accès à la BDD...
Pour faire ce genre de requête il faut utiliser des jointures..
kaelinou
Messages postés9Date d'inscriptionjeudi 4 septembre 2014StatutMembreDernière intervention14 septembre 2014 14 sept. 2014 à 09:19
Merci pour ta réponse,
J'ai essayé de faire un requete avec jointure mais je n'y suis pas arrivé, idem avec la fonction pivot...
Penses tu pouvoir m'aider?
jordane45
Messages postés38138Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention17 avril 2024344 14 sept. 2014 à 15:28
Penses tu pouvoir m'aider?
T'aider ? .. oui surement...
Mais pour ça... il nous faut plusieurs choses :
1 - La structure de tes tables ( avec quelques exemples de données si possible)
J'ai essayé de faire un requete avec jointure
2 - Que tu nous montre la/les requête(s) que tu as essayé pour qu'on puisse éventuellement te la corriger.
mais je n'y suis pas arrivé,
3 - Que tu nous dises ce que tu as obtenu et en quoi cela n'a pas fonctionné ?
NB: Bien entendu... tu as testé ta requête EN DIRECT dans ta BDD ??
Déjà pour t'assurer qu'elle te retournait bien les informations nécéssaires ensuite pour les afficher...????....