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
| Private Sub OuvreDB()
NomDBComplet = ' à obtenir de n'importe quelle façon, OpenFileDialog par exmple
' La fameuse chaine de connexion ...
' C'est grâce à elle, et moyennant la modification de quelques déclarations, qu'il est possible de transformer ce programme
' en une application SGDB_polyvalente : Access, SQL Serveur, MySql, Oracle, ... .
'ChaineConnexion = "Data Source=" & NomDuServeurSQL & "; Initial Catalog=" & NomDBComplet & ";Integrated Security=True;"
ChaineConnexion = "Data Source=" & NomDuServeurSQL & "; AttachDbFilename=" & NomDBComplet & ";Integrated Security=True"
MaConnexion = OuvreConnexion(ChaineConnexion) ' Des codes, mêmes exploités une seule fois (dans ce programme) sont mis
' sous procédure.
' La principale raison est que dans une application un peu plus complexe, ils sont réutilisés plusieurs fois. Par ailleurs,
' l'isolation de ces codes permet de les ignorer (provisoirement) lorsqu'on élabore de nouvelles procédures et d'alléger leur code.
' OuvreDB() contient 6 lignes de codes, parfaitement compréhensibles. Si tous les codes des procédures appellées étaient reproduits
' ici, OuvreDB() contiendrait plus de 15 lignes de codes, bien moins lisibles.
ChargeDonnees() ' ...
AfficheDonnees() ' ...
End Sub
' Avoir accès effectif aux données. Dans le mode connecté utilisé dans les mises à jour en temps réel, la connexion dit être ouverte,
' dans d'autres cas, il suffit qu'elle soit définie, un DataApter procéde lui-même ) l'ouverure effective.
Private Function OuvreConnexion(ByVal ChaineConnexionComplete As String, Optional ByVal Ouvrir As Boolean = True) As SqlConnection
Dim UneConnexion As New SqlConnection
UneConnexion.ConnectionString = ChaineConnexionComplete
If Ouvrir Then UneConnexion.Open() ' Ouverture effective non nécessaire pour l'utilisation d'un DataAdapter
Return UneConnexion
End Function
' Utiliser la connexion pour lire les données de la DB selon la requête (SQL) passée par paramètre et renvoyer une DataTable pour le DataSet en mémoire
Private Function CreeUneTable(ByRef UneConnexion As SQLConnection, ByVal Selection As String) As DataTable
Dim UneTable As New DataTable
Dim UneConnexionTmp As New SQLDataAdapter(Selection, UneConnexion)
UneConnexionTmp.FillSchema(UneTable, SchemaType.Source)
UneConnexionTmp.Fill(UneTable)
Return UneTable
End Function
' La connexion établie à l'ouveryure de la DB est utilisée pour rechercher les tables pour le DataSet en mémoire
Private Sub ChargeDonnees()
' Chargement des tables dans le DataSet
MonStock.Tables.Add(CreeUneTable(MaConnexion, "SELECT * FROM TProduit"))
' MonStock.Tables.Add(CreeUneTable(MaConnexion, "SELECT * FROM ..............."))
' .............
End Sub
' Il suffit ici de lier les composants visuels aux données qu'ils doivent afficher. La prgrammation "manuelle" de ces liaisons
' permet d'en rompre lorsque cela est souhaitable selon les nécessité du moment et de les reconstruire ensuite.
' Dans ce programme, AfficheDonnees définit les liaisons et LibereBindings() les rompt.
Private Sub AfficheDonnees()
' Liaison du ListBox au DataSet par la propriété DataSource et désignation du champ à
' présenter par la propriété DisplayMember.
If MonStock.Tables("TProduit").Rows.Count < 1 Then ' Pas la peine si pas d'enregistrement.
Exit Sub
End If
' Certains composants dispose d'un DataSource est ceux qui ne peuvent présenter qu'un seul champs d'nu enregistrement ont
' un DataMember. C'est le cas d'une ListBox ou d'une ComboBox, ainsi qu'un DataGridView alors on a :
LaComboBox.DataSource = MonStock.Tables("TProduit") ' par exemple
LaComboBox.DataMember = "Id" ' par exemple
LaListBox.DataSource = MonStock.Tables("TProduit") ' par exemple
LaListBox.DataMember = "Article" ' par exemple
' Un DataGridView qui se "forge" et se remplit "tout seul"
DGVStock.DataSource = MonStock.Tables("TProduit") ' Certains composants dispose d'un DataSource
DGVStock.Columns("Id").ReadOnly = True ' On ne touche pas manuellement aux Id
' Certains composants ne dispose pas de DataSource mais il possède une collection de Bindings dans laquelle
' on ajoute le nom de la propriété affectée, le DataSet qui produit les données, et le champ à affecter à la propriété
' Exemple : TArticle.DataBindings.Add("Text", MonStock.Tables("TProduit"), "Article")
' On affecte le champ "Aricle" des enregistrements de "TProduit" à la propriété "Text" de la Textbox "TArticle"
TId.DataBindings.Add("Text", MonStock.Tables("TProduit"), "Id") ' Certains composants ne dispose pas de DataSource
TId.ReadOnly = True ' On ne touche pas manuellement aux Id
TArticle.DataBindings.Add("Text", MonStock.Tables("TProduit"), "Article")
' ................
End Sub |
Partager